我正在尝试构建一个PowerShell脚本来检查此漏洞的计算机。但我想在注册表级别进行检查。我不相信KB3000483的添加/删除程序列表。我需要确定SMB和GPO设置正确。我需要这个,因为我正在对100多台机器进行检查,并且有时间手工检查?
答案 0 :(得分:1)
您可以查询WMI以查看Win32_QuickFixEngineering类,以查看所有已安装补丁的列表。找到这个特定补丁的代码如下:
Get-CimInstance -ClassName Win32_QuickFixEngineering | Where HotFixID -eq KB3000483
现在,如果你想查询一大群计算机,我会使用这样的代码:
'localhost','offline' | ForEach {
try {$a=Get-CimInstance -ClassName Win32_QuickFixEngineering -ErrorAction Stop -ComputerName $_ | Where HotFixID -eq KB3000483 | Select HotFixID,InstalledOn,@{Name='Status';Exp={'Installed'}},@{Name='SystemName';Exp={$_.CSName}} }
catch{$a= [pscustomobject]@{HotFixID="NA";InstalledOn='NA';Status='Not Installed';SystemName=$_}}
finally{[pscustomobject]@{HotFixID=$a.HotFixID;InstalledOn=$a.InstalledOn;Status=$a.Status;SystemName=$a.SystemName} }
}
结果?
HotFixID InstalledOn Status SystemName
-------- ----------- ------ ----------
KB3000483 2/14/2015 12:00:00 AM Installed BEHEMOTH
NA NA Not Installed
因此,要在整个环境中运行此功能,只需使用Get-AdComputer -LdapFilter...
等查询替换我的本地主机'离线'等等,或者从CSV或文本文件。
现在,如果您对Try $ a / Catch $ a行感到好奇,我们在这里做的是使用Try / Catch / Finally来尝试一些代码,如果遇到错误,我们会使用而是阻止块。我们将两者的示例存储在$ a中,以便我们可以在finally {}块中将它们拉出来以获得一些很好的标准化输出。如果我们遇到一个没有补丁或离线的系统,则会执行Catch {}块。
希望这能让你开始!
答案 1 :(得分:0)
您可以使用Systeminfo查看已安装的所有修补程序 例如,当我使用命令systeminfo时,我得到
Hotfix(s): 255 Hotfix(s) Installed.
以及关于windows的很多信息,比如'last boot!' 并且要在域中的所有客户端中运行此命令,您可以在启动时使用gpo并为所有客户端设置组策略运行脚本, 在所有机器上运行命令的另一种方法你希望你可以使用“Invoke-Command” 语法很简单,如:
$command = { Get-EventLog -log "Windows PowerShell" | where {$_.Message -like "*certificate*"} }
Invoke-Command -ComputerName S1, S2 -ScriptBlock $command
您可以在所有电脑中添加[-Credential]进行身份验证 另一种方法是在系统中心控制的所有机器中使用系统中心运行命令 此致