Использование Windows Server 2008 Powershell для выполнения общих сетевых команд. Windows powershell команды
Использование Windows Server 2008 Powershell для выполнения общих сетевых команд
Существуют вещи, которые мы выполняем каждый день, будучи администраторами сети Windows, но если бы нас попросили сделать их с помощью командной строки, в отличие от администраторов Linux, для нас, администраторов Windows, это было бы весьма проблематично. Windows всегда был слаб, когда речь шла об инструментах командной строки. На мой взгляд, все изменилось с появлением Windows Powershell. С помощью Powershell (или по-другому PS) можно выполнить столько различных функций, которые мы не могли выполнять ранее. В этой статье мы сконцентрируемся на том, как Powershell может помочь нам выполнять некоторые общие сетевые функции из командной строки. Продолжайте читать, чтобы узнать больше!
Что такое Powershell?
Powershell – это устанавливаемая функция Windows Server 2008. Чтобы установить Powershell, вы должны установить функцию Powershell с помощью мастера добавления функций. Процесс установки занимает около минуты, и как только компонент установлен, у вас появляется доступ к удивительному языку сценариев командной строки. В отличие от других сценарных языков в Windows, Powershell создан исключительно для системных администраторов. Powershell использует .NET и команды (‘cmdlets’ или ‘command-lets’) в своей работе. Будучи пользователем PS, вы можете использовать команды по отдельности или связывать их вместе, чтобы выполнять более сложные задачи.
Когда вы установили PS, вы сможете запустить Пуск -> Все программы -> Windows Powershell 1.0, и нажать Windows PowerShell. На этом этапе у вас должно появиться голубое окно CLI, которое выглядит, как показано на рисунке 1.
Рисунок 1: Окно Windows Powershell Command
Вы всегда можете сказать, что работаете в Powershell, поскольку в окне ‘PS’ в начале всегда есть следующая строка:
PS C:\Users\Administrators
Теперь, когда powershell установлен и его окно открыто, позвольте мне показать вам некоторые общие сетевые задачи, которые можно выполнить в PS.
Перечислить IP адреса вашего сервера
Чтобы получить список IP адресов на вашем сервере Windows 2008 Server, вам нужно использовать следующую команду:
Get-WmiObject -Class Win32_NetworkAdapterConfiguration -Filter IPEnabled=TRUE -ComputerName . | Select-Object -Property IPAddress
Вот как выглядят данные после использования этой команды на моем Windows 2008 Server:
Рисунок 2: Перечисление IP адресов с помощью Windows Powershell
Как видно из рисунка, исходные данные показывают нам, что у меня есть один адаптер с IP V4 адресом и IP V6 адресом на этом сервере Windows 2008 Server. Само по себе, это не является чем-то удивительным, но подумайте о том, что вы сможете сделать с этим, используя другие сценарные функции.
Как учит нас руководство пользователей powershell, результирующие данные являются массивом и вы можете посмотреть IP адрес лишь направив эти данные в ‘Select-Object’ (после отключения IPV6), примерно так:
Get-WmiObject -Class Win32_NetworkAdapterConfiguration -Filter IPEnabled=TRUE -ComputerName . | Select-Object -ExpandProperty IPAddress<img src="http://faqman.ru/wp-content/uploads/2009/02/5944.jpg" alt="5944" />
Получение списка конфигурации сетевого адаптера с помощью Powershell
Чтобы посмотреть основную конфигурацию вашего сетевого адаптера, вы можете использовать следующую команду:
Get-WmiObject -Class Win32_NetworkAdapterConfiguration -Filter IPEnabled=TRUE'ComputerName .
Хотя данная статья посвящена рассмотрению использования PS в Windows Server 2008, эта утилита также может использоваться и в Windows XP, Vista или Server 2003. Вот пример полученных данных команды, запущенной на моей рабочей станции Windows XP:
Рисунок 4: PowerShell показывает конфигурацию сетевого адаптера на Windows XP
Тестовый опрос компьютера с помощью PowerShell
Хотя командная строка PS все же может выполнять все обычные команды Windows (например тестовый опрос), сильная сторона Powershell заключается в том, что вы можете взять полученные данные и с легкостью изменить их.
Вот пример того, как это можно сделать, предоставлено руководством пользователя Windows Powershell. В этом примере результаты Win32_PingStatus анализируются с помощью Select-Object. В этом случае данные просто показывают время ответа и код статуса.
Вот команда, которая использовалась:
Get-WmiObject -Class Win32_PingStatus -Filter "Address='127.0.0.1'" -ComputerName . | Select-Object -Property Address,ResponseTime,StatusCode
А вот результаты использования команды на моей машине Windows:
Рисунок 5: PowerShell данные показывают статус опроса, анализируемого с помощью Select-Object
Разрешение общего доступа к папке с помощью Windows Powershell
Буду с вами откровенен. Использование команд Powershell не всегда настолько просто, как использование существующих команд Windows, с которыми вы уже знакомы. Вот пример.
Следующая команда PS обеспечит общий доступ к папке в C:\temp в качестве ‘davidtemp’ и применит к ней отличную команду:
(Get-WmiObject -List -ComputerName . | Where-Object -FilterScript {$_.Name -eq"Win32_Share"}).InvokeMethod("Create",("C:\temp","davidtemp",0,25,"David'sTemp Folder"))
С другой стороны, вы могли просто использовать уже проверенную и опробованную команду net share:
net share davidtemp=C:\temp /remark:"David's Temp Shared Folder"<img src="http://faqman.ru/wp-content/uploads/2009/02/6248.jpg" alt="6248" />
Обратите внимание на то, что команда Powershell не просто не сработала, но выдала мне ужасную ошибку. Я пробовал эту команду на Windows XP и Vista и я был администратором системы.
С другой стороны, команда net share очень проста и сработала с первой попытки. И хотя я пытаюсь рассказать вам о принципах работы с Powershell, не забывайте о том, что Powershell может использовать традиционные сетевые команды Windows, которые во многих случаях гораздо проще использовать. Однако вы можете оказаться в ситуации, в которой эти традиционные команды не делают всего того, что вам необходимо, и именно здесь на помощь придет Powershell.
Прочие сетевые и более сложные команды
Если вы собираетесь использовать только самые основные сетевые команды администрирования в Powershell, вы, возможно, запутаетесь и не будете их больше использовать, потому что, как и в любом другом сценарном языке, здесь нужно учиться.
Однако, как только вы преодолели трудности обучения и научились использовать этот язык, у вас будет инструмент, который очень эффективен и может экономить ваше время.
Как вы, возможно, заметили из предыдущих примеров, одним из параметров для большинства команд Powershell является ‘computername’. Когда мы ставим точку (‘.’) вместо имени компьютера (computername), это будет локальный хост (наш компьютер). Однако мы также можем заменять любой IP адрес или имя компьютера Windows в домене, что дает нам возможность использовать эти команды не только на нашем ПК, но и создавать мощные сценарии в Powershell, которые можно применять на всех компьютерах сети.
Например, вот команда, которая передает IP адрес компьютера Dell через LAN:
Get-WmiObject -Class Win32_NetworkAdapterConfiguration -Filter IPEnabled=TRUE -ComputerName DELL9400
Вот результаты этой команды:
Рисунок 7: Результаты Powershell получения IP адреса с удаленного ПК
А вот увеличенное изображение, показывающее необходимую информацию:
Рисунок 8: Увеличение окна результатов Powershell получения IP адреса удаленного ПК
Итак, возможность работать с удаленными компьютерами является основной функцией Powershell, однако еще одной мощной возможностью является возможность фильтрации данных и сочетания данных, полученных от использования разных команд.
Взгляните на следующий пример:
"127.0.0.1","localhost","research.microsoft.com" | ForEach-Object -Process {Get-WmiObject -Class Win32_PingStatus -Filter ("Address='" + $_ + "'") -ComputerName .} | Select-Object -Property Address,ResponseTime,StatusCode
В этом примере был получен список IP адресов и имен домена. Этот список был передан на ‘ForEach-Object’. Для каждого из этих «объектов» (IP адрес / доменные имена), использовался элемент ‘Get-WmiObject’ PingStatus. Затем данные тестового опроса каждого имени домена были пропущены через ‘Select-Object’, в результате чего были отображены только адреса, время ответа и коды статуса.
Рисунок 9: Тестовый опрос с помощью списка при сочетании и опросе данных
На мой взгляд, этот пример демонстрирует некоторые возможности Powershell. Как вы видите, можно направлять и перенаправлять вводимые и выводимые данные в различных направлениях при достижении ваших задач администрирования.
Что еще нужно знать?
Как я уже говорил, помните, что Powershell работает не только для Windows Server 2008, но и для Windows XP, Vista и Server 2003. Powershell – это бесплатная утилита, которую можно быстро скачать, поскольку она весит всего около 6MB. Все что вам нужно сделать, это перейти по ссылке Powershell download site at this URL.
Заключение
Windows Powershell – это очень мощная утилита. В этой статье невозможно описать всего того, что вы сможете сделать с помощью Powershell, но надеюсь, что мне удалось дать вам общую картину возможностей этой утилиты и вдохновить вас на последующие изыскания в этой области. С каждым днем появляются новые книги, курсы и уйма материала в Интернете о функциях Powershell, которые могут использоваться системными администраторами Windows. Учитывая столь сильную привязанность администраторов Windows к графическому интерфейсу, потребуется время на то, чтобы Powershell была принята в тех компаниях, в которых не испытывают острой необходимости в этом инструменте. Я уверен, что администраторы будут использовать Powershell для создания более коротких сценариев, с помощью которых можно будет выполнять более сложные задачи. Надеюсь, что Powershell будет обретать все большую популярность по всему миру!
Особая благодарность компании Microsoft за предоставление примеров команд в документации руководства пользователя Windows Powershell.
www.windowsnetworking.com
Смотрите также:Tags: linux, search, Windows 2008, Windows XP
faqman.ru
Что такое псевдонимы команд в Windows PowerShell
В предыдущей статье мы говорили о том, что Windows PowerShell обеспечивает обратную совместимость с командами и сценариями других оболочек и скриптовых языков. Эта совместимость не ограничивается возможностью запускать чужие скрипты в PowerShell. Microsoft провела серьезную работу, обеспечивая схожесть синтаксиса PowerShell с командной строкой Windows и терминалом UNIX, для того, чтобы пользователю не пришлось тратить время на переучивание.Но, как мы знаем из первой статьи, все команды Windows PowerShell строятся по принципу «глагол-существительное». Команды cmd.exe или UNIX в это правило не укладываются. Microsoft не стал создавать отдельные группы команд, вместо чего были введены псевдонимы команд, таким образом, к одной и той же команде можно обращаться по нескольким альтернативным именам.
Псевдонимы в Windows PowerShell служат двум целям — обеспечению простоты освоения и ускорению работы с PowerShell путем сокращения имен команд.
Просмотреть список всех псевдонимов в Windows PowerShell можно командой
Get-Alias Результат выполнения команды Get-AliasПосмотреть соответствие одного псевдонима команде можно через
Get-Alias cdили
Get-Command cdВ данном примере я посмотрел соответствие псевдонима cd, которым удобно переходить из каталога в каталог.
Псевдонимы сокращения действуют по простому принципу — глагол Get сокращается до g, существительное Content до c и т.д. Таким образом команда Get-Content превращается в gc. Все сокращения также есть в списке псевдонимов, который вызывается через Get-Alias.
Пользователь может создавать собственные псевдонимы при помощи командлета New-Alias или Set-Alias.
Например
New-Alias -Name stop -Value Stop-ProcessПсевдонимы также можно переназначать
Set-Alias stop Stop-ServiceПоскольку псевдоним stop уже был создан, в данном случае параметры -Name и —Value можно опустить.
Псевдонимы PowerShell можно создавать для всех типов команд, в том числе внешних исполняемых файлов.
Set-Alias paint c:\windows\system32\mspaint.exeТак мы создали псевдоним paint для запуска программы Paint из Windows PowerShell.
Удаление псевдонима производится командой Remove-Item.
Remove-Item alias:paintТак мы удалили только что созданный псевдоним paint из системы.
Что еще удобно в работе с псевдонимами? Скажем, если Вы настроили PowerShell под себя, то Вам, вероятно, захочется иметь такие же настройки на любом Вашем рабочем месте. Псевдонимы можно экспортировать в текстовый файл командой Export-Alias, указав путь к файлу, и импортировать из файла командой Import-Alias.
Таким образом, мы убедились, что Windows PowerShell даёт возможность подстроить синтаксис под себя и свести время привыкания к новой среде к минимуму.
webistore.ru
Изучение имен команд оболочки Windows PowerShell
В большинстве интерфейсов командной строки должно уделяться значительное время изучению имен команд и их параметров. Проблема заключается в том, что существует очень мало шаблонов имени, поэтому единственным способом изучить команды является запоминание каждой команды и каждого параметра, которые необходимо регулярно использовать.
При работе с новой командой или параметром обычно нельзя использовать то, что вы уже знаете; необходимо найти и запомнить новое имя. Если рассмотреть, как интерфейсы расширяются из небольшого набора средств при постепенном добавлении функциональных возможностей, легко понять, почему их структура нестандартна. В особенности, что касается имен команд, это может выглядеть логичным, так как каждая команда является отдельным средством, но при работе с именами команд есть способ лучше.
Большинство команд построено для управления элементами операционной системы или приложений, таких как службы или процессы. Команды имеют разнообразные имена, которые могут соответствовать или не соответствовать семейству. Например, в системах Windows можно использовать команды net start и net stop для запуска или остановки службы. Есть другое более обобщенное средство управления службами для Windows с совершенно другим именем, sc, не соответствующим шаблону именования команд службы net. Для управления процессами в Windows есть команда tasklist для предоставления списка процессов и команда taskkill для уничтожения процессов.
Команды, для которых нужны параметры, имеют нерегулярные спецификации параметров. Команду net start нельзя использовать для запуска службы на удаленном компьютере. Команда sc запускает службу на удаленном компьютере, но для задания удаленного компьютера перед его именем должны ставиться две обратные косые черты. Например, для запуска службы Spooler на удаленном компьютере с именем DC01 необходимо ввести sc \\DC01 start spooler. Для перечисления задач, выполняющихся на DC01, необходимо использовать параметр /S (system — система) и задать имя DC01 без обратных косых черт, например tasklist /S DC01.
Хотя между службой и процессом имеются важные технические различия, — это два примера управляемых элементов на компьютере, имеющем хорошо определенный жизненный цикл. Может быть необходимым запустить или остановить службу или процесс, либо получить список всех выполняющихся в настоящее время служб или процессов. Другими словами, хотя служба и процесс — это разные вещи, действия, которые производятся над службой или процессом, концептуально часто являются одинаковыми. Более того, выбор, который мы можем сделать для настройки действия заданием параметров, концептуально также может быть таким же.
Windows PowerShell использует это сходство для уменьшения количества различающихся имен, которые необходимо знать для понимания и использования командлетов.
Сокращение количества обязательных для запоминания команд при помощи шаблона глагол-существительное
Windows PowerShell использует систему именования "глагол-существительное", где имя каждого командлета состоит из обычного глагола, после которого через дефис идет специальное существительное. Глаголы Windows PowerShell не всегда являются глаголами английского языка, но они выражают определенное действие в оболочке Windows PowerShell. Существительные во многом сходны с существительными любого языка, они описывают объекты определенных типов, важные в администрировании системы. Несложно продемонстрировать, как эти состоящие из двух частей имена уменьшают необходимые для изучения усилия. Рассмотрим для этого несколько примеров глаголов и существительных.
Глаголы менее ограничены, но они должны всегда описывать, на что действует команда. В Windows PowerShell используются такие команды как Get-Process, Stop-Process, Get-Service и Stop-Service.
В случае двух существительных и двух глаголов согласованность не слишком упрощает изучение. Однако если взглянуть на обычный набор из десяти глаголов и десяти существительных, то нужно изучить только 20 слов, но при помощи их можно образовать 100 различных имен команд.
Часто по имени команды можно понять, что она выполняет, и обычно бывает очевидным, какое имя должно использоваться для новой команды. Например, команда завершения работы компьютера может выглядеть как Stop-Computer. Команда, формирующая список всех компьютеров в сети, может выглядеть как Get-Computer. Командой получения даты системы является команда Get-Date.
Можно перечислить все команды, включающие определенный глагол, задав параметр -Verb команды Get-Command (команда Get-Command будет подробно рассмотрена в следующем разделе). Например, для вывода списка всех командлетов, в которых используется глагол Get, введите:
PS> Get-Command -Verb Get CommandType Name Definition ----------- ---- ---------- Cmdlet Get-Acl Get-Acl [[-Path] <String[]>]... Cmdlet Get-Alias Get-Alias [[-Name] <String[]... Cmdlet Get-AuthenticodeSignature Get-AuthenticodeSignature [-... Cmdlet Get-ChildItem Get-ChildItem [[-Path] <Stri... ...Параметр -Noun еще полезнее, так как позволяет вывести семейство команд, влияющих на объекты одного типа: Например, если необходимо видеть, какие команды имеются для управления службами, введите следующую команду:
PS> Get-Command -Noun Service CommandType Name Definition ----------- ---- ---------- Cmdlet Get-Service Get-Service [[-Name] <String... Cmdlet New-Service New-Service [-Name] <String>... Cmdlet Restart-Service Restart-Service [-Name] <Str... Cmdlet Resume-Service Resume-Service [-Name] <Stri... Cmdlet Set-Service Set-Service [-Name] <String>... Cmdlet Start-Service Start-Service [-Name] <Strin... Cmdlet Stop-Service Stop-Service [-Name] <String... Cmdlet Suspend-Service Suspend-Service [-Name] <Str... ...Команда — это не обязательно командлет только из-за того, что он имеет схему именования глагол-существительное. Примером собственной команды Windows PowerShell, не являющейся командлетом, но имеющей имя типа глагол-существительное, является команда очистки окна консоли Clear-Host. Команда Clear-Host в действительности является внутренней функцией, в чем можно убедиться при выполнении на ней команды Get-Command:
PS> Get-Command -Name Clear-Host CommandType Name Definition ----------- ---- ---------- Function Clear-Host $spaceType = [System.Managem...Командлеты используют стандартные параметры
Как уже отмечалось ранее, команды, используемые в традиционных интерфейсах командной строки, обычно не используют согласованные имена параметров. Иногда параметры вообще не имеют имен. Если же они имеют имя, это имя часто состоит из одного знака или аббревиатуры, которую можно быстро ввести, но которая трудно осмысливается новыми пользователями.
В отличие от большинства других традиционных интерфейсов командной строки, оболочка Windows PowerShell обрабатывает параметры непосредственно и использует этот непосредственный доступ к параметрам наряду с рекомендациями разработчика для стандартизации имен параметров. Хотя это не гарантирует того, что каждый командлет будет всегда соответствовать стандартам, такая рекомендация способствует стандартизации.
Примечание. | |
При использовании параметров перед их именами всегда стоит "-", что позволяет оболочке Windows PowerShell легко идентифицировать их как параметры. В примере Get-Command -Name Clear-Host параметр имеет имя Name, но вводится как -Name. |
Далее приводятся некоторые из общих характеристик обычных имен параметров и использования этих параметров.
Параметр справки (?)
При указании параметра -? в каком-либо командлете командлет не исполняется. Вместо этого Windows PowerShell отображает справку для командлета.
Общие параметры
Оболочка Windows PowerShell содержит несколько параметров, называемых общими параметрами. Так как эти параметры контролируются механизмом Windows PowerShell, при каждом использовании командлетом их поведение будет всегда одинаковым. Общие параметры — это WhatIf, Confirm, Verbose, Debug, Warn, ErrorAction, ErrorVariable, OutVariable и OutBuffer.
Рекомендуемые к использованию параметры
Командлеты ядра Windows PowerShell используют стандартные имена для одинаковых параметров. Хотя использование имен параметров не является принудительным, имеется явная рекомендация по использованию имен для обеспечения стандартизации.
Например, рекомендуется именовать параметры, обращающиеся к компьютеру по имени как ComputerName, а не как Server (сервер), Host (узел), System (система), Node (узел) или другие общие альтернативные слова. Важными рекомендуемыми именами параметров являются Force, Exclude, Include, PassThru, Path и CaseSensitive.
winintro.ru
powershell команды управления виртуальными машинами
10:58 pm - powershell команды управления виртуальными машинамиsconfig # штатная утилита для быстрой начальной настройки Windows Server
https://technet.microsoft.com/ru-ru/library/hh848559.aspx
Get-HelpGet-Help New-VM –DetailedGet-Help New-VM -Examples
Get-Command -Module StorageGet-Command -Verb *Get* -Module Storage
Get-VMSwitch Get-NetIPConfiguration –Detailed
Get-NetAdapter # Узнаем под какими именами фигурируют адаптеры. Get-NetIPConfiguration # Смотрим текущую конфигурацию IP на сетевых интерфейсах
Назначаем статическую адресацию, маску сети, шлюз по умолчанию и адреса DNS серверов. InterfaceIndex сетевого адаптера берем из вывода предыдущего командлета.
New-NetIPAddress -InterfaceIndex 13 -IPAddress 192.168.1.5 -DefaultGateway 192.168.1.1 -PrefixLength 24
Set-DnsClientServerAddress -InterfaceIndex 13 -ServerAddresses 192.168.1.2,192.168.1.3
Вывести состояние конкретной ВМ в более менее удобочитаемом виде можно такой командой:
Get-VM -Name Win7_ZKAcces | fl
А для вывода всех имеющихся характеристик ВМ можно сделать так:
Get-VM -Name Win7_ZKAcces | fl *
https://blogs.msdn.microsoft.com/virtual_pc_guy/2015/05/18/using-powershell-to-get-vm-ip-addresses/
Get-VM | ?{$_.ReplicationMode -ne “Replica”} | Select -ExpandProperty NetworkAdapters | Select VMName, IPAddresses, Status
Get-Command –Module Hyper-VGet-Service VMMS Get-Disk # Получить информацию об установленных жестких дискахGet-VM # статус виртуалокStop-VM Win7_ZKAcces # Остановить виртуалку Win7_ZKAccesStart-VM Win7_ZKAcces # Запустить виртуалку Win7_ZKAcces Start-VM –Name web* # Запустить все виртуальные машины, имена которых начинаются с «web»
С помощью ключа Force мы принудительно завершим работу ВМ, не смотря на незавершенные процессы:Stop-VM -Name WKS81 -ForceДля выключения питания используем ключ TurnOff, и ключ Save для сохранение состояния ВМ:Stop-VM -Name WKS81 -TurnOffStop-VM -Name WKS81 -Save
Создать новую виртуальную машину под названием MyVM
New-VM -Name MyVM –MemoryStartupBytes 1GB -NewVHDPath c:MSVMsMyVM.vhd -NewVHDSizeBytes 60GB
New-VM –Name Test # Создать новую виртуальную машину с именем «test»
Создать новый виртуальный жесткий диск по пути d:\VHDs\test.vhd
New-VHD –Path F:\VHDs\test.vhd
Подключить виртуальный сетевой адаптер на виртуальной машине «test» к коммутатору «QA».
Connect-VMNetworkAdapter –VMName test –SwitchName QA
Экспортировать «на лету» виртуалку Win7_ZKAcces в папку F:\virt\clone\Win7_ZKAcces\23-09-2016 (сделать бакап)
Export-VM –Name Win7_ZKAcces –Path F:\virt\clone\Win7_ZKAcces\23-09-2016
Импорт (копирование и генерация нового ID). Для импорта указываем XML-файл конфигурации виртуальной машины, находящийся в папке Virtual Machines:
Import-VM -Path ″C:\VM\Virtual Machines\4596AEB4-AB71-43E2-9B1D-4579B7CFC4D1.xml″ -Copy -GenerateNewID
Переместить «на лету» файл жесткого диска виртуальной машины Win7_ZKAcces из папки F:\serv1c.vhdx в папку D:\Virt\serv1c\serv1c\serv1c.vhdx
Move-VMStorage "Win7_ZKAcces" –VHDs @(@{«SourceFilePath» = «F:\serv1c.vhdx»; «DestinationFilePath» = «D:\Virt\serv1c\serv1c\serv1c.vhdx»})
Увеличить файл жёсткого диска serv1c.vhdx до 85 Гб (виртуальная машина должна быть остановлена)
Resize-VHD –Path F:\serv1c.vhdx –SizeBytes 85GB
Получить информацию о разделах жесткого диска под номером 1
Get-Partition -DiskNumber 1
Удалить на жестком диске номер 1 логический раздел номер 2
Remove-Partition -DiskNumber 1 -PartitionNumber 2
Создать на жестком диске номер 1 новый раздел под буквой F, используя всё доступное пространство
New-Partition -DiskNumber 1 -UseMaximumSize -DriveLetter F
Форматировать логический раздел с буквой F в файловую систему NTFS
Format-Volume -DriveLetter F -FileSystem NTFS
Контрольные точки (Checkpoint) позволяют сделать моментальный снимок виртуальной машины, сохранив ее состояние на определенный момент времени.создадим для ВМ WKS81 чекпойнт с именем Test:
Checkpoint-VM -VMName WKS81 -Name Test
Просмотрим все имеющиеся у машины чекпойнты:
Get-VMSnapshot -VMName WKS81
Применим созданный чекпойнт
Restore-VMSnapshot -VMName WKS81 -Name Test
И удалим его:
Remove-VMSnapshot -VMName WKS81 -Name Test
переместить хранилище ВМ можно из консоли PowerShell, например для переноса всех файлов машины WKS81 в одно расположение выполним команду:
Move-VMStorage -VMName WKS81 -DestinationStoragePath ″C:\VM″
Экспорт и импорт ВМ
Export-VM -Name WKS81 -Path C:\VM
И импорт (копирование и генерация нового ID). Для импорта указываем XML-файл конфигурации виртуальной машины, находящийся в папке Virtual Machines:
Import-VM -Path ″C:\VM\Virtual Machines\4596AEB4-AB71-43E2-9B1D-4579B7CFC4D1.xml″ -Copy -GenerateNewID
Вывести состояние конкретной ВМ в более менее удобочитаемом виде можно такой командой:
Get-VM -Name WKS81 | fl
А для вывода всех имеющихся характеристик ВМ можно сделать так:
Get-VM -Name WKS7 | fl *
Выключение виртуальной машины осуществляется командлетом Stop-VM с различными ключами. Например, для завершения работы операционной системы ВМ WKS81 воспользуемся командой:
Stop-VM -Name WKS81
С помощью ключа Force мы принудительно завершим работу ВМ, не смотря на незавершенные процессы:
Stop-VM -Name WKS81 -Force
Для выключения питания используем ключ TurnOff, и ключ Save для сохранение состояния ВМ:
Stop-VM -Name WKS81 -TurnOffStop-VM -Name WKS81 -Save
Ну а для включения или восстановления состояния используется командлет Start-VM:
Start-VM -Name WKS81
http://www.vmstart.ru/opisaniya-i-czeny/556-nastrojka-hyper-v-server-2012-r2#link1
Проверяем текущую настройку IPv6 на интерфейсе.Имя интерфейса берем из вывода командлетов Get-NetAdapter или Get-NetIPConfiguration.
Get-NetAdapterBinding -InterfaceDescription "Microsoft Hyper-V Network Adapter" | Where-Object -Property DisplayName -Match IPv6 | Format-Table –AutoSize
Отключить поддержку IPv6 на сетевом адаптере можно командлетом Disable-NetAdapterBinding
Disable-NetAdapterBinding -InterfaceDescription "Microsoft Hyper-V Network Adapter" -ComponentID ms_tcpip6
Настройка межсетевого экрана (Advanced Firewall)
Get-NetFirewallRule | Where-Object -Property DisplayName -Match "firewall" | Format-List -Property Name, DisplayName, Enabled
Включаем оба правила.
Enable-NetFirewallRule -Name RemoteFwAdmin-In-TCP,RemoteFwAdmin-RPCSS-In-TCP
добавить на Hyper-V Server в доверенные узлы WinRM на хосте управления и обновить текущее состояние в ServerManager.
Set-Item wsman:\localhost\Client\TrustedHosts HYPER-V01 -Concatenate –Force
Модуль Hyper-V для Windows PowerShell
https://technet.microsoft.com/ru-ru/library/hh846767(v=ws.11).aspx-------------------------------------------------------------------|------------------------------------------------------- Задача | Команда Windows PowerShell для выполнения задачи -------------------------------------------------------------------|------------------------------------------------------- Создать новую виртуальную машину с именем «test». | New-VM –Name Test -------------------------------------------------------------------|------------------------------------------------------- Получить список всех виртуальных машин | Get-VM -------------------------------------------------------------------|------------------------------------------------------- Создать новый виртуальный жесткий диск по пути d:\VHDs\test.vhd | New-VHD –Path D:\VHDs\test.vhd -------------------------------------------------------------------|------------------------------------------------------- Запустить все виртуальные машины, имена которых начинаются с «web» | Start-VM –Name web* -------------------------------------------------------------------|------------------------------------------------------- Подключить виртуальный сетевой адаптер на виртуальной машине «test»| Connect-VMNetworkAdapter –VMName test –SwitchName QA к коммутатору «QA». | -------------------------------------------------------------------|------------------------------------------------------- Использование стандартных глаголов командлетов. -----------------|-------------------------------------------|------------------------------------------------------ Задача | Командлет для выполнения задачи в службе | Командлет для выполнения задачи в виртуальной машине -----------------|-------------------------------------------|------------------------------------------------------ Get | Get-Service | Get-VM -----------------|-------------------------------------------|------------------------------------------------------ Настройка | Set-Service | Set-VM -----------------|-------------------------------------------|------------------------------------------------------ Создать | New-Service | New-VM -----------------|-------------------------------------------|------------------------------------------------------ Запуск | Start-Service | Start-VM -----------------|-------------------------------------------|------------------------------------------------------ Стоп | Stop-Service | Stop-VM -----------------|-------------------------------------------|------------------------------------------------------ «Перезапуск» | Restart-Service | Restart-VM -----------------|-------------------------------------------|------------------------------------------------------ Приостановка | Suspend-Service | Suspend-VM -----------------|-------------------------------------------|------------------------------------------------------ Resume | Resume-Service | Resume-VM -----------------|-------------------------------------------|------------------------------------------------------
ссылка для скачивания всех компонентов System Center 2012 RC.
https://technet.microsoft.com/library/hh546785(v=sc.12).aspxдокументация из библиотеки Technet по System Center 2012 Virtual Machine Manager.http://technet.microsoft.com/en-us/library/gg610610.aspxкурс Microsoft Virtual Academy по System Center 2012 Virtual Machine Manager http://www.microsoftvirtualacademy.com/tracks/system-center-virtual-machine-manager-2012Введение в облачные технологии Microsofthttp://www.microsoft.com/microsoftservices/en/us/journey_to_the_cloud.aspxразличные вебкасты по компонентам System Center на Techdays.ru.http://www.techdays.ru/videos/System%20Center
http://legotin.com/new-features-system-center-2012-vmm/http://itnotices.ru/klonirovanie-virtualnih-mashin-v-hyper-v/
Клонирование виртуальных машин Hyper-V с использованием PowerShell
1. Экспорт виртуальной машины.Export-VM -Name SYD-DC -Path 'D:\VMM\Export'
2. Импорт виртуальной машины.
Import-VM -Path 'D:\VMM\Export\SYD-DC\Virtual Machines\4E9FC690-E871-47A1-A783-786A0B604CB4.XML' -VhdDestinationPath 'D:\VMM\VHD\SRV2' -Copy -GenerateNewId
3. Переименовываем виртуальную машину. Для начала узнаем ID клонированной машины.
get-vm | select VMNAME,VMId
Нас интересуют две машины с одинаковым именем, но разными ID. Переименовывать будем машину ID которой отличается от ID импортируемой на шаге 2 машины. Следующий набор команд выполнит переименование. 5F3E5C8D-1280-43ED-8F1E-7274AB3B9643 — это полученный при выполнении предыдущей команды идентификатор.
get-vm | Where-Object {$_.VMId -eq "5F3E5C8D-1280-43ED-8F1E-7274AB3B9643"} | Rename-VM -NewName SRV2
4. Переименовываем виртуальный жесткий диск.
Get-VHD -VMId 5f3e5c8d-1280-43ed-8f1e-7274ab3b9643 | Select Path | Rename-Item -NewName SRV2.vhdxRemove-VMHardDiskDrive -VMName SRV2 -ControllerType SCSI -ControllerLocation 0 -ControllerNumber 0Add-VMHardDiskDrive -VMName SRV2 -ControllerType SCSI -ControllerNumber 0 -ControllerLocation 0 -Path 'D:\VMM\VHD\SRV2\SRV2.vhdx'
5. Изменяем MAC адрес для виртуального адаптера виртуальной машины. Здесь может быть два варианта. Первый, это выставить динамическое получение MAC адреса. И, соответственно, второй — это указать MAC в ручную.
Set-VMNetworkAdapter -VMName SRV2 -DynamicMacAddressSet-VMNetworkAdapter -VMName SRV2 -StaticMacAddress '00-15-5D-80-55-01'Start-VM -Name SRV2
6. Меняем IP адрес и имя виртуального сервера. К сожалению, у меня не получилось реализовать данные задачи без запуска виртуальной машины. Следующие команды необходимо выполнить непосредственно в консоли powershell виртуального сервера.
Rename-Computer SRV2Remove-NetIPAddress -InterfaceAlias «Ethernet» -AddressFamily IPV4New-NetIPAddress -IPAddress 192.168.0.20 -InterfaceAlias «Ethernet» -AddressFamily IPv4 -PrefixLength 24Restart-Computer
https://github.com/ejsiron/Corefighttps://www.5nine.ru/products/5nine-manager-for-hyper-v-free
http://ru.bmstu.wiki/Microsoft_Hyper-VМодуль Hyper-V для Windows PowerShellУстановка Hyper-V и создание виртуальной машиныPowerShell+Hyper-VVMware PowerCLI: Управляем облаками и всем всем всем из командной строки:Hyper-v Server 2012R2: опыт установки и настройки Включаем дедупликацию в Windows 10http://www.linuxloves.ru/publications/VMware_in_AzureУстановка и настройка Windows Hyper-V Server 2016
uzverss.livejournal.com
Введение в Power Shell - Litl-admin.ru
Первые шаги
Windows PowerShell 2.0 был выпущен в составе Windows 7 и Windows Server 2008 R2 как неотъемлемый компонент системы. Кроме того, вторая версия доступна и для других систем, таких как Windows XP SP3, Windows Server 2003 SP2, Windows Vista SP1 и Windows Server 2008.
Если у вас по каким то причинам не установлен PowerShell то вот ссылка, по которой вы сможете загрузить PowerShell, а также узнать подробные сведения об этой оболочке.
Windows PowerShell построен на базе Microsoft NET Framework и интегрирован с ним. Дополнительно PowerShell предоставляет удобный доступ к COM, WMI и ADSI, равно как и позволяет выполнять обычные команды командной строки, чтобы создать единое окружение, в котором администраторы смогли бы выполнять различные задачи на локальных и удалённых системах.
Работа с командами
Разработчики PowerShell оснастили эту оболочку особым языком сценариев, построенным в соответствии со стандартом .NET Framework. Команда в PowerShell называется командлет или cmdlet в оригинале. Командлет подобен функции в том плане, что он выполняет конкретную задачу, например извлекает содержимое папки или обновляет запись реестра и имеет параметры которые могут изменять результат работы команды.
В оболочку PowerShell встроено свыше 100 команд. Так же можно создавать дополнительные команды, но при этом следует пользоваться языком стандарта .NET, таким как Visual Basic .NET или C#.
Каждый вариант команды представляет собой комбинацию «глагол-существительное». Это объясняется тем, что специалисты Microsoft хотели использовать единообразную схему именования и тем самым облегчить изучение, а также расширение оболочки PowerShell. Глагол указывает на действие, которое предстоит совершить, а существительное — на тип объекта, над которым будет совершаться данное действие. К примеру, команда Get-ChildItem считывает список элементов текущего рабочего каталога или контейнера, например реестра. Для выполнения команды нужно ввести ее в командной строке PowerShell и нажать клавишу ввода. Результат работы команды отобразится сразу под введенной командой.
Рис. 1. Команда Get-ChildItem
Команды для получения справки
В комплект поставки PowerShell входит набор справочных файлов и для начала нужно научимся работать с этими справочными материалами. Чтобы узнать какие команды имеются в PowerShell воспользуемся командой Get-Command. На рисунке 2 показан результат работы этой команды, этого список команд. В этом списке можно увидеть имена команд и их синтаксис, но отсутствует описание того, что делает каждая из команд.
Рис 2. Команда Get-Command
Для получения этих сведений можно воспользоваться командой Get-Help. Если мы введем только Get-Help, то мы получим справку по ней самой.
Рис. 3. Команда Get-Help
Как видно из справки по команде Get-Help, чтобы получить справку по конкретной команде нужно ввести название команды сразу после Get-Help. Посмотрим справку по уже известной нам команде Get-Command. Для этого введем:
Рис. 4. Справка по команде. Команда Get-Help Get-Command
Get-Command в данном случае является параметром команды Get-Help и подобно параметрам команд в командной строке cmd.exe, параметры команд PowerShell предоставляют сведения, необходимые командам для выполнения их работы.
Множество интересных материалов по скриптингу в Windows можно взять из этой книги.
Читать рекомендую в бумажной форме.
Теперь посмотрим, как все это работает. Обратимся к примеру. Одна из типичных задач системного администратора заключается в том, чтобы читать текстовые файлы. Давайте посмотрим список командлетов начинающихся с Get (Get-Help, Get-Command и т.п.). Для это воспользуемся Get-Help и в качестве параметра укажем Get:
Рис. 5. Команда Get-Help Get
Мы получили список команд начинающихся с Get. Для работы с файлами воспользуемся командой Get-Content. Посмотрим справочную информации о команде Get-Content. Для этого введем:
Рис. 6. Команда Get-Help Get-Content
Как показано на рисунке 6, команда Get-Help Get-Content возвращает описание команды Get-Content и сведения о ее синтаксисе. Из этой справки мы узнали, что команда Get-Content возвращает содержимое элемента, которое в данном случае указывает на любой тип файла в системе. В прошлом администратору, возможно, пришлось бы воспользоваться командой For для работы с пакетными файлами или объектом File-SystemObject в сценарии Windows Script Host (WSH), но в среде PowerShell необходимо просто выполнять команду Get-Content. Чтобы получить более подробную информацию о синтаксисе, нужно добавить к команде параметр -full:
Рис. 7. Команда Get-Help Get-Content -full
Отметим, что параметр -full не основного значения. Параметры этого типа называются параметрами-переключателями, поскольку они как бы переключают линию поведения команд.
На рисунке 7 показана часть сведений, возвращенных этой командой. Администратору нужно будет прокрутить на своем компьютере окно или изменить его размеры так, чтобы можно было просмотреть все содержимое. В разделе ПАРАМЕТРЫ (PARAMETERS англ. версия справки) содержится описание параметров, которые можно добавить к команде, чтобы изменить возвращаемый ею результат. Обратите внимание на два важные пункта у параметров: Требуется? (Required англ.) и Позиция? (Position англ.).
Пункт Требуется? (Required англ.) указывают на то, является данный параметр обязательным или нет. Когда переменная Требуется? (Required англ.) имеет значение true, параметр нужно включать в команду. Если же переменной Требуется? (Required англ.) задано значение false, то данный параметр является не обязательным и его можно не указывать при использовании команды.
Значение Позиция? (Position англ.) позволяет судить о том, нужно ли присваивать параметру имя или на него можно ссылаться по его позиции. Когда переменной Позиция? (Position англ.) присвоено значение named, из этого следует, что при ссылке на данный параметр необходимо указывать его имя. Когда же значение переменной Позиция? (Position англ.) выражено числом, на параметр можно ссылаться по его имени или просто указывать значение параметра в его корректной позиции.
К примеру, как показано на рисунке 8, при выполнении команды Get-Content требуется указывать параметр -Path, рассмотрим этот параметр по подробней.
Рис. 8. Параметр -Path
В переменной Требуется? стоит значение true, это значит, что этот параметр является обязательным для команды Get-Content. В переменной Позиция? стоит значение 1, это значит, что можно не указывать название параметра при его вводе, нужно лишь ввести его сразу после названия команды (1-ая позиция).
Пример:
Рис. 9. Команда Get-Content E:01.txt
где E:01.txt – это параметр -Path
Рис. 10. Файл E:01.txt.
Если значение параметра содержит пробелы, такое значение следует заключать в кавычки.
В разделе справки ПАРАМЕТРЫ за именем каждого параметра следуют сведения, заключенные в угловые скобки (< >). Эти сведения указывают на тип данных, к которому должно относиться значение параметра. Как показано на рисунке 8, значение параметра -Path должно быть строковым (string). Если за названием типа указаны квадратные скобки [ ] (string[]), это означает, что в качестве значения параметра можно использовать строковый массив. В случае использования параметров-переключателей, таких как например параметр -Full, которые не принимают значений, то тип данных будет указан как <SwitchParameter>.
Рис. 11. Параметр -Full
Следует отметить еще одну функцию PowerShell, имеющую отношение к параметрам, это функция автоматического завершения ввода комбинации «параметр-имя». Пользователь должен только ввести достаточное число букв, составляющих имя параметра, чтобы его можно было отличить от других параметров. Так, команда Get-Help Get-Content -full эквивалентна команде Get-Help Get-Content -ful. В разделе справки ПРИМЕЧАНИЯ также имеются примеры того как можно использовать ту или иную команду. На рисунке 12 показаны 3 примера использования команды Get-Help.
Так же внизу справки имеется ссылка на онлайн справку по данной команде.
Рис. 12. Примеры использования команды Get-Help
Получение справок по концепциям
В комплект поставки PowerShell входит набор справочных файлов, содержащих обзоры различных концепций. Каждый файл начинается с символов «about_» и заканчивается именем раздела. Для просмотра алфавитного списка разделов about запустите команду:
Рис. 13. Команда Get-Help about*
Чтобы просмотреть информацию по конкретной теме, необходимо просто включить в значение параметра полное имя темы. К примеру посмотрим справку о псевдонимах. Для этого выполним команду:
Рис. 14. Команда Get-Help about_aliases
На рисунке 14 показана часть данных справки, которые получены в результате работы команды Get-Help about_aliases. Как мы видим, в файле справки содержится обзор действий, нацеленных на создание псевдонимов в PowerShell и управление ими.
Использование псевдонимов
Имена некоторых команд могут быть довольно длинными, а это не может не раздражать, если приходится раз за разом вводить команды с клавиатуры. К счастью, разработчики PowerShell предусмотрели возможность использования псевдонимов для обращения к командам. Псевдоним — альтернативное имя, которое обычно бывает намного короче, чем фактическое имя команды. PowerShell включает целый ряд встроенных псевдонимов, в дополнение к которым пользователи могут создавать собственные псевдонимы.
Чтобы просмотреть псевдонимы, доступные в ходе текущего сеанса, нужно запустить команду Get-Alias:
Рис. 15. Команда Get-Alias
Под текущим сеансом подразумевается текущее соединение с процессором PowerShell. При запуске PowerShell пользователь начинает новый сеанс работы; этот сеанс продолжается до тех пор, пока пользователь не закроет PowerShell, прерывая тем самым соединение. В дополнение ко всем встроенным псевдонимам и ассоциированным с ними командам, Get-Alias отображает все псевдонимы, созданные в ходе текущего сеанса, а также псевдонимы, заданные в профилях, которые представляют собой определяемые пользователем настройки конфигурации, загружаемые в PowerShell каждый раз при запуске оболочки.
Если нужно просмотреть псевдонимы, ассоциированные с той или иной командой, точнее определите команду Get-Alias. К примеру, чтобы просмотреть псевдонимы, ассоциированные с Get-ChildItem, выполните команду:
Рис. 16. Команда Get-Alis -definition Get-ChildItem
Как показано на рисунке 16, PowerShell включает три псевдонима для обращения к команде Get-ChildItem, это gci, ls и dir. Вместо имени команды можно использовать любой из них. Таким образом, каждая из четырех следующих команд выдает список содержимого каталога C: :
Рис. 17. Команды Get-ChildItem c: и dir c:
Если мы хотим создать свой собственный псевдоним в PowerShell, то нам поможет команда Set-Alias. Давайте создадим псевдоним для команды Get-Help. Используем сокращение hlp. Нужная нам команда будет выглядеть так:
Рис. 18. Команда Set-Alias hlp Get-Help и созданный псевдоним hlp
После этого всякий раз, когда потребуется выполнить команду Get-Help, вы можете пользоваться псевдонимом hlp. Этим псевдонимом можно будет пользоваться до завершения сеанса (т.е. до закрытия оболочки PowerShell). Учтите, что при определении псевдонима возможность включения параметров не предусмотрена, можно использовать только имя команды. Если же вы хотите определить ссылку на команду и на ее параметры, следует создать специальную функцию.
Заключение
Вы узнали о том вывести все доступные команды в PowerShell и как выводить справочную информацию по каждой из этих команд. Дерзайте, изучайте, что делают эти команды. Экспериментируйте с различными параметрами и учитесь создавать, а также использовать псевдонимы и уже скоро вы будите отлично ориентироваться в PowerShell.
Данный материал частично взят отсюда и Википедии. Выполнено в соавторстве со студентом 4 курса Березкиным Павлом.litl-admin.ru
Microsoft Press. Выполнение и автоматизация задач администрирования фермы с помощью оболочки Windows PowerShell
Чтобы открыть командную консоль SharePoint 2010, в меню "Пуск" последовательно выберите пункты "Программы > Продукты Microsoft SharePoint 2010 > Командная консоль SharePoint 2010", как показано на рис. 5-2.
Рис. 5-2. Доступ к командной консоли SharePoint 2010
Командная консоль SharePoint 2010 поддерживает настройку и отличается от открывающейся по умолчанию консоли Windows PowerShell, ярлык для которой обычно располагается в панели задач. В свойствах ярлыка командной консоли SharePoint 2010 можно увидеть команду, которая выполняется при его запуске.
C:\Windows\System32\WindowsPowerShell\v1.0\PowerShell.exe -NoExit " & ' C:\Program Files\Common Files\Microsoft Shared\Web Server Extensions\14\CONFIG\POWERSHELL\Registration\\sharepoint.ps1 ' "Этот ярлык ссылается на файл Sharepoint.ps1, в котором содержится пример профиля Windows PowerShell, аналогичного любому другому скрипту Windows PowerShell. В этом файле хранятся часто используемые элементы, которые должны автоматически загружаться при запуске сеанса Windows PowerShell. В связи с этим профили, как и любые другие файлы скриптов, могут содержать функции, псевдонимы и переменные, а также реализовывать загрузку любых необходимых расширений, оснасток или модулей Windows PowerShell. Оснастка Windows PowerShell (PSSnapin) — это программа .NET, которая скомпилирована в DLL-файлы и содержит новые командлеты, функции или поставщики. В комплект поставки Windows PowerShell входит несколько оснасток, в том числе Microsoft.PowerShell.Core, Microsoft.PowerShell.Host и Microsoft.PowerShell.WSMan.Management, а также модули, такие как ActiveDirectory, FailoverClusters и WebAdministration. По мере установки на компьютер других продуктов становятся доступны другие дополнительные расширения.
Основная задача файла профиля SharePoint заключается в загрузке оболочки Windows PowerShell для оснастки SharePoint, что позволяет использовать новые командлеты для SharePoint. Помимо сигнатуры, в файле профиля SharePoint содержится следующий код.
$ver = $host | select version if ($ver.Version.Major -gt 1) {$Host.Runspace.ThreadOptions = "ReuseThread"} Add-PsSnapin Microsoft.SharePoint.PowerShell Set-location $homeВ этом коде получается версия Windows PowerShell и проверяется, превышает ли номер версии значение 1. Затем, если это значение больше 1, загружается потоковая модель, позволяющая повторно использовать первый поток. После этого загружается оснастка SharePoint PowerShell, а каталог изменяется на домашнюю папку (например, C:\users\<идентификатор_пользователя>), где параметр идентификатор_пользователя определяет пользователя, выполнившего вход в систему. Дополнительные сведения о SharePoint, Windows PowerShell и потоковой модели см. в боковом примечании, посвященном рекомендациям по использованию памяти при работе с Windows PowerShell, в этой главе.
В командную консоль SharePoint 2010 загружается не только оснастка SharePoint PowerShell. Это позволяет использовать не только командлеты SharePoint, но и другие командлеты из загружаемых оснасток. Чтобы просмотреть список оснасток в порядке их загрузки, введите Get-PSSnapin. Выходные данные этой команды должны выглядеть приблизительно следующим образом.
Name : Microsoft.PowerShell.Diagnostics PSVersion : 2.0 Description : This Windows PowerShell snap-in contains Windows Eventing and Performance Counter cmdlets. Name : Microsoft.WSMan.Management PSVersion : 2.0 Description : This Windows PowerShell snap-in contains cmdlets (such as Get-WSManInstance and Set-WSManInstance) that are used by the Windows PowerShell host to manage WSMan otechnet.microsoft.com
Windows Power Shell. Первое знакомство.
Немалая часть задач, связанных с обслуживанием локальных вычислительных сетей, представляет собой выполнение рутинных операций, ручная реализация которых может потребовать значительного времени. Вероятно, решения, позволяющие автоматизировать выполнение административных задач, которые могли бы повысить производительность, возникли почти сразу же с появлением профессии системного администратора.Наиболее распространенным средством «экономии времени и избавления от головной боли» стала запись и последовательное пакетное исполнение необходимых операций - исполнение сценариев или скриптов в интерпретаторе команд операционной системы.
Попытки улучшить состояние дел в области управления и администрирования Windows с помощью командного интерфейса привели не к адаптации чужеродного для системы языка сценариев или созданию супер-утилиты, работающей в DOS, а к появлению PowerShell – новой командной оболочки.
В составе MS-DOS и Windows 9x таким интерпретатором, позволяющим выполнять обработку пакетных файлов (bat-файлов), являлся command.com, впоследствии (начиная с выхода Windows NT) замененный cmd.exe. Позднее появился Windows Script Host.
Windows Script Host (WSH; первоначально назывался Windows Scripting Host) – один из элементов Microsoft Windows, как часть операционной системы он начал поставляться, начиная с Windows 98. Позволяет запускать сценарии, написанные с помощью скриптовых языков VBScript/JScript и, как дополнение, некоторых других. Сценарии, исполняемые в WSH, предоставляют гораздо больше возможностей, чем использование командных (bat- и cmd-) файлов. Исполнение возможно в графической среде (wscript.exe) или в консоли (cscript.exe).Тем не менее, процесс написания и выполнения сценариев в ОС Windows не развит так хорошо, как, например, в UNIX-системах. Одна из причин этого – сам графический интерфейс ОС Windows, видимо и сделавший ее столь популярной среди обычных, не корпоративных пользователей. Возможность управления некоторыми элементами среды Windows с помощью графического интерфейса не всегда можно реализовать с помощью системных утилит, выполняемых в командной строке. С другой стороны, возможности каких-то системных программ, поставляемых в составе Windows, не всегда представлены в GUI. К тому же интерпретаторы в Windows имеют довольно ограниченный набор команд, «зашитых» в саму оболочку. Windows Script Host не интегрирован с командной строкой и сам по себе представляет потенциальную опасность – его использует достаточно большое количество вредоносных программ.
Попытки улучшить состояние дел в области управления и администрирования Windows с помощью командного интерфейса привели не к адаптации чужеродного для системы языка сценариев или созданию супер-утилиты, работающей в DOS, а к появлению Windows PowerShell – новой командной оболочки. По некоторым данным, ее появление связано с использованием платформы .NET при создании командного интерфейса для WMI. В данный момент PowerShell является отдельным приложением, который можно установить на любую систему, использующую платформу .Net 2.0 (Windows XP, Vista, Server 2003). Начиная с Server 2008, PowerShell будет являться встроенным компонентом Windows-систем. Если же у вас не Server 2008, для знакомства с PowerShell предварительно необходимо будет его загрузить (возможно, вам понадобится и установка .NET).ЗнакомствоЗапустив PowerShell, вы не обнаружите поначалу никаких различий между ним и cmd.exe (разве что цвет фона окна у PowerShell по умолчанию - синий). Более того, вскоре вы обнаружите, что операции копирования/вставки в PowerShell реализованы также безобразно, как и в cmd.exe. Но первое впечатление о схожести этих оболочек, скажем так, не совсем соответствует действительности.
То обстоятельство, что работа оболочки PowerShell основана на .NET Framework, является главным ее отличием от предыдущих командных оболочек Windows. PowerShell полностью объектно-ориентирована. Результатом выполнения команды в PowerShell является не некий «текст сам по себе», а объект платформы .NET. Этот объект представляет собой собственно данные и имеет набор присущих ему свойств и методов.
Внутренние команды (точнее, командные структуры) для работы с объектами в PowerShell называются командлетами. Для них придумано специальное единообразное именование в виде комбинации действие-цель. Например, для получения данных используется действие “set”, для получения – “get”, для вывода - “out” и т. д. Цель – это тип объекта, к которому будет применено действие. Командлеты можно рассматривать как мини-программы, исполняемые в среде PowerShell. Для повышения функциональности можно создавать собственные командлеты или устанавливать командлеты сторонних разработчиков. Кроме командлетов, PowerShell позволяет выполнять функции, внешние сценарии (хранятся в файлах с расширением ps1) и внешние исполняемые файлы.
В состав PowerShell включена довольно обширная справочная система. Для начала работы с ней можно выполнить команду Get-Help.
Увеличить изображениеДля получения детальной справки по какому-либо командлету или разделу основных сведений, необходимо указать его название в качестве параметра команды.
ПараметрыСтрого говоря, следуя духу единообразного именования в PowerShell, все передаваемые командлету имена параметров должны следовать за символом «-». Однако для простоты написания названия некоторых параметров можно опускать. Например, для вызова справки по командлету Get-Content вместо полного указания
PowerShell:
Get-Help –name Get-Content можно ввести командуПараметр может иметь какое-либо значение (в только что приведенном примере значением параметра name являлось Get-Content) или не иметь его. В этом случае он является аналогом переключателя какой-либо функциональности команды. Например, если необходимо получить полную информацию о командлете Get-Content, введитеPowerShell:
Get-Help Get-Content –Detailed Конвейер В PowerShell реализован механизм передачи данных от одного процесса другому или вывод их в файл. Поскольку, как отмечалось выше, PowerShell оперирует не текстом, а объектами, при перенаправлении элементом обмена информации является объект, вместе со своей структурой. Такая возможность позволяет оперировать с объектами - отбирать их по заданному фильтру, сортировать, группировать их и т. д. Для организации такого конвейера (в документации на английском языке используется термин pipeline - трубопровод или канал) в тексте сценария используется знак вертикальной черты. При обнаружении такого знака интерпретатор передает объекты от одного командлета другому в качестве входных параметров.В качестве примера конвейера и возможности получать доступ к свойствам передаваемых по нему объектов, приведем следующую ситуацию. Для проверки, не выполняются ли на компьютере некие подозрительные программы, мы хотим получить список всех запущенных процессов, получить пути и названия файлов, их запускающих, а также посмотреть дату создания таких файлов. В дополнение, отсортируем такой список по дате создания в убывающем порядке и отберем 10 наиболее "свежих" из них. Добавим к выводной информации также время последней модификации файла. Процессы с именами "System" и "Idle" из рассмотрения исключим, так как они не содержат пути к файлам.
Как говорится, хорошо сформулированный вопрос - уже половина решения. Взгляните:
PowerShell:
Get-Process | where-Object {"System", "Idle" -notContains $_.Name} | Get-Item | Sort CreationTime -desc | Select Directory, Name, CreationTime, LastWriteTime -first 10 Вводя код, вы всегда можете разбить строку, поставив в месте переноса знак «`» после пробела. Можно даже просто нажать клавишу Enter, не закончив строки. В этом случае PowerShell изменит приглашение на >>, давая пользователю понять, что интерпретатор считает код не завершенным и ожидает окончания его ввода.Как и множество других скриптовых языков, PowerShell позволяет использовать переменные. Обозначением переменной служит знак "$". В случае передачи объекта по конвейеру, переменная $_ указывает на сам передаваемый объект.
Рассмотрим действия кода "по шагам". Сначала мы получаем список процессов с помощью командлета Get-Process. Эти данные передаются по конвейеру далее и фильтруются по условиям, заданным в where-Object (мы откидываем процессы с именами "System" и "Idle").
Следующий элемент конвейера - Get-Item возвращает атрибуты отобранных объектов. Осталось их отсортировать (время создания в убывающем порядке) и выбрать интересующие нас значения (имена папки и исполняемого файла, время создания и последней модификации файла). Последний параметр, -first 10 указывает, что выводиться будут лишь первые 10 элементов из списка объектов. Попробуем выполнить в среде Server 2008:
Увеличить изображениеЗамечательно, то что надо. Однако при попытке выполнить тот же код в среде Windows XP или Server 2003 обнаружилось, что там это выглядит не столь гладко:
Увеличить изображениеПри просмотре результатов выполнения
PowerShell:
Get-Process | Select Path выяснилось, что пути двух процессов - winlogon и csrss - в Windows XP и Server 2003 PowerShell интерпретирует как \??\C:\WINDOWS\system32\. За разъяснением такого поведения я обратился к Василию Гусеву, специалисту по PowerShell. Он пояснил, что эти процессы не используют Win32API, и столь разная реакция на них в XP/Vista со стороны .NET, вероятно, вызвана различием платформ этих операционных систем.Решив, что использовать механизмы обработки ошибок (в части обхода "непонятного" пути с подавлением вывода сообщения об ошибке) или исключения из списка процессов winlogon и csrss в данном случае не годится (возможно, они инфицированы, а дату их модификации в результатах мы уже не увидим), команды были изменены следующим образом:
PowerShell:
Get-Process | ForEach-Object { if ($_.Path -ne $NULL ) { Get-Item ($_.Path -replace "\\\?\?\\", "") } } | Sort CreationTime -desc | Select FullName, Name, CreationTime, LastWriteTime -first 10 А читатель может получить некоторое представление об использовании в PowerShell условий и регулярных выражений.Небольшие пояснения к коду.
- На втором этапе конвейера применен командлет ForEach-Object, позволяющий выполнить заданную операцию для каждого объекта из набора, передаваемого на его вход.
- Как указывалось выше, текущий объект, над которым выполняется операция, представлен переменной $_.
- В качестве заданной операции здесь выступает условие вида if (условие){исполняемый код, если условие истинно}.
- Так же, как и в cmd.exe, для операторов сравнения используются не символы вида < или >, а аббревиатуры - в данном случае это "не равно"(not equal): -ne.
- Итак, если путь процесса содержит какое-либо значение (в случае с "System" и "Idle" путь просто отсутствует), с помощью функции replace все символы "\??\" в пути будут удалены (пожалуй, более детально затрагивать вопрос регулярных выражений мы пока не будем),
- а командлет Get-Item предоставит доступ к свойствам текущего процесса.
PowerShell:
Get-Process | Get-Member | Out-Host -Paging По заполнении страницы, пользователь может выбрать один из вариантов - вывести еще одну страницу, вывести еще одну строку или прекратить вывод данных.Фильтрация данных выполняется при помощи параметра MemberType, определяющего, сведения какого рода должны быть выведены. Например, команда
PowerShell:
Get-Process | Get-Member -MemberType Properties выведет лишь свойства объекта, аPowerShell:
Get-Process | Get-Member -MemberType Methods - лишь его методы. Еще один способ посмотреть свойства объекта - присвоить переменной объект, затем набрать в консоли имя переменной, поставить точку и нажать клавишу Tab. С каждым нажатием клавиши PowerShell будет перебирать и подставлять методы и свойства объекта. Перебор в обратную сторону возможен с помощью сочетания клавиш Shift+Tab.БезопасностьКак уже отмечалось, использование сценариев VBScript/JScript представляет потенциальную опасность для системы - для их исполнения достаточно щелкнуть по значку мышью. Опасность еще более возрастает, если пользователь вошел под учетной записью, входящей в группу администраторов. В PowerShell скрипт с расширением ps1 невозможно запустить на исполнение с помощью мыши - в системе такой файл будет открыт не в командной оболочке, а в Блокноте. Для запуска сценария необходимо запустить саму оболочку PowerShell, ввести имя файла и нажать клавишу Enter.
В новой оболочке так же невозможна подмена команд. Суть этого приема, применяемого злоумышленниками, заключается в следующем. Обычно у пользователя, не имеющего прав администратора, есть некоторые папки с разрешениями на запись и выполнение файлов. Характерный пример - папка C:\Documents and Settings\имя_пользователя. Вредоносная программа создает в такой папке исполняемый файл с именем, совпадающим с именем команды оболочки или именем исполняемой системной программы. К примеру, я создал в "своей" папке документов ipconfig.vbs, выводящий простое сообщение. Теперь, если, запустив cmd.exe, и находясь в своей папке, я попытаюсь выполнить команду Windows ipconfig, то получу вот такой результат:
Увеличить изображениеДля полноты иллюстрации можно поместить в папку с документами и исполняемый файл, переименованный в нашем случае в ipconfig.exe. Тогда даже при вызове с указанием расширения будет запускаться файл из текущей папки, а не из \system32. С PowerShell такой фокус не пройдет - для вызова скрипта, путь к которому не совпадает с путями, заданными в системной переменной %Path, необходимо явно указать его расположение. Даже в том случае, когда скрипт расположен в папке, являющейся для оболочки текущей, необходимо указать путь в таком виде: .\имя_файла. Точка с обратным слешем указывают интерпретатору на текущую папку.
Еще одним механизмом обеспечения безопасности является политика выполнения сценариев. Изначально оболочка настроена так, что даже при правильном вызове сценария его выполнение будет запрещено, а пользователь получит соответствующее сообщение. Политика выполнения может переключаться в один из четырех режимов:
- Restricted - настройка по умолчанию, запуск любых сценариев запрещен
- AllSigned - разрешен запуск сценариев, имеющих цифровую подпись надежного издателя; сценарии, созданные пользователем, также должны быть заверены центром сертификации
- RemoteSigned - разрешен запуск сценариев, если они не являются доверенными, но созданы локальным пользователем; сценарии, загруженные из Интернета, не имеющие подписи, не исполняются
- Unrestricted - разрешен запуск любых сценариев
Приведу, пожалуй, наиболее яркий и забавный пример использования этих параметров. Если пользователь попытается выполнить команду
PowerShell:
Get-Process | Stop-Process то через несколько секунд его будет ждать синий экран со STOP-ом. PowerShell, как и следует из текста команды, последовательно начнет "прибивать" все запущенные в системе процессы, что и приведет к ее критическому останову. Если же запуститьPowerShell:
Get-Process | Stop-Process -whatif ничего страшного не произойдет - просто PowerShell покажет, что бы он сделал, если бы команда выполнялась без ключа -whatif: Увеличить изображениеПсевдонимыОболочка имеет встроенный механизм псевдонимов команд. С одной стороны, псевдонимы используются для упрощения ввода команд. Как правило, в этом случае в качестве псевдонима используется сокращенное наименование командлета (например, gc для Get-Content или fl для Format-List). С другой стороны, этот механизм обеспечивает совместимость интерфейсов различных командных интерпретаторов. К примеру, имея опыт работы с cmd.exe, вы привыкли выводить содержимое папки с помощью команды dir. Выполнение этой команды в PowerShell приведет к тому же результату, хотя на самом деле оболочка вместо псевдонима dir будет выполнять командлет Get-ChildItem. Список всех доступных псевдонимов можно получить с помощью команды Get-Alias. Пользователь может создавать собственные псевдонимы, используя команду Set-Alias.
Диски PowerShellТак же, как Windows оперирует с данными, используя файловую систему, оболочка PowerShell работает с хранилищами данных, представленных в виде дисков. Физические диски системы являются не единственным встроенным в оболочку видом хранилищ, с которыми обеспечивается взаимодействие. Пользователь может работать с реестром, встроенными переменными и переменными среды, хранилищами сертификатов точно так же, как и с обычными дисками, папками и файлами. Реализация такого взаимодействия и обеспечение абстракций, позволяющих пользователю применять одинаковые команды и методы к различным хранилищам данных, выполняется провайдерами - программами .NET.
Список провайдеров, доступных в данный момент оболочке, можно получить командой Get-PSProvider. Изначально в PowerShell присутствуют следующие "диски" - псевдонимы (Alias), переменные среды (Env), физические диски системы (C, D, и т. д.), функции, системный реестр, внутренние переменные (Variable) и хранилище сертификатов.
Вот пример чтения содержимого ветки реестра HKLM\Software\Microsoft
Увеличить изображениеКак видно, использованы те же команды, что для получения сведений о файловой системе. Но структура получаемых данных, естественно, различна. Кроме названия и свойств для каждого элемента выводится номер подраздела (SKC) и номер записи (VC). С помощью PowerShell пользователь может просматривать сведения о реестре, добавлять, удалять и модифицировать ключи. Позволю привести себе что-то вроде шпаргалки по работе с элементами реестра:
Увеличить изображениеИ код для примера выполнения различных манипуляций с ключами реестра и их параметрами:
PowerShell:
# Создаем новый подраздел с именем valks в ветке HKEY_CURRENT_USER\Software New-Item -path HKCU:\Software\valks # Добавляем в созданный раздел новый строковый параметр с именем Param1 и значением StringValue New-ItemProperty -path HKCU:\Software\valks -name Param1 -propertyType String -value StringValue # Создадим подраздел SubFolder New-Item -path HKCU:\Software\valks\SubFolder # Добавляем еще один параметр - Param2 типа DWord и значением 12 New-ItemProperty -path HKCU:\Software\valks -name Param2 -propertyType DWord -value 12 # Получаем список всех параметров Get-ItemProperty HKCU:\Software\valks # Получаем значение параметра Param2 Get-ItemProperty HKCU:\Software\valks | Format-list Param2 # Или можем считать раздел в переменную $key $key = Get-ItemProperty HKCU:\Software\valks # И вывести значение нужного параметра Write-Host "Значение параметра Param2: " $key.Param2 # Изменим значение параметра Param2 на 193 Set-ItemProperty HKCU:\Software\valks -name Param2 -value 193 # Изменим название параметра Param1 на Параметр1 Rename-ItemProperty -path HKCU:\Software\valks -name Param1 -newname Параметр1 # Удаляем Параметр1 Remove-ItemProperty HKCU:\Software\valks -name Параметр1 # Удаляем весь подраздел valks Remove-Item HKCU:\Software\valks Вот еще небольшой пример в виде функции, которая осуществляет поиск программ, автоматически загружающихся при старте системы. Область поиска определяется массивом, включающим в себя некоторые известные точки автозапуска в реестре. Код содержит комментарии, надеюсь, они пояснят суть работы.PowerShell:
function GetAutoexec ($hives) { # Если функции не передается входной массив ключей реестра, # используем этот: $hives = "HKCU:\Software\Microsoft\Windows\CurrentVersion\Run", ` "HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Run", ` "HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\policies\Explorer\Run" # Выодим заголовок и переносим строку Write-Host "Список автозагрузки`n" # Начинаем перебирать элементы массива - ветви реестра Foreach ($hive in $hives){ # Выводим название ветви зеленым цветом Write-Host "Ветвь $hive" -ForegroundColor Green # Проверяем, существует ли ветвь в реестре if (Test-Path $hive){ # Получаем очередной ключ реестра [Microsoft.Win32.RegistryKey]$param = Get-Item $hive # для каждого ключа... foreach ($p in $param){ # ...получаем список его параметров foreach ($key in $p.getvalueNames()){ # выводим название параметра и его значение "Загрузка $key из " + $p.GetValue($key) } } } # переносим строку Write-Host "`n" } } # осуществляем вызов самой функции GetAutoexec Пользователь может создавать собственные диски, используя существующие провайдеры. Вот пример создания диска PowerShell с именем Win, содержимое которого будет являться корневой папкой C:\Windows:PowerShell:
New-PSDrive -Name Win –PSProvider FileSystem -Root "C:\Windows" После создания диска PowerShell к нему можно обращаться точно так же , как к обычному диску системы. Увеличить изображениеОднако необходимо знать, что по завершении сеанса работы с PowerShell он будет автоматически удален. Так же, как и псевдонимы, функции и переменные, созданные пользователем в течение сеанса. Для того, чтобы сохранить перечисленные изменения, необходимо создать профиль PowerShell.
Профили PowerShellПрофиль - это файл с расширением ps1. Фактически, это тот же скрипт, выполняемый оболочкой при ее запуске. Профили в оболочке не создаются автоматически - они должны быть созданы пользователем самостоятельно. Созданные профили будут загружаться при каждом запуске PowerShell, если политикой выполнения разрешено загружать конфигурационные файлы. Возможна обработка до четырех различных профилей. Расположение файлов в порядке последовательности их загрузки:
- %windir%\system32\WindowsPowerShell\v1.0\profile.ps1 - профиль, применяемый ко всем пользователям и оболочкам
- %windir%\system32\WindowsPowerShell\v1.0\ Microsoft.PowerShell_profile.ps1 - профиль, применяемый ко всем пользователям только оболочки PowerShell
- %UserProfile%\My Documents\WindowsPowerShell\profile.ps1 - применяется для текущего пользователя во всех оболочках
- %UserProfile%\My Documents\WindowsPowerShell\Microsoft.PowerShell_profile.ps1 - применяется для текущего пользователя только в оболочке PowerShell
PowerShell:
New-Item -Path $profile -ItemType file -force После создания его можно открыть любым текстовым редактором, например Блокнотом:и сделать в нем необходимые изменения. Не забудьте проверить, разрешен ли политикой выполнения запуск скриптов.Работа с объектами WMIWMI (Windows Management Interface, интерфейс управления Windows) — набор интерфейсов для управления ОС Windows с помощью специальных компонентов. Возможно управление локальным компьютером, и находящимся в сети. WMI - разновидность Web-Based Enterprise Management (WBEM) и Common Information Model (CIM), разработанная Microsoft. Входит в состав Windows Vista, Windows Server 2003, Windows XP, Windows Me и Windows 2000. Для Windows 95 и Windows 98 доступна в виде отдельно устанавливаемого компонента. Поддерживает использование скриптовых языков, таких как VBScript или Windows PowerShell для управления персональными компьютерами и серверами, работающими под управлением Microsoft Windows.Объекты WMI являются для PowerShell вполне "родными". Достаточно выполнить команду
чтобы увидеть большое количество классов, обеспечивающих доступ к объектам WMI в оболочке. В случае подключения к WMI на удаленном компьютере, состав классов будет зависеть от ОС и установленных на нем расширений WMI. Для получения сведений о доступных классах на удаленной машине, необходимо указать его IP-адрес или имя в качестве параметра:PowerShell:
Get-WmiObject -List -ComputerName Server Для успешного подключения на удаленном компьютере должен быть запущен интерфейс WMI, а используемая учетная запись должна входить в группу локальных администраторов.Если не использовать специальное указание, некоторые сведения не выводятся, видимо из соображений "не захламлять экран". Для получения более детальной информации можно воспользоваться командами форматирования и отбора данных.
PowerShell:
PS C:\Documents and Settings\Администратор> Get-WmiObject -Class Win32_OperatingSystem SystemDirectory : C:\WINDOWS\system32 Organization : Nrest BuildNumber : 3790 RegisteredUser : Сергей SerialNumber : 69889-650-3137304-45684 Version : 5.2.3790PowerShell:
PS C:\Documents and Settings\Администратор> Get-WmiObject -Class Win32_OperatingSystem | Format-List Locale, Version, CurrentTimeZone, OSLanguage, InstallDate Locale : 0419 Version : 5.2.3790 CurrentTimeZone : 180 OSLanguage : 1049 InstallDate : 20081022233211.000000+240 А вот небольшой пример опроса всех компьютеров в локальной сети с адресом 192.168.1.0 и маской подсети 255.255.255.0:PowerShell:
1..254| ForEach-Object -Process { Get-WmiObject -Class Win32_PingStatus -Filter ("Address='192.168.1." + $_ + "'") -ComputerName . } | Select-Object -Property Address,ResponseTime,StatusCode В первом элементе конвейера генерируется массив чисел от 1 до 254. На втором этапе каждое число из массива подставляется в IP-адрес, который будет пинговаться при помощи средств WMI. Результаты будут выводиться в таблицу с тремя столбцами - адрес хоста, время отклика и статус ответа. В случае ответа хоста возвращается статус с кодом "0".Работа с COM-объектамиПлатформа .NET имеет встроенные средства, позволяющие ей работать с COM-компонентами. Эта возможность позволяет управлять работой различных приложений, поддерживающих COM. В качестве примера покажем функцию для автоматизации работы с Internet Explorer. Мы откроем IE и перейдем по адресу WindowsFAQ.ru. Если в качестве параметра функции будет передана строка, будем искать ее с помощью поискового механизма самого сайта, если параметр будет отсутствовать - будем искать слово windows. Вот код с комментариями:
PowerShell:
# Объявляем функцию, устанавливаем параметр по умолчанию - windows function WinfaqSearch ([string]$str = "windows") { # Создаем COM-объект - Internet Explorer $ie = New-Object -Comobject InternetExplorer.application # Указываем браузеру адрес перехода $ie.Navigate("http://windowsfaq.ru") # Делаем запущенный экземпляр IE видимым $ie.Visible = $True # На всякий случай, ждем загрузки страницы 5 секунд Start-Sleep 5 # Получаем текст веб-страницы $doc=$ie.document # Ищем поле ввода формы поиска на странице $text = $doc.getElementById("mod_search_searchword") # Вводим в него нужное значение $text.value = $str # Получаем саму форму, отвечающую за поиск $forms = @($ie.Document.forms | where {$_.action -match "index.php\?option=com_search&Itemid=5"}) # Отправляем в нее запрос $forms[0].Submit() # Спрашиваем, надо ли закрыть экземпляр IE if (($resp = Read-Host "Закрыть Internet Explorer ? [Y]Да/[N]Нет") -eq "y"){ if ( $ie.Visible -eq $true ){ $ie.Quit() } Remove-Variable ie } } Заключение Конечно, в одной статье невозможно описать все возможности PowerShell. К тому же Microsoft продолжает работу над его улучшением - вторая версия должна поддерживать управление удаленными компьютерами непосредственно самой оболочкой. Ожидаются и другие нововведения. Учитывая, что PowerShell будет являться компонентом новых ОС, не приходится сомневаться в том, что сфера его применения в продуктах Microsoft будет только расширяться.Автор выражает признательность Василию Гусеву за помощь, оказанную при подготовке статьи.
Источник
safezone.cc