У меня было требование проверить, установлено ли на компьютере программное обеспечение. Я пробовал WMIC-запрос, но он не работал для всех программ.
Я искал в Интернете, чтобы найти решение, и нашел ниже PS-код, который работал нормально. С должным уважением к первоначальному автору кода, я попытался сформировать его, чтобы он соответствовал моим требованиям, чего не могло быть, так как я не понимаю использование массива объектов в этом коде.
Когда я проверяю значение $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)