Перейти на главную страничку сайта (список статей, файлы для скачивания)
Амперсанд вынуждает 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 При любом использовании материалов сайта обязательна ссылка на него как на источник информации, а также сохранение целостности и авторства материалов.