这个脚本主要是用于检查某天更新的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”
