Перейти на главную страничку сайта (список статей, файлы для скачивания)

ФОРУМ (здесь можно обсудить эту статью, а также любые проблемы программирования на различных макроязыках и в скриптовых средах)

Некоторые рецепты практической работы в Windows Monad Shell

Амперсанд вынуждает 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] }

Несколько приёмов работы с файлами:

Скачивание странички из Интернета:

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