簡體   English   中英

PowerShell腳本導出到單個CSV

[英]PowerShell script to export to single CSV

我需要幫助來獲取以下PowerShell腳本,以僅輸出一個.CSV文件而不是當前的兩個。 有人可以幫忙嗎? 我想獲取在遠程服務器上設置的SNMP設置。 我需要的信息保存在注冊表中。 $ DellAdmKey是保存SubKeys的一個鍵,它引用“ communityNames”。 在每個子鍵中,我得到了引用“ TrapDestinations”的“值數據”。 $ DellAdmKey2是一個名為“ ValidCommunities”的鍵,但沒有子鍵,它僅具有引用“ AcceptedCommunityNames”和“ Rights”的DWORD值。 因此,第一行上的foreach不能用作“ ValidCommunities”不包含SubKeys

$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

如果我正確理解了您的問題(和您的代碼),那么第三組說明應該放在$DellAdmKey.GetSubKeyNames() | foreach { ... } $DellAdmKey.GetSubKeyNames() | foreach { ... } 在這種情況下,您只需移動| Export-Csv 在該循環之外| Export-Csv ,以捕獲所有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值或類似的值。

我使用了這個http://psrr.codeplex.com/,它使生活更輕松。 感謝您的答復安斯加爾。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM