无法理解来自Internet的Powershell代码

时间:2018-10-30 09:45:02

标签: powershell

我需要检查计算机上是否安装了软件。我尝试了WMIC查询,但不适用于所有软件。

我在线搜索以找到解决方案,并在PS代码下面找到了,效果很好。出于对代码原始作者的尊重,我试图将其塑造成符合我的要求的方法-由于我不了解此代码中对象数组的使用,因此无法做到这一点。

当我检查$Insdetails的值时,我得到:

Output of '$insdetails'

现在,我想使用displayverison访问信息$insdetails.displayversion,并且该操作不会返回任何信息。

我知道我缺少基本原则,但希望了解如何处理这种情况。我在Powershell方面比较新鲜,需要有关此问题的专家指导,请教育我以了解细微差别。

$computername = $env:computername
$uninstallKey = "SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Uninstall"  
$reg = [microsoft.win32.registrykey]::OpenRemoteBaseKey('LocalMachine', $computername)
$regkey = $reg.OpenSubKey($UninstallKey) 
$subkeys = $regkey.GetSubKeyNames()  
$array = @()

foreach ($key in $subkeys) {
    $thisKey = $UninstallKey + "\\" + $key 
    $thisSubKey = $reg.OpenSubKey($thisKey) 

    $obj = New-Object PSObject
    $obj | Add-Member -MemberType NoteProperty -Name "ComputerName" -Value $computername
    $obj | Add-Member -MemberType NoteProperty -Name "DisplayName" -Value $($thisSubKey.GetValue("DisplayName"))
    $obj | Add-Member -MemberType NoteProperty -Name "DisplayVersion" -Value $($thisSubKey.GetValue("DisplayVersion"))
    $obj | Add-Member -MemberType NoteProperty -Name "InstallLocation" -Value $($thisSubKey.GetValue("InstallLocation"))
    $obj | Add-Member -MemberType NoteProperty -Name "Publisher" -Value $($thisSubKey.GetValue("Publisher"))
    $array += $obj
} 

$InsDetails = ($array | Where-Object { $_.Displayname -like '*vlc*' } | select ComputerName, DisplayName, DisplayVersion, Publisher | ft -auto)

1 个答案:

答案 0 :(得分:4)

您遇到的问题是因为在上一个命令的末尾您有| ft -autoFTFormat-Table的别名。当您将输出发送到Format- cmdlet之一时,它会更改对象类型,除了将其重定向到文件或打印机或屏幕外,您无法再进一步处理该对象或其属性。 / p>

要执行所需的操作,只需删除| ft -auto部分。