2013-10-01 4 views
0

다음 PowerShell 스크립트를 사용하여 현재 두 개가 아닌 하나의 .CSV 파일 만 출력하면 도움이 필요합니다. 누군가 제발 도와 줄 수 있니? 원격 서버에 설정된 SNMP 설정을 가져 오려고합니다. 이후 정보는 레지스트리에 보관됩니다. $ DellAdmKey는 SubKeys를 보유하고 "communityNames"를 참조하는 하나의 키입니다. 각각의 SubKeys 내에서 "TrapDestinations"를 참조하는 "값 데이터"를 얻습니다. $ DellAdmKey2는 "ValidCommunities"라는 키이지만 하위 키가 없으며 "AcceptedCommunityNames"및 "Rights"를 참조하는 DWORD 값을 가지고 있습니다. 그래서 1 라인의 foreach는 내가 이해한다면 하위 키에게 질문 (및 코드)를단일 CSV로 내보낼 PowerShell 스크립트

$servers = "ServerName" 
$BaseKey = [Microsoft.Win32.RegistryKey]::OpenRemoteBaseKey(‘LocalMachine’, $server) 
$SubKey= $BaseKey.OpenSubKey("SYSTEM\\CurrentControlSet\\Services\\SNMP\Parameters",$true) 
$DellAdmKey = $BaseKey.OpenSubKey("SYSTEM\\CurrentControlSet\\Services\\SNMP\\Parameters\\TrapConfiguration\\",$true) 
$DellAdmKey2 = $BaseKey.OpenSubKey("SYSTEM\\CurrentControlSet\\Services\\SNMP\\Parameters\\ValidCommunities\\",$true) 

$DellAdmKey.GetSubKeyNames() | foreach { 
$action = $_ 
$subkey = $DellAdmKey.openSubKey($_) 
$subkey.GetValueNames() | foreach {$_ | Select 
@{name="ServerName";Expression={$server}}, 
@{Name="CommunityNames";Expression={$action}}, 
@{name="TrapDestinations";Expression={$subkey.getvalue($_)}} 
    } | Export-Csv c:\temp\1.csv -NoTypeInformation 
} 

$action = $_ 
$subkey = $DellAdmKey2.openSubKey($_) 
$subkey.GetValueNames() | foreach { 
$_ | Select @{name="ServerName";Expression={$server}}, 
@{name="AcceptedCommunityNames";Expression={$_}}, 
@{name="Rights";Expression={$subkey.getvalue($_)}} 
    } | Export-Csv c:\temp\2.csv -NoTypeInformation 
+0

@ madth3 - 다시 틱에 단어를 넣으면 읽을 수 없으므로 - 토론을 참조하십시오. http://meta.stackexchange.com/questions/201617/shouldnt-reviews-be-done-a-bit-more-carefully – Mark

답변

0

을 포함하지 않는 "ValidCommunities"로 사용할 수 없습니다 올바르게, 명령의 세 번째 그룹은 내부에 가기로되어있다 $DellAdmKey.GetSubKeyNames() | foreach { ... }. 이 경우 하나의 CSV로 모든 출력을 캡처하려면 해당 루프 외부로 | Export-Csv을 이동하기 만하면됩니다. 모든 객체가 같은 속성 집합을 가지는지 확인해야합니다.

$DellAdmKey.GetSubKeyNames() | foreach { 
    $action = $_ 
    $subkey = $DellAdmKey.openSubKey($action) 
    $subkey.GetValueNames() | Select @{name="ServerName";Expression={$server}}, 
     @{Name="CommunityNames";Expression={$action}}, 
     @{name="TrapDestinations";Expression={$subkey.getvalue($_)}} 
     @{name="AcceptedCommunityNames";Expression={}}, 
     @{name="Rights";Expression={}} 

    $subkey = $DellAdmKey2.openSubKey($action) 
    $subkey.GetValueNames() | Select @{name="ServerName";Expression={$server}}, 
     @{Name="CommunityNames";Expression={}}, 
     @{name="TrapDestinations";Expression={}}, 
     @{name="AcceptedCommunityNames";Expression={$_}}, 
     @{name="Rights";Expression={$subkey.getvalue($_)}} 
} | Export-Csv 'c:\temp\out.csv' -NoTypeInformation 

편집 : 당신이 정말로 단지 (라인 (17)에 $_가 비어 있어야하기 때문에, 나에게 다소 모호한 것) 당신이 게시 된 코드를 실행하려면, 당신은 두 번째 Export-Csv을 변화시킬 수 지침

... | Export-Csv 'c:\temp\1.csv' -Append -NoTypeInformation 

PowerShell v3을 실행하는 경우입니다. 이에 앞서 같은 뭔가가해야 할에 :

... | ConvertTo-Csv -NoTypeInformation | select -Skip 1 | 
    Out-File 'c:\temp\1.csv' -Append 

어느 쪽이든 당신은하지만, 당신은 속성의 동일한 세트를 수출하고 있는지 모든 개체를 확인해야합니다. 그렇지 않으면 TrapDestination 열 또는 일부에서 Rights 값으로 끝날 수 있습니다.

+0

감사합니다. 응답을 위해 $ DellAdmKey2가 $ DellAdmKey처럼 subKey 아래에 있지 않기 때문에 문제가 없습니다. 그것들은 값의 이름과 값의 데이터가 필요한 "ValidCommunities"의 "DWORD"입니다. 내가 출력 한 스크립이 각 CSV에 올바르게 올랐습니다. 하지만 그것을 결합해야하지만 그게 내가 붙어있어. – user1890242

+0

내 접근 방식이 잘못된 것 같습니다. 제가 더 나은 방법이 있는지 나중에 설명해 드리겠습니다. $ DellAnmKey에는 SubKey가 있습니다. – user1890242

+0

제가 더 나은 방법이 있는지 나중에 설명해 드리겠습니다. 제거 서버에 설정된 SNMP 설정을 가져 오려고합니다. 이후 정보는 레지스트리에 보관됩니다. $ DellAdmKey는 "communityNames"라고하는 SubKeys를 보유하는 하나의 키이며 각 SubKey 내에서 "TrapDestination"이라고하는 "값 데이터"를 얻습니다. $ DellAdmKey2는 "ValidCommunities"라는 키이지만 하위 키는 없으며 "AcceptedCommunityNames"및 "Rights"라고하는 DWORD 값만 있습니다. 따라서 "ValidCommunities"에 SubKeys가 포함되어 있지 않으므로 첫 번째 행의 foreach는 사용할 수 없습니다. – user1890242

관련 문제