Во многих утилитах Vista и Windows 2008 есть ключик позволяющий вывести результаты в формате XML. Это сделано в первую очередь для удобства автоматизации. А автоматизировать проще всего в PowerShell
Возьмем например команду appcmd.exe с помощью которой можно просматривать и изменять конфигурацию IIS7.0. Так как команда находится в подпапке system32\inetserv\ то проще сделать альяс для неё чем постоянно указывать полный путь:
Set-Alias appcmd $env:windir\System32\inetsrv\appcmd.exe'
Кстати рекомендую сразу поместить в профиль.
Теперь посмотрим список виртуальных каталогов на сервере:
[PS C:\root] appcmd list vdir VDIR "Default Web Site/" (physicalPath:%SystemDrive%\inetpub\wwwroot) VDIR "Default Web Site/TS/" (physicalPath:C:\Windows\web\ts\) VDIR "Default Web Site/Rpc/" (physicalPath:C:\Windows\System32\RpcProxy) VDIR "Default Web Site/RpcWithCert/" (physicalPath:C:\Windows\System32\RpcProxy)
Каждый виртуальный каталог в своей строчке… Конечно лучше чем в iis6… Но хотелось бы работать с этим выводом как с обычными объектами PowerShell, применять Where, использовать ConvertTo-Html, или просто отформатировать в виде таблицы… Можно конечно распарсить с помощью регекспов, но это писать новое выражение для каждого типа объектов… Да и ошибиться несложно. Лучше преобразовать вывод в формат XML. Ну и укажем соответствующий ключик:
appcmd list vdir /xml
Вот только красивее не стало… PowerShell естественно не ожидает от обычной консольной команды вывода нормальных xml объектов, поэтому просто показывает всё как есть – тоесть как текст… Ну чтож, скажем ему что это всё-таки XML:
[xml]$result = appcmd list vdir /xml
Теперь в переменной $result у нас содержится вывод команды в формате xml. И можно посмотреть xml объекты например так (кстати .appcmd.VDIR дополняется с помощью клавиши табуляции):
[PS C:\root] $result.appcmd.VDIR physicalPath path APP.NAME VDIR.NAME ------------ ---- -------- --------- %SystemDrive%\inetpub\wwwroot / Default Web Site/ Default Web ... C:\Windows\web\ts\ / Default Web Site/TS Default Web ... C:\Windows\System32\RpcProxy / Default Web Site/Rpc Default Web ... C:\Windows\System32\RpcProxy / Default Web Site/RpcWithCert Default Web ...
Ну и уже можно работать как привычно
[PS C:\root] $result.appcmd.VDIR | where {$_.physicalPath -like "*rpcproxy"} | F
ormat-Table *path -a
physicalPath path
------------ ----
C:\Windows\System32\RpcProxy /
C:\Windows\System32\RpcProxy /
Или в одну строку:
([xml](appcmd list vdir /xml)).appcmd.vdir physicalPath path APP.NAME VDIR.NAME ------------ ---- -------- --------- %SystemDrive%\inetpub\wwwroot / Default Web Site/ Default Web ... C:\Windows\web\ts\ / Default Web Site/TS Default Web ... C:\Windows\System32\RpcProxy / Default Web Site/Rpc Default Web ... C:\Windows\System32\RpcProxy / Default Web Site/RpcWithCert Default Web ...
Но самое главное: точно также, можно работать с любыми другими объектами вывода любой другой команды умеющей выводить результаты в XML!








