我如何检查 MS15-011/15-014 (JASBUG)?
How can I check for MS15-011/15-014 (JASBUG)?
我正在尝试构建一个 PowerShell 脚本来检查机器是否存在此漏洞。但我想在注册表级别进行检查。我不信任 KB3000483 的 Add/Remove 程序列表。我需要确定 SMB 和 GPO 设置是否正确。我需要这个,因为我正在对 100 多台机器进行检查,谁有时间手动检查?
您可以查询 WMI 以查看 Class 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
因此,对于您整个环境中的 运行,只需将我的 'localhost'、'offline' 等替换为 Get-AdComputer -LdapFilter...
之类的查询或从 CSV 中读取或文本文件。
现在,如果您对 Try $a/ Catch $a 行感到好奇,我们在这里做的是使用 Try/Catch/Finally 来尝试一些代码,如果遇到错误我们使用 catch阻止。我们将两者的示例存储在 $a 中,以便我们可以在 finally{} 块中将它们拉出以获得一些不错的标准化输出。如果我们 运行 进入没有补丁或离线的系统,则会执行 Catch{} 块。
希望这能让你入门!
您可以使用 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] 用于所有电脑的身份验证
另一种方法是在你用系统中心控制的所有机器上使用系统中心执行 运行 命令
问候
我正在尝试构建一个 PowerShell 脚本来检查机器是否存在此漏洞。但我想在注册表级别进行检查。我不信任 KB3000483 的 Add/Remove 程序列表。我需要确定 SMB 和 GPO 设置是否正确。我需要这个,因为我正在对 100 多台机器进行检查,谁有时间手动检查?
您可以查询 WMI 以查看 Class 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
因此,对于您整个环境中的 运行,只需将我的 'localhost'、'offline' 等替换为 Get-AdComputer -LdapFilter...
之类的查询或从 CSV 中读取或文本文件。
现在,如果您对 Try $a/ Catch $a 行感到好奇,我们在这里做的是使用 Try/Catch/Finally 来尝试一些代码,如果遇到错误我们使用 catch阻止。我们将两者的示例存储在 $a 中,以便我们可以在 finally{} 块中将它们拉出以获得一些不错的标准化输出。如果我们 运行 进入没有补丁或离线的系统,则会执行 Catch{} 块。
希望这能让你入门!
您可以使用 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] 用于所有电脑的身份验证 另一种方法是在你用系统中心控制的所有机器上使用系统中心执行 运行 命令 问候