这个脚本主要是用于检查某天更新的patches,将结果返回保存到excel文件。代码如下(本地执行的测试代码):
#获取2/7/2017所更新的patches $patches = Get-HotFix | ForEach-Object { if( ($_.InstalledOn).ToString() -match "2/7/2017" ){$_ } } #创建excel文件 $excel = New-Object -ComObject Excel.Application #添加工作簿 $workbook = $excel.Workbooks.add() #获取工作表对象 $sheet = $workbook.worksheets.Item(1) #更改工作表的名称 $workbook.Worksheets.item(1).name="Patches" #连接工作表 $sheet = $workbook.WorkSheets.Item("Patches") #设置工作表行数 $x = 2 #设置第一行各单元格的表头名称 $sheet.cells.item(1,1) = "Source" $sheet.cells.item(1,2) = "Description" $sheet.cells.item(1,3) = "HotFixID" $sheet.cells.item(1,4) = "InstalledBy" $sheet.cells.item(1,5) = "InstalledOn" #循环遍历patches,并将数据按顺序位置输出 foreach($patch in $patches) { $sheet.cells.item($x,1) = $patch.PSComputerName $sheet.cells.item($x,2) = $patch.Description $sheet.cells.item($x,3) = $patch.HotFixID $sheet.cells.item($x,4) = $patch.InstalledBy $sheet.cells.item($x,5) = $patch.InstalledOn $x++ } #自动调整单元格的列宽 $range = $sheet.usedRange $range.EntireColumn.AutoFit() | out-null #将结果保存excel文件 $workbook.SaveAs("c:\patches.xlsx") #结束EXCEL进程 Get-Process -ProcessName EXCEL | Stop-Process
请问如何让远程的计算机执行,并返回结果到本地??Many thanks.
0 Answers
1.远程机器首先得开启允许PowerShell远程访问
Enable-PSRemoting -Force -SkipNetworkProfileCheck
2. 本地计算机在远程机器上执行命令,并返回结果
$result = Invoke-Command -ScriptBlock { Get-HotFix |select -First 5 } -ComputerName localhost,127.0.0.1 #给远程机器结果分组 $groups = $result | Group-Object -Property PSComputerName -AsHashTable foreach($computer in $groups.Keys) { $singleResult = $groups.$computer #单个远程机器的结果 #$singleResult #TODO:用你自己本地的Excel代码处理一下 #保存的文件名可以 使用 "D:\$computer.report.xls" }
Many thanks,Mooser.这个分组想法太好了,可以很清晰的区分每台server的patches信息。另外,我想请问下Get-HotFix似乎只能获取Window Update的patch,而获取不到Microsoft Update的patch。我看到你之前有用Get-ItemProperty查找注册表,得到已安装的软件。有没有一个方法可以得到与control panel-〉Installed Update下同样的信息,就是能够把所有的已安装patches都列出来??
试试Get-WmiObject -Class “win32_quickfixengineering”