Существуют вещи, которые мы выполняем каждый день, будучи
администраторами сети 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
Рисунок 3: Перечисление IP адреса ТОЛЬКО с
Windows Powershell
Получение списка конфигурации сетевого адаптера с помощью
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'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. Как вы видите, можно направлять и
перенаправлять вводимые и выводимые данные в различных
направлениях при достижении ваших задач администрирования.
Что еще нужно знать?
Как я уже говорил, помните, что 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.