Невозможно понять код powershell, полученный из Интернета - PullRequest
0 голосов
/ 30 октября 2018

У меня было требование проверить, установлено ли на компьютере программное обеспечение. Я пробовал 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 голосов
/ 30 октября 2018

Проблема в том, что в конце вашей последней команды у вас есть | ft -auto. FT - это псевдоним Format-Table. Когда вы отправляете выходные данные в один из командлетов Format-, это меняет тип объекта, и вы больше не можете работать с объектом или его свойствами, кроме как перенаправить его в файл, на принтер или на экран.

Чтобы сделать то, что вам нужно, просто удалите часть | ft -auto.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...