2015-01-20 5 views
0

Любая идея, почему $ result.PathName не работает?Атрибут объекта Powershell не отображается

$results = Get-WMIObject -query "select * from Win32_Service where Name LIKE '%sql%'" | Select Name, PathName | Format-List 
ForEach ($result in $results) { 
    Write-Output "Test = " + $result.PathName 
}   
Write-Output "done" 

Ожидаемый результат:

Test = C:\blah\blah.sqlserver.exe 
Test = C:\blah\blah.sqlserver.exe 

Фактический выход

Test = 
+ 
Test = 
+ 

ответ

3

Format-* командлеты производить форматирование инструкции в качестве выходных. Эти инструкции не полезны ни для чего, кроме отображения результата для пользователя или для командлетов Out-*. Удалите Format-List с вашего кода. И положите выражение после Write-Output в круглых скобках: Write-Output ("Test = " + $result.PathName), ему следует интерпретировать как одно выражение, но не три разных аргумента до Write-Output. Или вы можете удалить Write-Output целиком, как это подразумевалось по умолчанию.

+0

Спасибо, что это делается для объектов, но при этом получается:
'Test = @ {Name = SQLWriter; PathName = "C: \ blah \ sqlwriter.exe"}. PathName' – Dird

+1

Вы пишете это: '" Test = $ result.PathName "'? Вы должны написать это вместо: '" Test = $ ($ result.PathName) ". – PetSerAl

+0

Это получилось, спасибо. Какой хороший сайт вы рекомендуете для быстрого сбора PS? Этот сайт вообще хорош для обучения? http://powershell.com/cs/blogs/tips/archive/2009/06/08/using-string-functions.aspx - эта страница позволила мне пройти через следующую часть моего сценария – Dird

Смежные вопросы