我有以下内容..
$output = @()
$servers =Get-Content "C:\Windows\System32\List3.txt"
foreach ($server in $servers)
{
trap [Exception] {continue}
Import-Module PSRemoteRegistry
$key="SOFTWARE\Microsoft\'Microsoft Antimalware'\'Signature Updates'"
$regkey=Get-RegBinary -ComputerName $server -Key $Key -Value SignatuesLastUpdated
#$regkey=(Get-Item HKLM:\SOFTWARE\Microsoft\'Microsoft Antimalware'\'Signature Updates').getValue('SignaturesLastUpdated')
#$regkey=[datetime]::ParseExact("01/02/03", "dd/MM/yy", $null) | Export-csv -path c:\temp\avinfo.csv -append
#$regkey
}
$output | Select $server , $Regkey | Export-Csv c:\temp\avinfo.csv -NoTypeInformation
我认为它非常接近,但并不是按需要工作 - 任何人都可以告诉我我在这里做错了什么 - 已经阅读了很多并且设法做到这一点,只需要帮助来完成
由于
答案 0 :(得分:1)
好的...所以有很多需要更改才能使其正常工作。我会在发布后经常更新答案。
$servers = Get-Content "C:\Windows\System32\List3.txt"
$key="SOFTWARE\Microsoft\Microsoft Antimalware\Signature Updates"
$servers | ForEach-Object{
$server = $_
Try{
Get-RegBinary -ComputerName $server -Key $Key -Value SignatuesLastUpdated -ErrorAction Stop
} Catch [exception]{
[pscustomobject]@{
ComputerName = $server
Data = "Unable to retrieve data"
}
}
} | Select ComputerName,@{Label=$value;Expression={If(!($_.Data -is [string])){[System.Text.Encoding]::Ascii.GetBytes($_.data)}Else{$_.Data}}} | Export-Csv c:\temp\avinfo.csv -NoTypeInformation
上述代码的作用更符合您的意图。获取列表,并为每个项目从该服务器获取关键数据。如果获取该数据存在问题,那么我们输出一个自定义对象,说明我们可以在输出中判断是否存在问题。空闲的部分是您希望如何将二进制数据导出到文件。就目前而言,它应该创建一个以空格分隔的字节串。
您应该突出显示的问题是
$output
但在循环过程中不填充它。这对foreach
构造很重要。最后,你向csv发送并清空数组。我的答案不需要它,因为它只使用标准输出。 SignatuesLastUpdated
Get-RegBinary
默认情况下不会创建try / catch块所需的终止错误。添加了-ErrorAction Stop
。不要认为你的代码trap [Exception] {continue}
会抓到任何东西。 $key
中的单引号可能阻止了解析路径。你试图逃避空间,只需要将整个字符串括在一组引号中即可实现。 Select
可以使用变量,但它们以基本形式存在,以选择属性名称。简而言之,你错了。