我需要帮助才能让以下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
答案 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的回复。