2016-07-19 11 views
0

Я использую следующий код, чтобы попытаться вытащить список установленного программного обеспечения в системе и проверить некоторые записи в списке, поэтому пока удалось получить список программного обеспечения для запуска по желанию, используя следующий код:Вытягивание списка записей из ключа реестра и проверка их на все, что содержится в массиве

$path = 'HKLM:\Software\Microsoft\Windows\CurrentVersion\Uninstall\*' 
Get-ChildItem $path | Get-ItemProperty | Select-Object DisplayName 
if (ItemProperty -Name -eq ('Wacom Tablet')) { 
    start notepad.exe 
} 

Я хотел бы, чтобы быть массив, который ссылается на DisplayName список, но я получаю следующее сообщение об ошибке:

ItemProperty : Cannot find path 'C:\WINDOWS\system32\Wacom Tablet' because it 
does not exist. 
At C:\Users\username\Documents\Scripts\win10test.ps1:39 char:5 
+ if (ItemProperty -Name -eq ('Wacom Tablet')) { 
+  ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 
    + CategoryInfo   : ObjectNotFound: (C:\WINDOWS\system32\Wacom Tablet:String) [Get-ItemProperty], ItemNotFoundException 
    + FullyQualifiedErrorId : PathNotFound,Microsoft.PowerShell.Commands.GetItemPropertyCommand

Как я мог достичь этого?

+0

Итак, вы хотите, чтобы начать 'notepad.exe', если какой-либо из ключей реестра есть экран DisplayName "Wacom Tablet"? –

+0

Thats просто триггер, чтобы проверить, что он работает, это то, что он потом: #if ([Environment] :: OSVersion.Version.Major -EQ 6.0) { # installWIN10 #} elseif ([Environment] :: OSVersion.Version.Major -EQ 6.1) { # InstallWin10 #} #} elseif ([Environment] :: OSVersion.Version.Major -EQ 10.0) { #Echo «У вас уже установлена ​​Windows 10, пожалуйста, нажмите любую ключ для выхода из этой программы ». #} #Exit –

+0

'if ([System.Environment] :: OSVersion.Version -lt [version] '10 .0 ') {<# install win10 #>}' –

ответ

0

ItemProperty расширяется до Get-ItemProperty, поэтому ваш if состояния

ItemProperty -Name -eq ('Wacom Tablet') 

становится

Get-ItemProperty -Name -eq -Path ('Wacom Tablet') 

означает, что ваш код пытается получить свойство -eq из элемента Wacom Tablet в текущем рабочем каталоге (в вашем случае, по-видимому, C:\WINDOWS\system32).

То, что вы, кажется, хотят сделать что-то вроде этого:

Get-ChildItem $path | Get-ItemProperty | 
    Where-Object { $_.DisplayName -eq 'Wacom Tablet'} | 
    ForEach-Object { 
    # do stuff 
    } 

или как это:

$prop = Get-ChildItem $path | Get-ItemProperty | 
     Select-Object -Expand DisplayName 
if ($prop -eq 'Wacom Tablet') { 
    # do stuff 
} 
+0

Спасибо Ansgar, еще один вопрос по теме, в if, где у меня есть «Wacom Tablet», могу ли я расширить это, чтобы быть массивом элементов, которые мне нужно проверить? –

+0

Работало, спасибо, столько за вас помощь :) –

+0

Для массива используйте '-contains' вместо' -eq'. –