Перейти на главную страничку сайта (список статей, файлы для скачивания)
Амперсанд вынуждает MSH интерпретировать строку как команду (псевдоним, команд-лет, функцию, сценарий или исполняемую программу):
MSH> "calc.exe" calc.exe MSH> & "calc.exe" # здесь будет запущен калькулятор
Глобальная переменная $LASTEXITCODE содержит код завершения последней запущенной программы:
MSH> ping nonexistenthost При проверке связи не удалось обнаружить узел nonexistenthost. Проверьте имя узл а и повторите попытку. MSH> $lastexitcode 1 MSH> ping 127.0.0.1 Обмен пакетами с 127.0.0.1 по 32 байт: Ответ от 127.0.0.1: число байт=32 время<1мс TTL=128 Ответ от 127.0.0.1: число байт=32 время<1мс TTL=128 Ответ от 127.0.0.1: число байт=32 время<1мс TTL=128 Ответ от 127.0.0.1: число байт=32 время<1мс TTL=128 Статистика Ping для 127.0.0.1: Пакетов: отправлено = 4, получено = 4, потеряно = 0 (0% потерь), Приблизительное время приема-передачи в мс: Минимальное = 0мсек, Максимальное = 0 мсек, Среднее = 0 мсек MSH> $lastexitcode 0
Чтобы получить вывод какого-либо приложения, можно воспользоваться синтаксисом, подобным следующему:
$out = $(ping 127.0.0.1)
Здесь переменная $out будет содержать весь вывод команды ping. Этот вывод можно будет затем обработать, например, с помощью регулярных выражений.
Чтобы получить ввод с консоли, в сценарии может использоваться команд-лет read-host:
$name = read-host "Введите имя"
Для сценария MSH все параметры командной строки доступны в специальной переменной $args (массив). Сценарий может использовать инструкцию foreach, чтобы перебрать список переданных параметров:
foreach ($arg in $args) { $arg } if ($args.count -gt 0) { $args[1] }
Несколько приёмов работы с файлами:
get-childitem *.htm | foreach-object { rename-item $_.name $_.name.replace(".htm",".html") }
$content = $(get-content test.txt | foreach-object { $_ -replace "раз", "два" }) set-content test.txt $contentДля нескольких файлов можно задать фильтр:
filter ReplaceInFile { param($find, $replace) $content = $(get-content $_ | foreach-object { $_ -replace $find, $replace }) set-content $_ $content } get-childitem *.txt | ReplaceInFile "раз" "два"
get-childitem -Recurse | where-object { $_.LastWriteTime -gt (get-date).AddDays(-1) }
get-childitem | group-object {$_.Extension}
Скачивание странички из Интернета:
$wc = new-object System.Net.WebClient $content = $wc.DownloadString("http://www.script-coding.com/") $content | measure-object -words -lines -characters
Обращение к переменным среды (получение пользователя и домена):
"$env:USERDOMAIN\$env:USERNAME"
Получение текущей даты и манипуляции с ней:
(get-date).AddDays(-1) # вчера (get-date).AddDays(1) # завтра
Получение версии ОС:
$os = get-wmiobject Win32_OperatingSystem; "$($os.Caption)`n$($os.CSDVersion)"
Функция, конвертирующая WMI-дату в формат DateTime:
function ParseWmiDate { param($wmidate) $year = [int]$wmidate.substring(0, 4) $month = [int]$wmidate.substring(4,2) $day = [int]$wmidate.substring(6,2) $hour = [int]$wmidate.substring(8,2) $min = [int]$wmidate.substring(10,2) $sec = [int]$wmidate.substring(12,2) new-object DateTime $year,$month,$day,$hour,$min,$sec } $reboot = ParseWmiDate $(get-wmiobject Win32_OperatingSystem).LastBootupTime new-timespan $reboot $(get-date)
Раскраска файлов при выводе:
$colors=@{msh = "Red"; exe = "Green"; cmd = "Green"; directory = "Blue" } $defaultColor = "Gray" filter color-files { if ($_.Extension -ne "") { $ext = $_.Extension.Substring(1) } if ($_.Mode.StartsWith("d")) { $ext = "directory" } if ($colors.ContainsKey($ext)) { $color = $colors[$ext] } else { $color = $defaultColor } write-host -ForegroundColor $color $_ } get-childitem | color-files
Перейти на главную страничку сайта (список статей, файлы для скачивания)
© 2007 http://www.script-coding.com При любом использовании материалов сайта обязательна ссылка на него как на источник информации, а также сохранение целостности и авторства материалов.