2015-05-12 2 views
1

Мне интересно, почему test-path возвращает true и false с двумя утверждениями, может ли кто-нибудь объяснить или предложить почему?Test-path возвращает false, когда это должно быть правдой

$app2find = "Easeus" 

### search ### 
$appSearch = Get-ChildItem -Path HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall, HKLM:\SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall | 
    Get-ItemProperty | 
     Where-Object {$_.DisplayName -match $app2find } | 
      Select-Object -Property DisplayName, UninstallString 

### search results ### 
if (!$appSearch) { "No apps named like $app2find were found" } 

### uninstall ### 
ForEach ($app in $appSearch) { 

    If ($app.UninstallString) { 

     Test-Path $app.UninstallString 
     Test-Path "C:\Program Files (x86)\EaseUS\EaseUS Partition Master 10.5\unins000.exe" 

     #& cmd /c $($app.UninstallString) /silent 
    } 
} 

Выход:

False 
True 

Желаемый результат:

True 
True 

большое спасибо

* EDIT

$app.UninstallString это значение в реестре, который обеспечивает т он способ удалить конкретное приложение. В этом случае точно печатаются:

"C:\Program Files (x86)\EaseUS\EaseUS Partition Master 10.5\unins000.exe" 
+4

Что такое '$ app.UninstallString' в этом цикле? Вы уверены, что это ценность? –

+0

$ app.UninstallString содержит «C: \ Program Files (x86) \ EaseUS \ EaseUS Partition Master 10.5 \ unins000.exe» – pedaleo

+0

Можете ли вы включить точный вывод из этого сценария с добавленными строками, которые печатают эту переменную и вашу литеральную строку? –

ответ

2

Я думаю, что Etan имеет это право, основываясь на том, что вы нам показали. Единственное, что мы можем понять, это то, что $app.UninstallString не содержит абсолютного пути, как вы полагаете. Лучше предположить, что строка уже цитируется в реестре. Test-Path не разрешает строки с внешними кавычками.

Рассмотрим следующие примеры

PS Z:\> test-path "c:\temp" 
True 

PS Z:\> test-path "'c:\temp'" 
False 

PS Z:\> test-path "'c:\temp'".Trim("'") 
True 

Возможно, вам просто нужно обрезать кавычки?

Test-Path $app.UninstallString.Trim("'`"") 

Это должно устранить конечные и ведущие одинарные и двойные кавычки.

+0

Да в этом случае является абсолютным путем, похоже, была проблема с котировкой, и Trim определенно исправил ее. Спасибо – pedaleo