0

我需要帮助才能使以下 PowerShell 脚本也仅输出一个 .CSV 文件而不是当前的两个。有人可以帮忙吗?我想要获取在远程服务器上设置的 SNMP 设置。我所追求的信息保存在注册表中。$DellAdmKey 是一个包含子密钥的密钥,它指的是“communityNames”。在每个子键中,我得到引用“TrapDestinations”的“值数据”。$DellAdmKey2 是一个名为“ValidCommunities”的键,但没有子键,它只有引用“AcceptedCommunityNames”和“Rights”的 DWORD 值。所以第一行的foreach不能用作“ValidCommunities”不包含子键

$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
4

2 回答 2

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

不过,无论哪种方式,您都应该确保要导出的所有对象都具有相同的属性集。否则,您最终可能会RightsTrapDestination列中得到值或类似的值。

于 2013-10-01T14:44:22.070 回答
0

我已经求助于使用这个 http://psrr.codeplex.com/它让生活更轻松。感谢安斯加尔的回复。

于 2013-10-02T20:12:13.353 回答