Выбор читателей
Популярные статьи
Существуют вещи, которые мы выполняем каждый день, будучи администраторами сети Windows, но если бы нас попросили сделать их с помощью командной строки, в отличие от администраторов Linux, для нас, администраторов Windows, это было бы весьма проблематично. Windows всегда был слаб, когда речь шла об инструментах командной строки. На мой взгляд, все изменилось с появлением Windows Powershell. С помощью Powershell (или по-другому PS) можно выполнить столько различных функций, которые мы не могли выполнять ранее. В этой статье мы сконцентрируемся на том, как 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 адресов на вашем сервере 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
Рисунок 3: Перечисление IP адреса ТОЛЬКО с Windows 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
Хотя командная строка 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
Буду с вами откровенен. Использование команд 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"s Temp Folder"))
С другой стороны, вы могли просто использовать уже проверенную и опробованную команду net share :
Net share davidtemp=C:\temp /remark:"David"s Temp Shared Folder"
Рисунок 6: PowerShell данные и традиционная команда net share
Обратите внимание на то, что команда 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. Как вы видите, можно направлять и перенаправлять вводимые и выводимые данные в различных направлениях при достижении ваших задач администрирования.
Windows Powershell – это очень мощная утилита. В этой статье невозможно описать всего того, что вы сможете сделать с помощью Powershell, но надеюсь, что мне удалось дать вам общую картину возможностей этой утилиты и вдохновить вас на последующие изыскания в этой области. С каждым днем появляются новые книги, курсы и уйма материала в Интернете о функциях Powershell, которые могут использоваться системными администраторами Windows. Учитывая столь сильную привязанность администраторов Windows к графическому интерфейсу, потребуется время на то, чтобы Powershell была принята в тех компаниях, в которых не испытывают острой необходимости в этом инструменте. Я уверен, что администраторы будут использовать Powershell для создания более коротких сценариев, с помощью которых можно будет выполнять более сложные задачи. Надеюсь, что Powershell будет обретать все большую популярность по всему миру!
Особая благодарность компании Microsoft за предоставление примеров команд в документации руководства пользователя Windows Powershell.
Наверное, все слышали о PowerShell, но наверняка не всем довелось с ним работать. Для тех, кто только начинает прокладывать свой путь в дебри PowerShell, мы приводим перевод поста, вышедшего на портале 4sysops.com . В нем рассказано о 7 командах, которые помогут тем, кто только начал работать с PowerShell. За подробностями – добро пожаловать под кат.
Вы можете выбрать любой командлет из списка, выведенного по запросу выше, чтобы получить справку о нем. Например,
PS C:\> Get-Help -Name Get-Service
Вы получаете всю информацию о командлете Get-Service (будет рассмотрен ниже).
Необходимо больше информации о командлете? Воспользуйтесь Get-Help:
PS C:\> Get-Help Get-Content -Detailed
Запуск/остановка службы на удаленном компьютере (spooler):
PS C:\> $ServiceObj = Get-Service -ComputerName MyPC1 -Name spooler
PS C:\> Stop-Service -InputObj $ServiceObj
PS C:\> Start-Service -InputObj $ServiceObj
PS C:\> Get-Process
Введите следующий командлет для получения подробной информации о запущенных процессах
PS C:\> Get-Process | Format-List * -Force
Получение информации о процессах, запущенных на удаленном компьютере
:
PS C:\> Get-Process -ComputerName MYPC1 | Format-List * -Force
MYPC1 необходимо заменить на имя того компьютера, с которого вы хотите получить информацию о запущенных процессах.
Совет
: Хотя у командлета Stop-Process отсутствует параметр -ComputerName, Вы все равно можете использовать его для завершения удаленных процессов, используя предложенный ниже совет:
PS C:\> $Obj = Get-Process -Name excel -ComputerName MYPC1
PS C:\> Stop-Process -InputObject $Obj
Upd:
В посте приведен перевод статьи с портала
Наш обзор посвящен использованию ключевых возможностей Windows PowerShell для выполнения различных административных задач. Сначала рассмотрим встроенные средства ознакомления с возможностями Windows PowerShell.
Итак, вы - администратор, которому необходимо в кратчайший срок освоить Windows PowerShell. Первое, что вы, вероятно, предпримете (естественно, помимо обращения к документации и справочной системе), - воспользуетесь командой Help (рис. 1).
Внимательно изучив выведенную на экран информацию, мы придем к пониманию следующих концептуальных вещей: в Windows PowerShell существуют алиасы, командлеты, провайдеры, а также справочные файлы. Алиасы (alias) служат для упрощения ввода команд (например, clc - это алиас команды Clear-Content ), командлеты (cmdlet) представляют собой реализацию всех встроенных в Windows PowerShell команд, провайдеры (provider) обеспечивают доступ к файловой системе, реестру, хранилищу сертификатов и т.п., а справочные файлы (helpfile) используются для получения дополнительной информации. Для получения подробного описания команды применяется следующий синтаксис:
PS C:> Help Get-Command
В результате выполнения этой команды мы получим полное описание команды Get-Command , включая ее назначение, синтаксис, опции и т.п. (рис. 2).
Для получения списка всех встроенных команд используем следующий синтаксис:
PS C:> Get-Command
Обратите внимание на то, что все команды состоят из глагола и прилагательного (например, Get-Content , Export-Console ) и все команды поддерживают единую систему именования - например для завершения чего-либо всегда используется глагол Stop, а не Kill, Terminate, Halt или другие синонимы, что существенно упрощает изучение возможностей PowerShell (рис. 3).
Команда Get-Service служит для получения списка всех сервисов, запущенных на данном компьютере. Например,
PS C:> Get-Service
возвращает список, представленный на рис. 4.
Для получения списка процессов, запущенных в настоящий момент на компьютере, применяется команда Get-Process (рис. 5):
PS C:> Get-Process
В Windows PowerShell поддерживается автоматическое завершение ввода. Чтобы убедиться в этом, введите Get-P и нажмите клавишу TAB: вы получите возможность выбора всех команд, начинающихся с введенных символов.
Для получения информации только об одном процессе в качестве аргумента команды Get-Process задается имя этого процесса (рис. 6):
PS C:> Get-Process explorer
Для того чтобы получить список всех процессов, названия которых начинаются с определенного символа, достаточно указать этот символ и «*» (рис. 7):
PS C:> Get-Process i*
Обратите внимание на колонки, в которых содержится информация, - Handles, NMP(K) и т.п. По умолчанию информация выводится в виде таблицы, но на самом деле все команды возвращают объекты. Эти объекты могут быть переданы на вход другим командам с помощью символа «|» (рис. 8):
PS C:> Get-Process i* | format-list
Теперь список процессов доступен в другом представлении. Для получения подробной информации о различных форматах можно использовать следующую команду:
PS C:> Help format *
Другие возможные форматы:
PS C:> Get-Process i* | format-wide
PS C:> Get-Process i* | format-custom
Поскольку на выходе всегда получается объект, можно манипулировать им для выполнения дополнительных операций, например фильтрации:
PS C:> Get-Process | where {$_.handlecount -gt 400}
или сортировки:
PS C:> Get-Process | where {$_.handlecount -gt 400} | sort-object Handles
Может возникнуть вполне резонный вопрос: а откуда мы узнали, что у объекта, описывающего процесс, есть свойство handlecount ? Для получения списка всех свойств объекта применяется следующая команда (рис. 9):
PS C:> Get-Process | Get-Member
Выполним команду Get-Process | Get-Member Company - при форматировании по умолчанию невозможно получить желаемые данные. Преобразуем полученную команду в:
PS C:> Get-Process | Get-Member Company | Format-List
Результат ее преобразования представлен на рис. 10.
PS C:> Get-Process | sort-object Company | format-table -Group Company name, description, handles
Результат выполнения данной команды представлен на рис. 11.
Команда stop-process позволяет остановить запущенный процесс, например:
PS C:> Get-process notepad | stop-process
Такая возможность не всегда является безопасной, поэтому лучше использовать подобные команды с опцией whatif , которая показывает, что произойдет при выполнении той или иной команды, но на самом деле команда не выполняется:
PS C:> Get-Process notepad | stop-process –whatif
Кроме того, можно указывать на необходимость подтверждения перед выполнением команды:
PS C:> Get-Process notepad | stop-process –confirm
Результат выполнения команды с подтверждением представлен на рис. 12.
В последнем примере мы получаем описание действий, которые выполняет команда, и можем выбрать, подтверждать ее выполнение или нет.
Помимо этого можно создавать собственные пакетные файлы, представляющие собой файлы с расширением *.ps1, в которые помещаются команды PowerShell, и выполнять их. Для соблюдения безопасности пакетные файлы должны быть подписаны. При тестировании можно отключить требование по запуску только подписанных файлов:
PS C:> Set-ExecutionPolicy Unrestricted
но после окончания тестирования не забудьте снова включить данную опцию с помощью следующей команды:
PS C:> Set-ExecutionPolicy AllSigned
После знакомства с основами Windows PowerShell посмотрим, как с помощью данной утилиты можно решать различные административные задачи.
Одна из задач, с которой часто сталкиваются многие ИT-специалисты, связана с манипуляциями с файлами, такими как копирование, перемещение, переименование, удаление файлов и каталогов. На рис. 13 показаны основные команды Windows PowerShell, применяемые для манипуляций с файловой системой: new-item , copy-item , move-item , rename-item и remove-item .
В отличие от других оболочек, в которых существует и набор команд для файлов (например, delete или rename), и набор для каталогов (например, rd или md), в Windows PowerShell единый набор команд используется для манипуляций как с файлами, так и с каталогами.
Первая команда в нашем примере - new-item TextFiles –itemtype directory - применяется для создания нового подкаталога TextFiles в текущем каталоге. Если опустить параметр –itemtype , то Windows PowerShell спросит, что мы создаем - файл (file) или каталог (directory). Отметим, что у команды new-item есть алиас - ni. В сокращенном виде наша первая команда будет выглядеть так:
PS C:> ni TextFiles –itemtype directory
Затем мы используем команду copy-item (алиасы - cpi, cp, copy ) для копирования всех файлов с расширением *.txt в подкаталог TextFiles. Если применять данную команду в пакетном файле, имеет смысл сделать ее более понятной, указав параметры –path (источник) и –destination (приемник):
PS C:>copy-item –path ‘.\*.txt’ –destination ‘.\TextFiles’
После выполнения команды копирования мы используем команду set-location для перехода в подкаталог TextFiles. С помощью команды rename-item переименовываем файл psdemo.txt в psdemo.bak. При необходимости можно применять опции –path и –newName . После того как файл переименован, переносим его на один уровень вверх, используя команду move-item . Затем применяем команду set-location , а точнее - ее алиас sl для перехода в другой каталог. Манипуляции с файловой системой мы завершаем удалением всего каталога TextFiles, используя команду remove-item . Поскольку в каталоге TextFiles содержатся файлы, применяется опция –recurse . Если эта опция не указана, Windows PowerShell запросит подтверждение перед выполнением команды remove-item .
При выполнении различных настроек и попытках обнаружения каких-либо параметров нам иногда приходится обращаться к системному реестру в поисках ключей, значений и т.п. С использованием возможностей Windows PowerShell эта задача может быть решена достаточно простым способом. Возможности Windows PowerShell показаны на рис. 14.
Наша первая команда использует алиасsl для выполнения команды set-location , изменяющей наше текущее местоположение с файловой системы на ветвь HKEY_CURRENT_USER в системном реестре:
PS C:\> sl hkcu:
Отметим, что, как и в случае работы с файловой системой, PowerShell применяет специальный провайдер для доступа к реестру.
Аналогами приведенной выше команды являются команды:
PS C:\> sl registry:hkcu
PS C:\> sl hkey_current_user
Следующая команда загружает содержимое всей ветви реестра HKEY_CURRENT_USER в переменную reg:
PS HKCU:\> $reg = gci . –rec –ea silentlycontinue
Для этого мы используем команду get-childitem (алиас - gci ), принцип работы которой аналогичен работе с файловой системой. Первый аргумент этой команды - «.» - указывает на то, что мы хотим получить содержимое текущей ветви реестра - HKEY_CURRENT_USER. Второй аргумент является сокращением от опции –recurse и указывает на то, что нам нужен рекурсивный сбор данных из всех подветвей текущей ветви реестра. И наконец, третий аргумент - –ea silentlycontinue - указывает на то, что команда должна продолжать выполняться даже в случае возникновения ошибок, связанных с недостатком прав доступа к определенным подветвям реестра.
Следующая команда в нашем примере:
PS HKCU:\>$s = $reg | % {if (gp $_.pspath) –match ‘PowerShell’){$_.pspath}}
копирует из реестра данные, содержащие строку ‘PowerShell’ . Мы начинаем с того, что берем объект reg и перенаправляем его в команду % , которая является алиасом команды for-each . Она выполняет рекурсивный обход всех элементов реестра, находящихся в объекте reg и на каждом шаге сохраняет элемент в специальном объекте PowerShell с именем ‘_’ . В фигурных скобках мы указываем действия, которые должны выполняться на каждом шаге выполнения команды for-each . Внутри блока for-each мы используем проверку if для того, чтобы узнать, соответствуют ли текущая запись реестра и ее свойство pspath, которые мы получаем через обращение к команде get-itemproperty (через алиас gp ), нашему критерию - наличию строки ‘PowerShell’ . Если соответствие найдено, мы возвращаем значение свойства pspath . Все найденные соответствия сохраняются в объекте s .
Работу с реестром мы завершаем перенаправлением результатов поиска в команду select-object (через алиас select ) и показываем два первых найденных результата. В качестве упражнения вы можете перенаправить финальные результаты в файл с помощью команды out-file .
Еще одна задача, с которой могут столкнуться ИТ-специалисты, связана с обнаружением аномалий в работе системы, например процессов, которые потребляют большие объемы памяти. Давайте посмотрим, как эта задача решается средствами Windows PowerShell (рис. 15).
В первой команде мы сохраняем информацию о всех процессах, запущенных на данном компьютере, в переменной $allprocs :
PS C:\> $allprocs = get-process
После этого мы перенаправляем полученную информацию команде for-each , которая тоже может быть указана алиасом % или foreach . Данная команда перебирает все объекты, связанные с процессом, и на каждом шаге сохраняет информацию во внутреннем объекте $_ . Этот объект можно условно назвать текущим объектом. В качестве параметров для команды for-each мы указываем операцию сравнения значения свойства virtualmemorysize с интересующим нас размером памяти (20 Мбайт в нашем примере). Если значение этого свойства для текущего объекта больше заданного, мы выводим название процесса на экран. Отметим, что в PowerShell поддерживаются основные сокращения для указания размеров - KB, MB, GB, что очень полезно, поскольку не нужно считать нули при указании объемов памяти, дисков и т.п.
При попытке обнаружения причин сбоев мы часто обращаемся к системному журналу, в котором хранится множество полезной информации о событиях, происходивших в системе. Обычно для исследования системного журнала применяется утилита Event Viewer (eventvwr.exe). В PowerShell мы можем воспользоваться встроенными командами, например командой get-eventlog , для быстрого исследования содержимого системного журнала (рис. 16).
Наша первая команда загружает ключевую информацию из системного журнала:
PS C:\> get-eventlog –list
Без использования опции –list PowerShell запросит точное указание названия системного журнала. В нашем примере мы видим несколько точек входа в системном журнале: Application, Internet Explorer, System, Windows Power Shell и т.п. Наша следующая команда извлекает записи из системного журнала, которые имеют тип “Error” :
PS C:\> $bad = get-eventlog “System” | where-object { $_.EntryType –eq “Error” }
Мы используем команду get-eventlog , которой указываем параметр “System” для извлечения только системных записей, - мы могли бы более четко задать это, применив параметр logName . Содержимое переменной $bad передается на вход команде where-object для фильтрации только интересующих нас записей. В качестве аргументов команды where-object мы указываем на то, что ищем только записи, у которых свойство EntryType равно “Error” .
Мы завершаем исследование системного журнала выводом на экран пяти последних записей об ошибках, используя для этого команду select-object с параметром –last :
PS C:\> $bad | select-object –last 5
Как мы знаем, Windows Management Instrumentation (WMI) - это реализация компанией Microsoft стандарта Common Information Model (CMI). В большинстве случаев WMI применяется ИT-специалистами для получения информации об аппаратном и программном обеспечении, установленном на данном компьютере. Как мы увидим в следующем примере, использование Windows PowerShell существенно облегчает доступ к информации, хранимой в WMI (рис. 17).
В первой строке мы применяем команду get-wmiobject для получения информации о файле, используемом для свопинга памяти на диск и сохранения этой информации в переменной $pfu :
PS C:\> $pfu = get-wmiobject – class ‘win32_pageFileUsage’
PS C:\> $pfu | get-member –membertype property | where_object { $_.name –nomatch ‘_’ }
Обычно для нахождения информации по определенному классу можно использовать команду get-member без указания параметров, но в нашем примере нас интересуют только доступные свойства и только те из них, которые не содержат в имени символ подчеркивания. У внимательного читателя может возникнуть вопрос: каким образом мы узнали о существовании класса win32_pageFileUsage ? Ведь известно, что в WMI поддерживается более тысячи классов, помимо этого ряд приложений добавляет свои классы. Вы можете применить команду:
PS C:\> get-wmiobject –list
для получения списка всех существующих в системе классов. После того как мы определили доступные нам свойства класса, мы выводим содержимое интересующих нас свойств на экран:
PS C:\> $pfu.caption; $pfu.currentusage
Вторая часть нашего примера посвящена другому классу - win32_DiskDrive , в котором хранится информация о дисках, установленных в системе. Этот класс - пример WMI-класса, содержащего более одного объекта. В нашем примере мы определяем значение свойства caption первого диска, установленного в системе:
PS C:\> $dd.caption
В последнее время XML-файлы все чаще используются для хранения конфигурационной информации. По мере того как данные в XML-файле накапливаются, он становится все менее удобным для прочтения. Далее мы рассмотрим, как применять функции Windows PowerShell для работы с XML-файлами.
Для примера возьмем конфигурационный файл Windows Calendar, который выглядит так (рис. 18):
и выполним над ним манипуляции, представленные на рис. 19.
В первой строке мы загружаем содержимое всего XML-файла в переменную, используя команду get-content :
PS C:\> $doc = get-content ‘.\settings.xml’
Обратим внимание на применение типа данных : если не указать использование данных этого типа, в переменную будет загружен просто текст.
Во второй строке мы выбираем определенную ветвь XML-файла - для этого применяется метод selectnodes объекта, хранящего XML-данные и XPath-описание адреса ветви:
PS C:\> $settings = $doc.selectnode(‘CalendarSettings/X-Root/VCalendar’)
После этого мы используем команду foreach-object для получения значения свойства Name для всех элементов в данной ветви.
Мы рассмотрели основные возможности Windows PowerShell для упрощения задач, возникающих перед ИT-специалистами. Как мы знаем, эти задачи часто решаются с помощью скриптового языка VBScript. В Windows PowerShell есть возможность применения существующего кода на VBScript, а следовательно, миграция значительно упрощена (рис. 20).
В приведенном выше примере показано, как можно использовать существующий код на VBScript в PowerShell. В первой строке мы создаем новый COM-объект, который представляет собой ядро выполнения скриптовых программ - ScriptControl. Затем мы указываем, что будем использовать язык Visual Basic Script. В третьей строке задается собственно код на VBScript - в нашем примере это вызов функции MsgBox, но на практике в переменную можно, например, загрузить код файла. И наконец, в последней строке мы добавляем код на VBScript в наш объект - и код поступает на выполнение.
Блог команды разработчиков продукта: http://blogs.msdn.com/PowerShell/ .
Утилиты, редакторы и дополнения: http://www.powershell.com/ .
Блог Дмитрия Сотникова из компании Quest: http://dmitrysotnikov.wordpress.com/ .
PowerGadgets - пример неограниченных возможностей расширения PowerShell:
1. Написание скрипта
Скрипт PowerShell (не важно какой версии) - это текстовый файл с расширением *.ps1 .
Вот пример простого Power Shell срипта (файл systemInfo.ps1 ):
# Retrieve WMI object for the operating system
Get-WmiObject Win32_OperatingSystem
Этот файл можно создавать и редактировать, например, в FAR Manager.
Обратите внимание , что FAR Manager хоть и может работать в консоли Power Shell, но выполняет из-под себя скрипты в окружении обычной Windows-консоли cmd . То есть, FAR Manager можно использовать только для создания и редактирования PowerShell скриптов, но не для запуска. Но прежде чем разочаровываться, прочитайте пункт 3.
2. Запуск срипта
Скрипт нужно выполнять из консоли Power Shell, а не из обычной консоли Windows. В консоли Power Shell необходимо перейти в каталог, где лежит скрипт (командами cd ), и затем запустить сам скрипт, обязательно прописав перед ним символы ".\" . Например, имеем путь к файлу скрипта d:\work\systemInfo.ps1 . Тогда команды запуска будут выглядеть так:
d:
cd \
cd work
.\systemInfo.ps1
или так (просто указывается полный путь к скрипту):
d:\work\systemInfo.ps1
Скорее всего, при запуске скрипта появится следующая ошибка:
Не удается загрузить файл D:\work\systemInfo.ps1, так как выполнение скриптов запрещено для данной системы. Введите "get-help about_signing" для получения дополнительных сведений.
строка:1 знак: 18
CategoryInfo: NotSpecified: (:) , PSSecurityException
FullyQualifiedErrorId: RuntimeException
Ошибка появляется из-за того, что по-умолчанию в Power Shell включена максимальная политика безопасности, которая позволяет выполнять команды PowerShell в командной строке, но не позволяет в той же командной строке выполнить скрипт с командами PowerShell.
Чтобы резрешить выполнение PowerShell скриптов, нужно создать *.bat файл, например enableScript.bat со следующим содержимым:
powershell -Command Set-ExecutionPolicy RemoteSigned
Этот *.bat файл можно выполнить в любой консоли: хоть в PowerShell, хоть в обычной cmd . После выполнения этого файла, PowerShell-скрипты станут запускаться в консоли PowerShell.
3. Запуск PowerShell-скрипта из обычной Windows-консоли cmd
Скрипт PowerShell можно выполнить и из обычной консоли Windows. Для этого можно воспользоваться командой:
Powershell -File ./systemInfo.ps1
Таким образом можно выполнять скрипты прямо из FAR Manager, и они будут работать.
Но тут есть небольшая тонкость. Параметр -File срабатывает только на локальных путях, даже если путь указан относительный "./" . То есть, если *.ps1 - файл лежит на локальном диске C: или D: , то такой вызов будет работать. Но если попробовать выполнить скрипт, расположенный на доменном ресурсе, то скрипт не будет найден. Возможно, это исправят в следующих версиях PowerShell.
Командлетов в Windows PowerShell много поэтому сегодня я предлагаю рассмотреть небольшой список наиболее полезных и часто используемых командлетов с кратким описанием того, что они умеют. Данный справочник поможет Вам быстрей найти интересующую Вас команду Windows PowerShell и ориентирован он на начинающих системных администраторов.
Примечание! Данный справочник составлен на основе командлетов версии PowerShell 5.0 в операционной системе Windows Server 2016 .
В данном разделе я перечислю командлеты PowerShell, которые Вы точно будете использовать.
В PowerShell для того чтобы создать переменную, задать ей значение или получить это значение обычно используют знак доллар $ (коротко и удобно ), но для этих целей существуют специальные командлеты.
В Windows PowerShell существует набор командлетов, которые предназначены для форматирования вывода результата работы командлета. Они позволяют пользователю отобразить результат в том виде, в котором ему удобно просматривать данный результат.
PowerShell позволяет импортировать и экспортировать данные в разных распространенных форматах, например, CSV или XML, а также перенаправлять вывод результата работы команды во внешний файл или на принтер.
Для администрирования сети в Windows PowerShell существуют такие командлеты как:
В Windows PowerShell есть командлеты, которые умеют работать с элементами, под элементами здесь можно понимать: файлы, папки, ключи реестра и так далее.
Windows PowerShell, конечно же, позволяет работать со службой каталогов Active Directory. Для этих целей существует немало командлетов, вот некоторые из них:
Для работы с Hyper-V в Windows PowerShell существует много командлетов, вот небольшой перечень:
В Windows PowerShell есть возможность запускать задачи в фоновом режиме, для того чтобы, не дожидаясь окончания работы команды (для случаев, когда задача выполняется долго ), продолжать работать в текущей сессии. Для работы с фоновыми заданиями в PowerShell есть следующие командлеты:
Так как PowerShell работает с объектами, он позволяет выполнять некие действия над этими объектами, например:
С помощью Windows PowerShell можно выполнять команды не только на локальном компьютере, но и на одном или даже на нескольких удаленных компьютерах.
PowerShell, конечно же, умеет управлять службами и процессами в Windows, для этого существуют такие командлеты как:
Windows PowerShell позволяет выполнять административные задачи для операционной системы и компьютера в целом, например, перезапустить операционную систему или переименовать компьютер.
Для управления контентом, например, текстом в файле в Windows PowerShell существуют специальные командлеты, такие как:
Также хотелось бы выделить следующие командлеты Windows PowerShell, которые наверняка Вам понадобятся и будут полезны.
Вот мы с Вами и рассмотрели полезные и часто используемые командлеты Windows PowerShell, надеюсь, этот справочник будет Вам полезен, удачи!
Статьи по теме: | |
Почему операционная система не найдена и жесткий диск не загружается
Всегда неприятно, когда при включении компьютера появляется ошибка на... Как удалить все файлы с компьютера?
В связи с различными обстоятельствами – сбоями в работе, при пропаже или... Создание шаблона документа в Microsoft Word
Основу среды Word 2007 Основу среды Word 2007 составляют визуальные... |