PowerShell — Зачем?

Попеняли что так и не сказал — зачем🙂
В Windows с командной строкой было не всегда гладко…
В Win9x/me был command.com — по сути просто продолжение DOS'а, мало касающееся собственно Windows.
В 2к,хр,2к3 уже появляются новые средства управления системой из командной строки, куча встроенных инструментов, Resourse Kit, Support Tools, Sysinternal'овские PSTools… Возможностей стандартной оболочки зачастую не хватает, и приходится изобретать своё. Появляются мини шеллы: netsh, diskpart, subinacl и т.д…
Windows Scripting Host становится стандартным компонентом операционной системы, и незаменимым инструментом администраторов. В основном в качестве языка сценариев для логонскриптов, но так же и для многого другого.
Появляется Windows Management Instrumentation — мощнейшая среда управления, для которой так и не нашлось действительно хорошого и удобного метода управления.
А командная оболочка остаётся на уровне уродливых батников и cmd'шек хрянящих тяжелое наследие DOS'а, в то время как требуется что то совсем другое. Развивать cmd путем приделывания костылей нецелесообразно…

Ну и собственно тут появляется PoSH. Основанный на множестве языков и взявший из них самое лучшее. Язык создается с нуля и не страдает от недостатков предков. Используется новая концепция — объекты вместо текстового ввода/вывода.
Возможность использования старых инструментов командной строки остается практический прозрачной. Консольные утилиты работают почти так же как и в cmd. Почему почти? Потому что в PoSH они возвращают не текстовый вывод, а массив строк🙂

#Получаем строки с 3й по 5ую из вывода ipconfig'а 
PS L:\PowerShell> (ipconfig /all)[3..5] 
Host Name . . . . . . . . . . . . : Vista 
Primary Dns Suffix . . . . . . . : 
Node Type . . . . . . . . . . . . : Hybrid 

Далее…
WSH… Многие администраторы возмущались — как же так, мы тут WSH изучали, куча скриптов на нём, что же теперь всё переписывать на PoSH?! Нет, PoSH пока не конкурент WSH'у. У них пока разные задачи. WSH остаётся языком для логонскриптов, и продолжает поддерживатся. Во всяком случае и в Vista, и в Longhorn Server он сохранится. PoSH пока не слишком производителен для использования в логонскриптах, и не установлен на ОС по умолчанию — то есть его придётся доустанавливать…
По поводу конвертации WSH в PoSH — только если вам это интересно🙂 Кстати конвертится элементарно.
Кстати для любителей WSH🙂

# эту функцию можно скопировать сразу всю в буфер обмена, и вставить 
# оттуда в PoSH. Он разберется что это только начало функции и не начнет 
# исполнение пока не получит последнюю закрывающую скобку. 
function Invoke-VBScript([string]$code){
	$a = new-object -comobject MSScriptControl.ScriptControl
	$a.language = "vbscript"
	$a.eval($code)
}

# Далее можно вызывать код vbscript'а напрямую из PoSH, например:
PS L:\PowerShell> $res = Invoke-VBScript 'InputBox("Type something:")'
PS L:\PowerShell> $res
Something

Ну или использование wscript.shell🙂

(new-object -comobject wscript.shell).popup("Сообщение",0,"Заголовок")

WMI
Я вобщем то всегда знал что WMI мощная штука, и с ним доступна огромная функциональность, но… Пытатся изучить его через скрипты WSH — их и самих то не просто отлаживать, а WMI и вовсе не дружелюбен. Во всяком случае так мне казалось, и думаю что многие со мной согласились бы. Но потом я попробовал WMI в PoSH…🙂 Я никогда не думал что WMI может быть настолько простым и легким для изучения. Позже выложу свой скрипт для инвентаризации который я написал под впечатлением🙂 А пока просто ответ на еще один вопрос — как запустить процесс на удаленном компьютере с помощью PoSH (ну и WMI :))

$p = Get-WmiObject -Computer 2k3r2 -List | Where-Object {$_.name -eq "win32_process"}
$p.Create("calc")

Еще хотелось бы поговорить о .NET но и так много написал на сегодня, к томуже .NET в PowerShell заслуживает отдельной темы как минимум🙂

Опубликовано в PowerShell. Комментарии к записи PowerShell — Зачем? отключены
%d такие блоггеры, как: