有没有办法在不搜索注册表的情况下获取Windows Server 2008 R2上已安装的.NET更新列表?我找到了许多方法来获取它们: - 从控制面板手动 - 搜索注册表 - 启用可靠性记录,然后使用WMI或CIM。 (不能在这个环境中这样做) 许多站点都展示了获取Windows更新的方法,甚至是安装的.NET版本,但不包括.NET补丁/更新(除非您指定注册表)。 我更喜欢使用PowerShell,但此时我会采取我能得到的任何东西(直接查询到注册表除外)。我正在寻找可以做到的本地类/功能/工具等。
这是一个详细的(用于管理)示例,说明我们现在如何做到这一点。当我们在脚本中使用它时,它会被削减到骨头。
Function Get-SingleDotNetPatchRegistryData
{
Param
(
[Parameter(Mandatory=$true)]
[string]$DotNetKBnumber,
[string]$RegPath = "HKLM:\SOFTWARE\Wow6432Node\Microsoft\Updates"
)
Write-Host "`r`n.NET Patch KB Number: "
Write-Host " $DotNetKBnumber`r`n"
$DotNetKBsearchString = '*' + $DotNetKBnumber + '*'
$DotNetPatchRegDataHashTable = $null
$DotNetPatchRegDataHashTable = @{}
$DotNetPatchRegKeyProp = `
Get-ChildItem $RegPath -Recurse -Force |
Where {$_.Name -like $DotNetKBsearchString} | Get-ItemProperty
If ($DotNetPatchRegKeyProp)
{
$DotNetPatchRegKeyPropMbrs = $DotNetPatchRegKeyProp |
Get-Member -MemberType NoteProperty
# Write-Host ".NET Patch Data from Registry:"
ForEach($DotNetPatchRegKeyPropMbr in $DotNetPatchRegKeyPropMbrs)
{
$DotNetPatchRegKeyPropMbrName = $DotNetPatchRegKeyPropMbr.Name
$RawDotNetPatchRegKeyPropMbrValue = `
$DotNetPatchRegKeyProp.($DotNetPatchRegKeyPropMbrName)
$DotNetPatchRegKeyPropMbrValue = $RawDotNetPatchRegKeyPropMbrValue`
-replace('Microsoft.PowerShell.Core\\Registry::','')
$EchoText = " Field Name: $DotNetPatchRegKeyPropMbrName`r`n" + `
" Field Value: $DotNetPatchRegKeyPropMbrValue`r`n"
# Write-Host $EchoText
$DotNetPatchRegDataHashTable.add("$DotNetPatchRegKeyPropMbrName",`
"$DotNetPatchRegKeyPropMbrValue")
}
$DotNetPatchRegDataHashTable.add("Installed", $true")
}
Else
{
$DotNetPatchRegDataHashTable.add("Installed", $false)
}
Return $DotNetPatchRegDataHashTable
}
答案 0 :(得分:0)
您可以使用Windows Update Agent API中的IUpdateSearcher
界面检索所有更新(包括.NET修补程序):
$WUASession = New-Object -ComObject Microsoft.Update.Session
$WUASearcher = $WUASession.CreateUpdateSearcher()
$Updates = $WUASearcher.QueryHistory(0,$se.GetTotalHistoryCount())
不幸的是,QueryHistory()
返回的集合中的项目没有KB#的属性,只有单个更新的标题:
$dotNetUpdates = $Updates |Where-Object {$_.Title -match "Microsoft \.NET"}