从 CBS.log 返回组件名

来源:互联网 发布:淘宝产品发布流程 编辑:程序博客网 时间:2024/06/14 04:51

从 CBS.log 返回组件名


function ConvertFrom-CBStoComponentName{    [CmdletBinding(DefaultParameterSetName = 'SxsSet')]    param    (        [Parameter(Mandatory = $true,                   Position = 1)]        [System.String]        $line,        [Parameter(ParameterSetName = 'SxsSet')]        [Alias('p')]        [System.String]        $path,        [Parameter(ParameterSetName = 'WinnerSet')]        [Alias('w')]        [switch]        $isWinner = $false,        [Parameter(ParameterSetName = 'WinnerSet')]        [Alias('v')]        [switch]        $hasVersion = $false    )        if ($hasVersion) { $isWinner = $true }        $line -match "comp: (.*?), Version = (.*?), pA = (.*?) .*?, Culture (.*?), VersionScope = .*?, PublicKeyToken = {l:8 b:(.*?)}" | Out-Null    $sxs = $matches[1]    if ($sxs.length -gt 40) { $sxs = $sxs.Substring(0, 19) + ".." + $sxs.substring($sxs.Length - 19) }    $version = $matches[2]    $architecture = ConvertTo-ShortId $matches[3]    $culture = ConvertTo-ShortId $matches[4]    $publicKey = $matches[5]    # 对比注册表,输出 Winner    if ($isWinner)    {        $search = "$architecture`_$sxs`_$publicKey`_$culture".ToLower()        # 在 Winner 中找到        $WinnersBase = "SOFTWARE\Microsoft\Windows\CurrentVersion\SideBySide\Winners"        $winners = [Microsoft.Win32.Registry]::LocalMachine.OpenSubKey($WinnersBase).GetSubKeyNames() | ? { $_ -ilike "$search`*" }        # 没有找到,再查 ComponentFamily        if (! $winners)        {            $servicingStackVersion = Get-ServicingStackVersion            $ComponentFamiliesBase = "Components\DerivedData\VersionedIndex\$servicingStackVersion`\ComponentFamilies"            $winners = [Microsoft.Win32.Registry]::LocalMachine.OpenSubKey($ComponentFamiliesBase).GetSubKeyNames() | ? { $_ -ilike "$search`*" }        }        if ($hasVersion)        {            foreach ($winner in $winners)            {                "$winner`,$version"            }        }        else        {            $winners        }    }    # 对比文件,输出 Component    else    {        $search = "$architecture`_$sxs`_$publicKey`_$version`_$culture".ToLower()        dir -path $path -Filter "$search`*" -directory -Name    }}

0 0
原创粉丝点击