有没有办法在不搜索注册表的情况下获取已安装的.NET更新列表?

时间:2015-11-12 18:05:58

标签: .net windows powershell updates

有没有办法在不搜索注册表的情况下获取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
}

1 个答案:

答案 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"}
相关问题