在多台计算机上获取-fix并导出为CSV

时间:2012-08-23 00:49:19

标签: powershell

如何在out-file中正确使用$ _?这是我的代码:

get-content computers.txt | Where {$_ -AND (Test-Connection $_ -Quiet)} | foreach {Get-Hotfix -computername $_} | Select CSName,Description,HotFixID,InstalledBy,InstalledOn | convertto-csv | out-file "C:\$_.csv"

我正在尝试为文本文件中列出的所有计算机执行get-hotfix,然后我希望将它们导出为CSV,并将计算机名称作为文件名。

3 个答案:

答案 0 :(得分:1)

您需要一个管道来处理computers.txt文件,并在foreach内嵌套一个管道来处理每台计算机的修补程序列表:

get-content .\computers.txt | Where {$_ -AND (Test-Connection $_ -Quiet)} | foreach { Get-Hotfix -computername $_ | Select CSName,Description,HotFixID,InstalledBy,InstalledOn | convertto-csv | out-file "C:\$_.csv" }

修改:将computers.txt更改为.\computers.txt,因为这是powershell中本地路径所必需的

答案 1 :(得分:0)

我可以看到: get-content。\ computers.txt |其中{$ _ -AND(Test-Connection $ _ -Quiet)} | foreach {Get-Hotfix -id KB4012212 -computername $ _ |选择CSName,Description,HotFixID,InstalledBy,InstalledOn | convertto-csv | out-file“C:\ $ _。csv”} 我只能看到安装了哪台PC(KB4012212)。 可以看到以下内容

  • CSNAME修复(Inst / NotInst)

    PC1 FIxInstalled

    PC2 FixNotinstalled

    PC3 FixnotInstalled

.. .. 等

答案 2 :(得分:0)

我摸索了一段时间,直到在使用此组合之前,我在网上都找不到任何有效的工具。

我使用的方法是该线程,但是速度太慢,所以我想了解更多有关使用作业的信息,因此最终在Windows 7 PS Ver 4上为我工作。 所有其他选项要么太慢,要么没有从远程系统返回数据。

$VMs = get-content C:\WinVms.txt #Generate your hostnames list however you deem best.
foreach ($vm in $vms)
{
Write-Host "Attempting to get hotfixes on:" $vm
invoke-command -computername $vm -ScriptBlock {start-job -scriptblock {(get-hotfix | sort installedon)[-1]} | wait-job | receive-job} -AsJob
}
start-sleep 60 # give it a minute to complete
get-job | ? { $_.state -eq "Completed"} | receive-job -keep | export-csv c:\temp\win-patch.csv

您也可以像这样检查失败:

get-job | ? { $_.state -eq "Failed"}