要导出到单个CSV的PowerShell脚本

时间:2013-10-01 12:57:04

标签: powershell csv output

我需要帮助才能让以下PowerShell脚本输出一个.CSV文件而不是当前的两个.CSV文件。有人可以帮忙吗?我想获取在远程服务器上设置的SNMP设置。我所追求的信息保存在注册表中。 $ DellAdmKey是持有SubKeys的一个键,指的是“communityNames”。在每个SubKeys中,我得到“Value Data”,它指的是“TrapDestinations”。 $ DellAdmKey2是名为“ValidCommunities”的密钥,但没有子密钥,它只有DWORD值,引用“AcceptedCommunityNames”和“权限”。所以第1行的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

2 个答案:

答案 0 :(得分:0)

如果我理解你的问题(和你的代码),第三组指令应该进入$DellAdmKey.GetSubKeyNames() | foreach { ... }。在这种情况下,您只需移动该循环外的| Export-Csv即可捕获一个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

无论哪种方式,您都应该确保您导出的所有对象都具有相同的属性集。否则,您可能会在Rights列中找到TrapDestination值或其他类似值。

答案 1 :(得分:0)

我已经使用了这个http://psrr.codeplex.com/,这让生活更轻松。感谢Ansgar的回复。