задачи powershell для обучения
Руководство по Windows PowerShell для начинающих
Авторизуйтесь
Руководство по Windows PowerShell для начинающих
В этой статье про PowerShell для начинающих мы посмотрим, как писать скрипты, которые помогают оптимизировать управление Windows-окружением.
PowerShell — это объектно-ориентированный программный движок и скриптовый язык с интерфейсом командной строки, предоставляющий широкие возможности для конфигурирования операционных систем семейства MS Windows. Он предлагает как чисто консольный интерфейс, так и полноценную среду разработки PowerShell ISE (Integrated Scripting Environment, встроенное скриптовое окружение) для скриптов.
Для запуска интерфейса командной строки введите powershell в меню «Выполнить» (WinKey + R). PowerShell ISE запускается с помощью команды «PowerShell ISE» в том же меню. ISE более предпочтительно, так как предоставляет более широкие возможности разработчику благодаря подсветке синтаксиса, функции автозаполнения кода и другим особенностям, присущим многим «большим» IDE.
Среда разработки Windows PowerShell ISE
Написание и запуск скриптов
Для начала работы необходимо изменить настройку политики запуска на RemoteSigned, используя команду Set-ExecutionPolicy :
После выполнения команды можно будет запускать свои скрипты
Командлеты
Командлеты — это команды с предопределённой функцией, подобные условным операторам в языках программирования. У них есть несколько ключевых особенностей:
Каждый командлет содержит в себе глагол и существительное, разделяемые дефисом. Например:
При необходимости список всех доступных командлетов можно вывести с помощью Get-Help-Category. Запомните эту команду — она крайне важна для тех, кто изучает PowerShell с нуля, так как помогает быстрее начать ориентироваться в его возможностях.
Результат выполнения команды Get-Help-Category
Также можно создавать свои командлеты, но эта тема выходит за рамки нашего руководства по PowerShell для начинающих.
Параметры
Старт 4 ноября, 9 месяцев, Онлайн, Беcплатно
Лабораторная работа №1. Начало работы с Windows PowerShell.
Среда Windows PowerShell – это ориентированная на задачи оболочка командной строки и язык сценариев, разработанный для системного администрирования. Несмотря на внешнее сходство с традиционным cmd.exe, PowerShell является превосходной средой для выполнения сценариев
предназначенных для автоматизации различных задач, будь то копирование файлов или создание объектов в Active Directory.
Первым делом нужно загрузить PowerShell, если быть точнее, то установить среду управления Windows Management Framework.
Для Windows 7 и Windows Server 2008 R2 ничего устанавливать не требуется, так как Powershell и WinRM является неотъемлемым компонентом системы.
Два способа чтобы запустить PowerShell:
1) Пуск → Все программы → Стандартные → Windows PowerShell.
2) Win + R → ввести PowerShell → ok.
Строка в PowerShell вычисляемая. Для теста введите 120*2+17-3, нажмите Enter. PS C:\Windows\system32> 120*2+17-3
Так же PowerShell понимает единицы измерения. Для теста введите 50GB / 6600MB, нажмите Enter.
PS C:\Windows\system32> 50GB / 6600MB
В PowerShell можно считать столбиком. Для теста введите 67+, нажмите Enter, введите 5-, нажмите Enter, введите 1, нажмите Enter. Чтобы получить результат нажмите Enter ещѐ раз.
PS C:\Windows\system32> 67+
В PowerShell поддерживаются все методы редактирования, унаследованные от командной строки Windows.
1) Клавиши F5 (команда назад) и клавиша F8 (команда вперѐд) аналогичны стрелкам вверх и вниз.
2) Введите символ «d» и нажмите F8, PowerShell подставит ранее введѐнную вами команду «dir».
3) Клавиша F7 выдаст список введѐнных команд.
4) Очистить историю можно нажав Alt+F7
Изучать PowerShell следует со списка доступных команд.
Введите Get-Command, нажмите Enter. PS C:\Windows\system32> Get-Command
существительное». Объясняется это тем, что специалисты Microsoft хотели использовать единообразную схему именования. Глагол указывает на действие, которое предстоит совершить, а существительное — на тип объекта, на который будет направлено действие.
Для запроса списка команд по маске можно воспользоваться звѐздочкой «*«. Введите Get-Command Out*, нажмите Enter.
PS C:\Windows\system32> Get-Command Out*
Out-File [-FilePath] [[-Encoding]
Out-Host [-Paging] [-InputObject
Out-Printer [[-Name] ] [-InputObject
Out-String [-Stream] [-Width ] [-InputObj.
Получить справку по определѐнной команде можно введя команду: Get-Help command_name (Enter). Можно воспользоваться звѐздочкой «*» и получить список команд с описание того что они выполняют.
PS C:\Windows\system32> Get-Help Get-*
Получает события из журналов событий и.
Получает данные счетчиков производительности.
Получает связанную с поставщиком услуг безопасности.
Чтобы получить справку по запрашиваемой функции или командлету с примерами его использования необходимо ввести команду Get-Help Get-Process – Examples.
Получает процессы, выполняющиеся на локальном или удаленном компьютере.
Эта команда извлекает список всех выполняющихся на локальном компьютере процессов.
Определение каждого столбца см. разделе в дополнительных примечаний в справке для командлета Get-Help.
Создайте скрипт со следующим текстом: Write-Host «Hello!» и запустите его.
Подобное поведение связано с тем, что в настройках по умолчанию, считается, что только команды могут выполняться интерактивно, а выполнение скриптов запрещено.
Естественно, в случае необходимости уровень выполнения политики (по умолчанию установлен Restricted) можно изменить.
Установка уровня политики ExecutionPolicy.
Данное действие можно смело назвать процедурой настройки PowerShell с целью изменения текущего уровня безопасности, который задаѐтся параметром «ExecutionPolicy», который можно изменить в реестре.
Он расположен по следующему пути:
Однако, гораздо проще воспользоваться встроенной в PowerShell командой:
Существует шесть уровней политики ExecutionPolicy: Restricted
Это конфигурация PowerShell по умолчанию. Этот вариант означает, что никакие скрипты не могут быть запущены. Единственное, что можно делать в
PowerShell при такой настройке — это выполнять одиночные команды.
Эта настройка позволяет выполнять скрипты. Скрипт должен быть подписан сертификатом от доверенного источника. Перед выполнением подписанного скрипта будет выводится предупреждение.
Эта настройка позволяет выполнять скрипты, но требует, чтобы все скрипты и файлы конфигурации, загруженные из Интернета, были подписаны сертификатом от доверенного источника. Скриптам, выполняющимся на локальном компьютере, подпись не требуется. Предупреждений перед запуском скриптов не выводится.
Такая настройка используется чеще всего но она потенциально опасна и крайне не рекомендована. Такая настройка позволяет запускать неподписанные скрипты, включая загруженые из Интернета.
Ничто не блокируется и никаких предупреждений не выводится. Undefined
Удаляет присвоенную в настоящий момент политику.
В случае необходимости уровень разрешений запуска изменяется командой: SetExecutionPolicy RemoteSigned.
Когда выполняются сценарии собственного написания, следует использовать RemoteSigned. В случае, когда выполняются сценарии, полученные из внешних источников, стоит использовать AllSigned.
PS C:\Windows\system32> Set-ExecutionPolicy RemoteSigned
Изменение политики выполнения
Политика выполнения обеспечивает защиту компьютера от ненадежных скриптов. Изменение политики выполнения может подвергнуть компьютер риску нарушения системы безопасности, как описано в разделе справки, вызываемом командой about_Execution_Policies. Изменить политику выполнения?
После изменения политики безопасности можно запустить первый скрипт.
Прописав путь к скрипту и его имя, а далее нажать Enter.
Выполнение задач по работе с сетями
Большая часть задач администрирования низкоуровневых сетевых протоколов связана с протоколом TCP/IP, так как это наиболее распространенный сетевой протокол. В этом разделе описано использование инструментария WMI и PowerShell для выполнения этих задач.
Получение списка IP-адресов компьютера
Список всех IP-адресов, используемых локальным компьютером, возвращает следующая команда:
Учитывая, что свойство IPAddress объекта Win32_NetworkAdapterConfiguration является массивом, необходимо использовать параметр ExpandProperty со значением Select-Object для просмотра всего списка адресов.
С помощью командлета Get-Member можно увидеть, что свойство IPAddress является массивом:
Свойство IPAddress каждого сетевого адаптера в действительности представляет собой массив. Фигурные скобки в определении указывают на то, что свойство IPAddress содержит не значение типа System.String, а массив значений типа System.String.
Вывод данных IP-конфигурации
Для отображения подробных данных IP-конфигурации каждого сетевого адаптера воспользуйтесь следующей командой:
Эта команда выводит подробные сведения о DHCP, DNS, маршрутизации и других менее значительных свойствах IP-конфигурации.
Проверка связи с компьютерами
Простую проверку связи с компьютером можно выполнить с помощью Win32_PingStatus. Следующая команда производит проверку связи, но при этом выводит большой объем сведений:
Удобнее отображать сводные данные, содержащие свойства Address, ResponseTime и StatusCode, как это делает приведенная ниже команда. Параметр Autosize командлета Format-Table изменяет размер столбцов таблицы для их правильного отображения в PowerShell.
Значение 0 свойства StatusCode указывает на успешно выполненную проверку связи.
Для проверки связи с несколькими компьютерами с помощью одной команды можно использовать массив. Так как адресов несколько, для проверки связи с каждым адресом по отдельности можно использовать ForEach-Object :
Один и тот же формат команды можно использовать для проверки связи со всеми компьютерами подсети. Например, при проверке частной сети, использующей номер сети 192.168.1.0 и стандартную маску подсети класса C (255.255.255.0), допустимы только локальные адреса в диапазоне от 192.168.1.1 до 192.168.1.254 (0 всегда зарезервирован в качестве номера сети, а 255 используется в качестве широковещательного адреса подсети).
Такой метод формирования диапазона адресов может быть использован в любых подобных случаях. Полный набор адресов можно сформировать следующим образом:
Извлечение свойств сетевого адаптера
Ранее упоминалось о возможности извлечения общих свойств конфигурации с помощью класса Win32_NetworkAdapterConfiguration. Такие сведения о сетевом адаптере, как MAC-адреса и типы адаптеров, не относятся, строго говоря, к протоколу TCP/IP, но могут оказаться полезными для понимания того, что происходит в компьютере. Сводные данные можно получить с помощью следующей команды:
Назначение домена DNS сетевому адаптеру
Чтобы назначить домен DNS для автоматического разрешения имен, нужно использовать метод SetDNSDomain класса Win32_NetworkAdapterConfiguration. Параметр Запрос со значением Invoke-CimMethod принимает строку WQL-запроса. Командлет вызывает метод, указанный для каждого экземпляра, возвращаемого запросом.
Фильтрация по IPEnabled=True необходима, так как даже в сети, использующей только TCP/IP, некоторые конфигурации сетевых адаптеров на компьютере не являются настоящими адаптерами TCP/IP. Это просто общие программные элементы, поддерживающие службы RAS, VPN, QoS и другие службы для всех адаптеров, то есть, они не имеют собственного адреса.
Выполнение задач настройки DHCP
Изменение сведений DHCP, так же как и настройка DNS, включает работу с набором сетевых адаптеров. Существует несколько отдельных действий, выполняемых с помощью инструментария WMI. Мы рассмотрим несколько наиболее типичных.
Определение адаптеров, поддерживающих DHCP
Найти на компьютере адаптеры, поддерживающие DHCP, можно с помощью следующей команды:
Чтобы исключить из поиска адаптеры, имеющие проблемы в IP-конфигурации, можно добавить требование поддержки протокола IP:
Извлечение свойств DHCP
Включение поддержки DHCP на каждом адаптере
Чтобы включить поддержку DHCP на всех адаптерах, используйте команду:
Использование оператора фильтра IPEnabled=True and DHCPEnabled=False позволяет избежать включения DHCP, когда он уже включен.
Отмена и обновление аренды адреса DHCP для отдельных адаптеров
Единственное отличие при обновлении аренды адреса DHCP заключается в вызове метода RenewDHCPLease RenewDHCPLease ReleaseDHCPLease вместо метода ReleaseDHCPLease:
Если эти методы применяются на удаленном компьютере, возможна потеря доступа к удаленной системе, которая подключена через адаптер с отмененной или обновленной арендой.
Отмена и обновление аренды адресов DHCP для всех адаптеров
Такой же формат команды используется при вызове метода RenewDHCPLeaseAll:
Создание сетевой папки
Создать сетевую папку можно с помощью метода Create класса Win32_Share:
Эта команда эквивалентна следующей команде net share в Windows:
Чтобы вызвать метод класса WMI, который принимает параметры, необходимо определить доступные параметры и типы этих параметров. Например, можно вывести список методов Win32_Class с помощью следующих команд:
Также можно ознакомиться с документацией по методу Create класса Win32_Share.
Удаление сетевой папки
Сетевую папку можно удалить с помощью Win32_Share, но этот процесс немного отличается от создания, так как требует получения конкретного удаляемого экземпляра, а не класса Win32_Share. В следующем примере показано удаление сетевой папки TempShare:
Подключение сетевого диска, доступного в Windows
Командлет New-PSDrive может создать диск PowerShell, сопоставленный с общей сетевой папкой.
Тем не менее диски, созданные таким образом, доступны только для сеанса PowerShell, в котором они созданы. Чтобы подключить диск, доступный за пределами PowerShell (или для других сеансов PowerShell), необходимо использовать параметр Persist.
Постоянно сопоставленные диски могут быть недоступны при работе в контексте с повышенными привилегиями. Этот режим используется по умолчанию для Windows UAC. Дополнительные сведения см. в следующей статье:
Глава 1. Начало работы с PowerShell
Я часто вижу, что выступающие на конференциях и собраниях групп пользователей уже работают с PowerShell, когда демонстрируют презентации начального уровня. Эта книга начинается с ответов на вопросы, которые задавали участники мероприятий, ранее не использовавшие PowerShell.
В частности, эта глава посвящена поиску и запуску PowerShell, а также решению некоторых первоначальных проблем, с которыми сталкиваются новые пользователи при работе с PowerShell. Обязательно ознакомьтесь с примерами, приведенными в этой главе, и выполните их на компьютере Windows 10 с лабораторной средой.
Что нужно, чтобы начать работу с PowerShell?
Все современные версии операционных систем Windows поставляются с установленной оболочкой PowerShell. Если вы используете версию, предшествующую 5.1, следует установить последнюю версию.
Где найти PowerShell?
Самый простой способ найти PowerShell в Windows 10 — ввести PowerShell в строке поиска, как показано на рис. 1-1.
Обратите внимание, что на рис. 1-1 показаны четыре разных ярлыка для PowerShell. Компьютер, используемый в демонстрационных целях в этой книге, работает под управлением 64-разрядной версии Windows 10, поэтому существует 64-разрядная версия консоли PowerShell и PowerShell ISE (интегрированной среды сценариев) и 32-разрядная версия каждой из них (обозначена суффиксом (x86) на ярлыках). Если вы работаете с 32-разрядной версией Windows 10, у вас будет только два ярлыка. У этих элементов нет суффикса (x86), но они являются 32-разрядными версиями. Если у вас установлена 64-разрядная операционная система, рекомендуется запускать 64-разрядную версию PowerShell, только если вас нет особой причины для запуска 32-разрядной версии.
Сведения о запуске PowerShell в других версиях Windows см. в статье Запуск Windows PowerShell.
Как запустить PowerShell?
В производственной среде предприятия, которую я поддерживаю, я работаю с тремя разными учетными записями пользователей Active Directory. В лабораторной среде в этой книге используются зеркальные экземпляры этих учетных записей. Я вошел на компьютер с Windows 10 в качестве пользователя домена, который не является администратором домена или локальным администратором.
Я запустил консоль PowerShell, щелкнув ярлык Windows PowerShell, как показано на рис. 1-1.
Обратите внимание, что в строке заголовка консоли PowerShell указано «Windows PowerShell», как показано на рис. 1-4. Некоторые команды выполняются нормально, но PowerShell не поддерживает управление доступом пользователей (UAC). Это означает, что оболочка не может запрашивать повышение прав для задач, требующих утверждения администратором. Выдается следующее сообщение об ошибке.
Решение этой проблемы заключается в запуске PowerShell от имени пользователя домена, который является локальным администратором. Именно так настроена моя вторая учетная запись пользователя домена. При использовании принципа наименьших привилегий эта учетная запись не должна быть администратором домена или иметь любые повышенные привилегии в домене.
Закройте PowerShell. Перезапустите консоль PowerShell, только на этот раз щелкните правой кнопкой мыши ярлык Windows PowerShell и выберите пункт Запуск от имени администратора, как показано на рис. 1-5.
Если вы выполнили вход в Windows в качестве обычного пользователя, вам будет предложено ввести учетные данные. Я буду вводить учетные данные учетной записи пользователя, которая является пользователем домена и локальным администратором, как показано на рис. 1-6.
После повторного запуска PowerShell с правами администратора в строке заголовка должно быть указано «Администратор: Windows PowerShell», как показано на рис. 1-7.
Теперь, когда PowerShell работает с повышенными привилегиями локального администратора, управление доступом пользователей больше не будет проблемой в случае запуска на локальном компьютере команды, для выполнения которой обычно требуется запрос на повышение прав. Следует иметь в виду, что любая команда, выполняемая из этого экземпляра консоли PowerShell с повышенными привилегиями, также запускается с повышенными привилегиями.
Чтобы упростить поиск PowerShell и запускать оболочку от имени администратора, рекомендуется закрепить ее на панели задач и настроить автоматический запуск от имени администратора при каждом запуске.
Еще раз выполните поиск PowerShell, только на этот раз щелкните ее правой кнопкой мыши и выберите пункт «Закрепить на панели задач», как показано на рис. 1-8.
Щелкните правой кнопкой мыши ярлык PowerShell, который теперь закреплен на панели задач, и выберите пункт «Свойства», как показано на рис. 1-9.
Щелкните «Дополнительно», как показано в первой части рис. 1-10, установите флажок «Запуск от имени администратора», как показано во второй части рис. 1-10, а затем дважды нажмите кнопку OK, чтобы принять изменения и выйти из обоих диалоговых окон.
Вам больше никогда не придется беспокоиться о поиске PowerShell или о том, запущена ли оболочка от имени администратора или нет.
Запуск PowerShell с повышенными привилегиями для предотвращения проблем, связанных с управлением доступом пользователей, влияет только на команды, выполняемые на локальном компьютере. Он не влияет на команды, предназначенные для запуска на удаленных компьютерах.
Какую версию PowerShell я использую?
Политика выполнения
Вопреки распространенному мнению, политика выполнения в PowerShell не является средством обеспечения безопасности. Она предназначена для предотвращения непреднамеренного выполнения сценария пользователем. Определенный пользователь может без труда обойти политику выполнения в PowerShell. В таблице 1-2 показана политика выполнения по умолчанию для текущих операционных систем Windows.
| Версия операционной системы Windows | Политика выполнения по умолчанию |
|---|---|
| Server 2019 | Удаленно подписанная |
| Server 2016 | Удаленно подписанная |
| Windows 10 | С ограниченным доступом |
Любая команда PowerShell может выполняться в интерактивном режиме, независимо от настройки политики выполнения. Политика выполнения влияет только на команды, выполняемые в сценарии. Командлет Get-ExecutionPolicy используется для определения текущего параметра политики выполнения, а командлет Set-ExecutionPolicy используется для изменения политики выполнения. Рекомендуется использовать политику RemoteSigned, которая требует, чтобы предназначенные для выполнения скачиваемые сценарии были подписаны доверенным издателем.
Проверка текущей политики выполнения
Эта команда выполняется в интерактивном режиме без ошибок при условии, что PowerShell запущена с повышенными правами администратора. Но при сохранении в виде файла сценария и попытке выполнить сценарий выдается ошибка.
Обратите внимание, что в сообщении об ошибке, приведенном в предыдущем наборе результатов, указывается точная проблема (в этой системе отключено выполнение сценариев). При выполнении в PowerShell команды, которая создает сообщение об ошибке, обязательно следует прочесть сообщение об ошибке, а не просто перезапустить команду и надеяться на ее успешное завершение.
Измените политику выполнения PowerShell на удаленно подписанную.
Обязательно прочтите предупреждение, которое отображается при изменении политики выполнения. Кроме того, рекомендуется ознакомиться с разделом справки about_Execution_Policies, чтобы знать о влиянии изменения политики выполнения на безопасность.
Теперь, когда для политики выполнения задано значение Удаленно подписанная, сценарий Stop-TimeService.ps1 будет выполняться без ошибок.
Прежде чем продолжить, запустите службу времени Windows. В противном случае могут возникнуть непредвиденные проблемы.
Сводка
В этой главе вы узнали, как найти и запустить PowerShell, а также как создать ярлык для запуска PowerShell от имени администратора. Вы также ознакомились с политикой выполнения по умолчанию и поняли, как ее изменять.
Просмотр
Рекомендуем прочесть
Тем, кто хочет более подробно изучить темы, описанные в этой главе, рекомендуется ознакомиться со следующими разделами справки по PowerShell.
В следующей главе вы узнаете о возможности обнаружения команд в PowerShell. Помимо прочих вопросов в ней будет рассматриваться обновление PowerShell, после которого разделы справки можно будет просматривать непосредственно в PowerShell, а не в Интернете.














