Разное

Скрипты для powershell: Примеры скриптов для системного администрирования — PowerShell

11.06.2021

Содержание

Написание и запуск сценариев в интегрированной среде сценариев Windows PowerShell — PowerShell

  • Чтение занимает 4 мин

В этой статье

В этой статье описано как создавать, редактировать, выполнять и сохранять скрипты в области скриптов.

Создание и выполнение сценариев

В области скриптов можно открывать и редактировать файлы Windows PowerShell. Сейчас нас интересуют следующие типы файлов Windows PowerShell: файлы скриптов (.ps1), файлы данных скриптов (.psd1) и файлы модулей скриптов (.psm1). Эти типы файлов имеют цветовую подсветку синтаксиса в редакторе области сценариев. Другие стандартные файлы, которые можно открыть в области сценариев, — это файлы конфигурации (. ps1xml

), XML-файлы и текстовые файлы.

Примечание

Политика выполнения Windows PowerShell определяет, можно ли выполнять сценарии, загружать профили Windows PowerShell и файлы конфигурации. Политика выполнения по умолчанию, Restricted, запрещает выполнение сценариев и блокирует загрузку профилей. Чтобы изменить эту политику выполнения и разрешить загрузку и использование профилей, см. описание Set-ExecutionPolicy и about_Signing.

Создание файла сценария

Нажмите кнопку Создать на панели инструментов или откройте меню Файл и выберите Создать . Созданный файл появится в новой вкладке, расположенной под текущей вкладкой PowerShell. Помните, что вкладки PowerShell отображаются, только если их несколько. По умолчанию создается файл сценария (.ps1), но его можно сохранить с новым именем и расширением. На одной вкладке PowerShell может быть создано несколько файлов сценариев.

Открытие существующего сценария

Нажмите кнопку Открыть. .. на панели инструментов или откройте меню Файл и выберите пункт Открыть . В диалоговом окне Открыть выберите файл, который требуется открыть. Открытый файл появится в новой вкладке.

Закрытие вкладки сценария

На вкладке файла, которую нужно закрыть, щелкните значок закрытия ( X ) или откройте меню File (Файл) и выберите Close (Закрыть).

Если файл был изменен с момента последнего сохранения, будет предложено сохранить или отменить изменения.

Отображение пути к файлу

На вкладке файла наведите курсор на его имя. Появится подсказка с полным путем к файлу сценария.

Запуск сценария

Нажмите кнопку Выполнить сценарий на панели инструментов или откройте меню Файл и выберите пункт Выполнить .

Выполнение части сценария

  1. Выберите часть сценария в области сценариев.
  2. Нажмите кнопку Выполнить выделенный фрагмент на панели инструментов или откройте меню Файл и выберите пункт Выполнить выделенный фрагмент .

Остановка выполняемого сценария

Есть несколько способов остановить выполняемый скрипт.

  • На панели инструментов щелкните Остановить операцию .
  • Нажмите CTRL+BREAK
    .
  • В меню Файл выберите Остановить операцию .

Нажатие клавиш CTRL+C также сработает, если нет выделенного текста. В противном случае нажатие клавиш CTRL+C приведет к копированию выделенного текста.

Написание и редактирование текста в области сценариев

В области скриптов текст можно копировать, вырезать, вставлять, искать и заменять. Также можно отменить и повторить последнее выполненное действие. Для этого используются те же клавиши, как и во всех других приложениях Windows.

Ввод текста в области сценариев

  1. Установите курсор в область сценариев, щелкнув кнопкой мыши любую ее часть или выбрав пункт Перейти в область сценариев в меню Вид
    .
  2. Создайте сценарий. Цветовая подсветка синтаксиса и заполнение нажатием клавиши TAB обеспечивают более широкие возможности для редактирования в интегрированной среде скриптов Windows PowerShell.
  3. Подробную информацию о заполнении нажатием клавиши TAB, помогающем при вводе кода, см. в статье How to Use Tab Completion in the Script Pane and Console Pane (Использование заполнения нажатием клавиши TAB в областях сценариев и консоли).

Поиск текста в области сценариев

  1. Чтобы найти текст в любой части скрипта, нажмите клавиши CTRL+F или выберите Find in Script (Найти в сценарии) в меню Edit (Правка).
  2. Чтобы найти текст после курсора, нажмите клавишу F3 или выберите Найти следующее в сценарии в меню Правка .
  3. Чтобы найти текст до курсора, нажмите клавиши SHIFT+F3 или выберите Find Previous in Script (Найти предыдущее в сценарии) в меню Edit (Правка).

Поиск и замена текста в области сценариев

Нажмите клавиши CRTL+H или в меню Edit (Правка) выберите Replace in Script (Заменить в сценарии). Введите текст, который нужно найти, и замещающий текст, затем нажмите клавишу ВВОД.

Переход к определенной строке текста в области сценариев

  1. В области сценариев нажмите клавиши CTRL+G или выберите Go to Line (Перейти к строке) в меню Edit (Правка).

  2. Введите номер строки.

Копирование текста в области сценариев

  1. В области сценариев выделите текст, который требуется скопировать.

  2. Нажмите клавиши CTRL+C, щелкните значок Copy (Копировать) на панели инструментов или выберите Copy (Копировать) в меню Edit (Правка).

Вырезание текста в области сценариев

  1. В области сценариев выделите текст, который требуется вырезать.
  2. Нажмите клавиши CTRL+X, щелкните значок Cut (Вырезать) на панели инструментов или выберите Cut (Вырезать) в меню Edit (Правка).

Вставка текста в области сценариев

Нажмите клавиши CTRL+V, щелкните значок Paste (Вставить) на панели инструментов или выберите Paste

(Вставить) в меню Edit (Правка).

Отмена действия в области сценариев

Нажмите клавиши CTRL+Z, щелкните значок Undo на панели инструментов или выберите Отменить в меню Правка .

Повторное выполнение действия в области сценариев

Нажмите клавиши CTRL+Y, щелкните значок Повторить на панели инструментов или выберите Повторить в меню Правка .

Сохранение сценария

Звездочка рядом с именем скрипта обозначает, что файл не был сохранен после изменения. После сохранения звездочка исчезает.

Сохранение сценария

Нажмите клавиши CTRL+S, щелкните значок

Сохранить на панели инструментов или выберите Сохранить в меню Файл .

Сохранение сценария с определенным именем

  1. В меню Файл выберите команду Сохранить как . Появится диалоговое окно Сохранить как .
  2. В поле Имя файла введите имя файла.
  3. В поле Тип файла выберите тип файла. Например, в поле Тип сохраняемого файла выберите «Скрипты PowerShell (*.ps1)».
  4. Выберите команду Сохранить .

Сохранение сценария в кодировке ASCII

По умолчанию интегрированная среда сценариев Windows PowerShell сохраняет новые файлы сценариев (. ps1), файлы данных сценариев (.psd1) и файлы модулей сценариев (

.psm1) в кодировке Юникод (BigEndianUnicode). Чтобы сохранить сценарий в другой кодировке, например ASCII (ANSI), используйте методы Save или SaveAs объекта $psISE.CurrentFile.

Следующая команда сохраняет новый сценарий в кодировке ASCII и с именем MyScript.ps1:

$psISE.CurrentFile.SaveAs("MyScript.ps1", [System.Text.Encoding]::ASCII)

Следующая команда заменяет текущий файл сценария на файл с таким же именем, но в кодировке ASCII:

$psISE.CurrentFile.Save([System.Text.Encoding]::ASCII)

Следующая команда возвращает кодировку текущего файла:

$psISE.CurrentFile.encoding

Интегрированная среда скриптов Windows PowerShell поддерживает следующие параметры кодировки: ASCII, BigEndianUnicode, Unicode, UTF32, UTF7, UTF8 и Default. Значение параметра Default зависит от системы.

Интегрированная среда скриптов Windows PowerShell не изменяет кодировку файлов скриптов при использовании команд «Сохранить» или «Сохранить как».

См. также:

Первые шаги для пауэршельшиков / Хабр

Приди ко мне брате в Консоль!
— Админ Долгорукий.

Много ярлыков улетело в корзину со времён выхода в свет 2008 Windows. Люди попроще дивились новому синему окошку, которое ребята из Майкрософт зачем-то вставили в свои новые продукты. Люди, которые сидят на блогах и знают программирование начали изучать это окошко.

В итоге к народу начало приходить осознание того, что Майкрософт действительно разработали что-то новое и интересное.
И так, зачем вам это нужно? В основном, программа под названием PowerShell (в дальнейшем PS) предназначена для администраторов и программистов. Она позволяет автоматизировать примерно 99% всех действий в системе. С помощью неё вы можете настраивать удалённые компьютеры, запускать и перезапускать сервисы и производить обслуживание большиства серверных приложений.

Как выяснилось, возможности у программы потрясающие.

Конечно же, продвинутые пользователи найдут множество способов использования этого восхитительного синего окошка.

Задача этой статьи проста — показать вам малую долю возможностей PS и дать вам концептуальное понимание предмета. В действительности документации по предмету написано несметное количество, так что я не стремлюсь охватить всё. Я так же ознакомлю вас с набором утилит, которые позволят не вылезать из PS в принципе.


Что представляет собой PS? Это интерпретатор командной строки. Вы вводите необходимые команды, на экране отображается результат их выполнения. Всё просто. Всё было так со времён доса и старого доброго Юникса.

Есть два основных отличия от предшественников, которые качественно выделяют PS среди других интерпретаторов.

  • Очень хорошая интеграция с Microsoft .NET Framework. Это даёт вам возможность вплетать мощные программистские решения в свои команды и скрипты.
  • Все значения, возвращаемые вам в терминал являются объектами, с которыми можно работать как с объектами, а не просто набором строк. Это позволяет вам создавать неимоверно мощные программные скрипты.

Приступая к работе


Если вы используете Windows 7 или 2008 то PS вам уже доступен. Для пользователей других версий Windows — добро пожаловать на сайт Майкрософт.

После установки вы можете запустить консоль и настроить её по своему вкусу, нажав на иконку в заголовке окна. Вы можете выбрать шрифт и изменить сам размер окна.
После этого, предпринимайте робкие шаги по выполнению первых команд. Для начала наберите

dir

и вы получите список папок в текущем каталоге. Приятным моментом для любителей Юникса
будет тот факт, что команда

ls

работает так же хорошо, как и dir. В PS существует система назначения алиасов на различные команды. В действительности, то что вы сейчас сделали — это выполнили командлет (так в PS называются команды, встроенные в сам PS) Get-ChildItem. Вы можете попробовать просто набрать Get-ChildItem и получить тот же результат, что и в двух предыдущих командах. Для того, чтобы вы быстро ознакомились со списком всех алиасов наберите

ls Alias:\

И так, что-то произошло. Вы начали кое-что понимать. Сейчас я буду раскладывать всю магию по кусочкам.

Первое. Командлеты в оригинальной нотации PS имеют следующую систему именования — Глагол-Объект. Это позволяет вам лучше понимать, что можно ожидать в результате выполнения того или иного командлета. Например,

Get-Process # Получить список процессов
Remove-Item # Удалить что-то
Get-Help # получить справку по чему-то
Set-Alias # Создать новый алиас
New-Item # Создать новый объект (Объектом может быть всё что угодно, например, файл)

Далее, в PS достаточно много очевидных вещей находится в непривычных для виндузятника местах. В частности, вы можете посмотреть, что за диски есть в вашей системе, набрав команду

Get-PSDrive

И в ответ вы получаете намного более интересный список дисков в вашей системе, нежели тот, что вы видите в «Моём Компьютере»

Name           Used (GB)     Free (GB) Provider      Root
----           ---------     --------- --------      ----
Alias                                  Alias
C                  16. 56         63.44 FileSystem    C:\
cert                                   Certificate   \
D                    .11         53.92 FileSystem    D:\
Env                                    Environment
Function                               Function
HKCU                                   Registry      HKEY_CURRENT_USER
HKLM                                   Registry      HKEY_LOCAL_MACHINE
Variable                               Variable
WSMan                                  WSMan

На диске Alias вы можете увидеть список всех алиясов в системе. Виртуальный диск Variable: хранит в себе все переменные, которые вы можете использовать в данной сессии. На диске Env — лежат переменные операционной системы. Диски HKCU и HKLM являются обёрткой для работы с соответствующими ветками реестра.
Давайте углубимся. Набирайте

Set-Location HKLM: # Или, если вы из людей подосёвее, набирайте cd HKLM:

Ну и как вам новый и невероятный способ хождения по реестру всея машины? Вы можете сделать ls по ветке реестра или перейти в нужный «каталог», набрав cd SYSTEM.

SKC  VC Name                           Property
---  -- ----                           --------
  2   0 BCD00000000                    {}
  4   0 HARDWARE                       {}
  1   0 SAM                            {}
Get-ChildItem : Requested registry access is not allowed.
At line:1 char:3
+ ls <<<<  -force
    + CategoryInfo          : PermissionDenied: (HKEY_LOCAL_MACHINE\SECURITY:St
   ring) [Get-ChildItem], SecurityException
    + FullyQualifiedErrorId : System.Security.SecurityException,Microsoft.Power
   Shell.Commands.GetChildItemCommand

 35   0 SOFTWARE                       {}
  8   0 SYSTEM                         {}

(Кстати, даже из под администраторского аккаунта есть доступ не ко всем объектам, о чём мой шелл меня уведомляет красными буквами).

Не бойтесь использовать команды New-Item и Remove-Item чтобы создавать и удалять нужные вам ключи в реестре. (И по традиции, я напомню вам, что играться с ключами реестра в администраторском режиме опасно)

Ну, вот вам и небольшой экскурс вглубь. Конечно же, у вас не получится создать ключ реестра так просто. Что-то пойдёт не так, как надо. Ну что же, могу сказать, что PS — это система, которая поощряет обучение в этой системе. Поэтому

Обучение тому, как правильно чему-то научиться в PowerShell


Способность наблюдать и анализировать наблюдения отличает нормального человека от психа. Ребят в Майкрософт психами не назовёшь. Они действительно понаблюдали за пользователями других командных интерпретаторов и выяснили, какая команда чаще всего используется в интерпретаторах. И той командой был великий и могучий man. (Для незнающих — попробуйте сделать — гугл man или наберите в своём баше man man)
В PS есть аналогичная команда, которая звучит как
Get-Help # хотя вы можеше использовать алиас на неё, под названием help

Насколько поразительно отвратительно ребята из Майкрософт делают документацию для пользовательских приложений, настолько хорошо они заботятся о программистах. (Неверующие могут сравнить справку системы Windows XP и 2003)
И так, выбирайте приглянувшийся вам командлет и отправляйте его в help. Если после прочтения общей справки вы ничего не поняли, то попробуйте набрать

get-help New-Item -Examples

Ключ -Examples обычно выдаёт от двух до пяти потрясающих примеров использования выбранной вами команды, с детальным их описанием.
На самом деле, одним только Гет-Хелпом, я в своё время изучил основы PS, перебирая все команды и читая к ним справку.
Если же вы захотели получить справку по какой-то функции, но не знаете, как она называется, а просто предполагаете о её существовании, то просто наберите

get-help files

В ответ на эту команду вы получите список топиков, которые содержат ключевое слово:

PS C:\> get-help Files

Name                              Category  Synopsis
----                              --------  --------
FileSystem                        Provider  Provides access to files and dire...
about_profiles                    HelpFile  Describes how to create and use a...

В нашем случая, для того, чтобы научиться работать с реестром, вы можете просто набрать

get-help Registry

В ответ вы получите длиннющее полотно, которое со всеми подробностями расскажет вам о том, как вы можете работать с реестром в PS.
К сожалению, читабельность полотна обратно пропорциональна его длине. Так что, научившись учиться, давайте обучимся тому, как сделать работу в шелле немного проще.

Маленькие, но очень полезные фишки, которые должны быть в жизни

Товарищ, смирись, ты — в командной строке. Тут безгуёво принципе. Но, если ты познаешь некоторые уловки, тебе здесь станет удобно.
И так, для тех, кто никогда не был в командной строке

  1. Нажатие кнопкок вверх и вниз позволяет вам прокручивать историю команд, и выбирать ранее набранные команды.
  2. Нажатие кнопки вправо, в конце строки, будет посимвольно перенабирать предыдущую команду.

Для тех, кто уже бывал в командных строках

  1. Ctrl+Home — удаляет всё, начиная с текущей позиции курсора до начала строки
  2. Ctrl+End — удаляет с курсора и до конца строки
  3. F7 — показывает окно со списком набранных команд, и позволяет выбрать одну из них.
  4. Для того, чтобы скопировать что-то в буфер, выделите это мышью и нажмите Enter.
  5. Для того, чтобы вставить строку из буфера — просто нажмите правую кнопку мыши.
Это — самые базовые, и необходимые действия, которые вам придётся выучить наизусть. Другое дело, что они помогут вам шустрее работать с шеллом.

Углубляемся в изучение окружения


Для того чтобы понять нижеследующие строки, нам надо будет разобраться с понятием конвейера.
Когда вы запускаете какой-либо командлет, то возвращаемые им значения преобразуются в текст и выводятся на экран. Но, это не всегда полезно. Например, если вы хотите передать возвращаемое значение одного командлета на вход другого. Для этого вам полезно будет использовать |, в народе именуемый конвейером.
Например, вы хотите отобразить на экране текст, который содержится во всех файлах формата bat в папке. Для того, чтобы выбрать файлы, выполняйте
PS C:\> ls -filter "*.bat" | Get-Content
REM Dummy file for NTVDM

Команда ls -filter «*.bat» выбирает все файлы с нужным расширением, а команда Get-Content выводит их на экран (на самом деле, исходя из названия, команда просто получает содержимое объекта, а на экран он выводится по факту того, что дальше некуда)
Конвейер может сделать очень много полезного для вас. Например, решить «портянку помощи».

Get-Help Registry | Set-Content reg.txt

И весь файл помощи по реестру сохранён в текстовом файле, который вы теперь можете открыть.

Если вы действительно хотите порадоваться жизни, и понять, что PS способен на многое, то вам придётся применить свой IQ на все 100% и вообразить что-то нереальное.

ps | ls

Выглядит невероятно, а результат даёт потрясающий! Если вы хотите узнать, из какого файла появился процесс, просто пустите его конвейером на get-childitem!
В частности, я сейчас набираю текст в вордпаде:

PS C:\> ps wordpad | ls

    Directory: C:\Program Files\Windows NT\Accessories

Mode                LastWriteTime     Length Name
----                -------------     ------ ----
-a---         6/28/2010   9:57 PM    4247040 wordpad.exe

Вот это меня поразило до глубины души.

Теперь можно переходить к изучению окружения


Как я уже говорил, всё что вы видите на экране не является строками, а является объектами. Например, результат выполнения команды ps возвращает нам список процессов, запущенных в системе.
Но как узнать, что же у нас в руках?
Для этого мы воспользуемся командлетом Get-Member, который откроет нам методы любого класса. Давайте узнаем, что содержится в том же самом процессе, который выдаёт нам команда ps.
ps wordpad | Get-Member

Набирайте, и смотрите на список членов класса, которые вы можете увидеть в классе System.Diagnostics.Process. Тоесть, фактически, командлет ps вернул нам массив объектов типа Process и мы можем попрограммировать их!
Давайте поглумимся над блокнотом.

PS C:\> notepad                                                        
PS C:\> ps notepad                                                                                                                            Handles  NPM(K)    PM(K)      WS(K) VM(M)   CPU(s)     Id ProcessName  -------  ------    -----      ----- -----   ------     -- -----------       70       4     1148       5376    56     0. 30   3900 notepad                                                                                                                                                    PS C:\> ps notepad | get-member -type method


   TypeName: System.Diagnostics.Process

Name                      MemberType Definition
----                      ---------- ----------
BeginErrorReadLine        Method     System.Void BeginErrorReadLine()
BeginOutputReadLine       Method     System.Void BeginOutputReadLine()
CancelErrorRead           Method     System.Void CancelErrorRead()
CancelOutputRead          Method     System.Void CancelOutputRead()
Close                     Method     System.Void Close()
CloseMainWindow           Method     bool CloseMainWindow()
CreateObjRef              Method     System.Runtime.Remoting.ObjRef CreateObj...
Dispose                   Method     System.Void Dispose()
Equals                    Method     bool Equals(System.Object obj)
GetHashCode               Method     int GetHashCode()
GetLifetimeService        Method     System. Object GetLifetimeService()
GetType                   Method     type GetType()
InitializeLifetimeService Method     System.Object InitializeLifetimeService()
Kill                      Method     System.Void Kill()
Refresh                   Method     System.Void Refresh()
Start                     Method     bool Start()
ToString                  Method     string ToString()
WaitForExit               Method     bool WaitForExit(int milliseconds), Syst...
WaitForInputIdle          Method     bool WaitForInputIdle(int milliseconds),...

Вот это неплохое количество методов, которые мы можем запустить, используя шелл. И так, как же это сделать? Просто.

(ps notepad).WaitForExit()

Если вы возьмёте результат выполнения командлета в скобки, то вы сможете обратиться к нему, как к объекту в вашей программе, прямо из командной строки.
После запуска этого метода шелл завис и ждёт у моря погоды. Нажмите пару раз Enter. Ничего не происходит. Что же, закройте открытый блокнот. Вуаля, вы снова в шелле.
Я думаю, теперь вы должны погулять свою фантазию. Попробуйте, пустите через конвейер в get-member результаты выполнения ls или других командлетов, каких только можете найти.
Если вы увидели, что в свойстве какого-то объекта лежит ещё один объект, не стесняйтесь пускать его на Get-Member

(ps notepad).StartTime | Get-Member

И так далее до бесконечности.

Задача для пытливых умов. Пролетела новость, что рефлектор станет платным. Как сделать рефлектор на чистом PS? Кстати, это не такая уж и трудная задача.

Ну, вот, мы немного разобрались с тем, как узнать, что нас окружает. Теперь, мы готовы к тому, чтобы понять ещё парочку принципов, существующих в шелле.

Переменные и объекты


И так, пару слов по поводу переменных. В PS они бывают нетипизированными:
$processList = ps

И типизированными

PS C:\> [DateTime]$x = "febbrrr"
Cannot convert value "febbrrr" to type "System. DateTime". Error: "The string was
 not recognized as a valid DateTime. There is a unknown word starting at index 0."
At line:1 char:13
+ [DateTime]$x <<<<  = "febbrrr"
    + CategoryInfo          : MetadataError: (:) [], ArgumentTransformationMetadataException
    + FullyQualifiedErrorId : RuntimeException
PS C:\> [DateTime]$x = "02/14/11"
PS C:\> $x
Monday, February 14, 2011 12:00:00 AM

И так, у нас появились переменные, и теперь мы можем присваивать им значения. В общем, всё, что вы пускали на конвейер, можно пустить и в переменную. Но, тут PS предоставляет нам одну очень интересную фитчу, которая делает его незаменимым инструментом в руках .NET разработчика.
Помните, я сказал, что в PS всё, что возвращается — это объект? Ну так вот, объект это не простой, а дотнетовый. Любой программист уже обратил внимание на тот факт, что в списке процессов мы работали с объектом из окружения CLR. Что же, мы можем запросто создать такой объект.
Давайте, попробуйте

$x = new-object System. Object

Что-же, переменную мы создали, а толку от неё — как с икспи сервака. Никакого. Давайте пофантазируем и подумаем, что мы действительно можем сделать?

C:\> $client = New-Object System.Net.WebClient
C:\> $client.DownloadString("http://google.com")

А вот это уже другое дело. Только что мы из подручных средств собрали себе wget на коленке. Как вам такой поворот событий?
Что же, в этот момент можно идти в MSDN и подряд перебирать все классы, смотреть, что в них есть интересного. Всё это позволяет создавать очень гибкие скрипты.

Кстати, о скриптах


PS позволяет выполнять скрипты. Ура! Делает он это с волшебного пендаля. Неура. По умолчанию в PS запрещён запуск скриптов, которые не были подписаны цифровой подписью. Для запуска скрипта вы должны его либо подписать (для этого используйте help about_signing) либо, просто понизить уровень безопасности, и выполнить
set-executionpolicy remotesigned

обычно я делаю второе. Ибо первый вариант требует скачивания многотонных SDK и долгого колдовства. Хотя, напомню о безопасности, и скажу, что второй вариант не канает для супер-сервера-всея-руси.
После выполнения этих действий, вы будете готовы писать свой первый скрипт. Для начала, рекомендую создать для него файл:

New-Item -type file $PROFILE

Переменная $PROFILE содержит в себе адрес файла с вашим профилем в PS. Этот файл будет запускаться в тот момент, когда вы стартуете PS. Плюс заключается в том, что вы можете нашпиговать свой профиль разными мелкими и полезными скриптами, которые помогут вам автоматизировать производство.
Теперь вы можете начать редактирование своего профиля:

vim $PROFILE

(О, кстати, я вам не сказал, но в PS, на мой взгляд, лучше всего смотрится текстовый редактор vim. Возможно кто-то назовёт меня настоящим извращенцем, но на самом деле, я уже не раз пытался использовать что-то другое, но всегда возвращался к виму. Попробуйте и вы. Его не просто изучить с нуля, но если вы поймёте основы, то сможете очень быстро и удобно редактировать тексты. )
Ладно, теперь повторим эту команду без того, чтобы умничать:

notepad $PROFILE

Ну, вот, например, то, что лежит у меня в профиле

$webClient =  New-Object System.Net.WebClient
$cred = New-Object System.Net.NetworkCredential("login", "Pass")
$webClient.Proxy = New-Object System.Net.WebProxy("www.proxy.adrress", $true, $null, $cred)

Так как мы используем прокси сервер, а вэб клиент является моим любимым инструментом для работы, то я уже заготовил для себя переменную с этим клиентом, чтобы иметь возможность безболезненно подключаться к интернету и не отягощать себя вводом пароля.
Что ещё можно запихнуть в профиль?
Всё что угодно. Настройки цвета окна, ваши любимые функции и алиасы. Алиасы на ваши излюбленные программы и скрипты автоматизации…

На самом деле, я уже написал достаточно много. Вы увидели для себя кое-что новое. Я прекрасно знаю, что уровень этой статьи — для начинающих, но и продвинутые админы найдут для себя несколько интересных моментов. Моей задачей было предоставить вам возможность получить общее представление о том, что вы можете сделать.
Что же, вот, напоследок, вам задачи, над которыми можно поломать голову и решить интересные проблемы:
Написать скрипт, который сортирует изображения по папкам, исходя из их размера (для получения размера файла можно использовать дотнет объекты или ком объекты, предоставляемые эксплорером)
Для выполнения этого, вам уж точно понадобиться хорошо изучить Where-Object или Foreach-Object.

Написать простой NMAP
Что будет, если запустить команду Пинг в цикле? А теперь, возьмите выход от этой команды и пропарсите его как строку. Вам однозначно придётся прочитать мануал по -le -ge и том, как работать со строками.

Написать парсер для башорга.
Чтобы, после логина в систему, вам на выбор выдавалась цитата из лучших за последние пять лет. Тут можно использовать регэкспы, с которыми PS очень хорошо дружит.

Поиграться с переменной $host и сделать из синего экрана Матрицу!

Что ещё можно делать? Матёрые COM программисты найдут для себя отличный способ повеселиться, когда обнаружат, что new-object имеет ключ -comObject. Фактически, это открывает вам ворота к полному управлению практически любой функцией локального и удалённого компьютера.

Ещё хочу заметить, что последние версии программного обеспечения от Microsoft поддерживают работу в PowerShell. Например, есть SQL PowerShell, который поставляется с 2008 сиквелом и позволяет сделать ls по записям в любой таблице. Это даёт ещё больший простор для фантазий.

Так же, хочу заметить, что комьюнити по разработке на PS очень сильно растёт и ширится. В частности, вы можете найти скрипты, готовые для чего угодно — например, вы можете нагуглить себе способ управления ITunes через PowerShell или способ использования Google Desktop Search в PS.

Что же, мой неинтересующийся друг, надеюсь, я дал тебе что-то интересное, и ты теперь возьмёшься за покорение интерпретатора, который действительно поможет тебе упростить твою нелёгкую программерскую жизнь и даст тебе возможность автоматизировать больше и быстрее. Очень приятно, что ты прочитал мою статью. Спасибо большое, я могу продолжать конкретно описывать определённые области, если вдруг тебе станет очень интересно.

Примеры PowerShell скриптов для Windows

В админиcтрировании всегда есть место творчеству. Хочешь сделать какую-нибудь автоматизацию рутинной задачи? Пожалуйста! Нужно что-то регулярно проверять на активность? Не вопрос! Хочешь обработать какой-нибудь гигантский отчет и вывести только актуальные данные? Тоже можно. Все эти и многие другие задачи лучше всего решать при помощи скриптов, и язык PowerShell в случае с Windows — оптимальный выбор.

Что такое PowerShell и чем он хорош

Пользователи UNIX и Linux, а с какого-то мoмента и macOS привыкли к тому, что под рукой всегда есть Bash — немного старомодное, но универсальное и мощное средство, при помощи которого всего парой строк можно творить удивительные вещи. Прописываешь новый скрипт в cron — и готово, он уже крутится на твоем компьютере или на сервере и незаметно делает что-нибудь полезное.

Возвращаясь в Windows (а без этого иногда никак), понимаешь, что скрипты .bat хоть и хороши, но спасают не всегда: очень уж ограниченны их возможности. И если ты до сих пор считал, что PowerShell — это неведомая штуковина, ради которой нужно что-то там поднимaть и настраивать, то не спеши с выводами — он, если разобраться, совсем неплох.

Windows PowerShell — это расширяемое средство автоматизации с открытыми исходниками, которое состоит из оболочки (командной строки) и скриптового языка. Впервые он был показан в 2003 году (тогда он назывался Monad). PowerShell 2.0 вышел в составе Windows 7 и Windows Server 2008 R2 и с тех пор присутствует в Windows в качестве стандартного компонента. Его даже включили в Windows XP SP3. PowerShell построен на основе .NET Framework и интегрирован с ним. PowerShell может обращаться к COM, WMI и ADSI, а также, конечно же, исполняет консольные команды.

[ad name=»Responbl»]

В общем, «пошик» имеет крепкие связи с продуктами Microsoft, будь то Active Directory или почтовый сервер Exchange. Это позволяет без подключения к оснастке сервера обращаться к ним через консоль и отдaвать команды.

Если раньше ты не интересовался PowerShell, то, скорее всего, у тебя стоит вторая версия. Я рекомендую обновиться как минимум до третьей — она содержит куда больше возможностей и полезных фишек. Если не вдаваться в подробности, то в PowerShell 2.0 входит около десятка модулей и примерно 350 команд, а в PowerShell 3.0 уже около 2300 командлетов из более чем 70 модулей. «Хакер» также писал о том, чем отличается самый новый PowerShell пятой версии из Windows 10.

[ad name=»Responbl»]

Выбираем среду разработки и инструменты

Теперь давай разберемся, где удобнее всего писать код. Можно, конечно, и в «Блокноте», Notepad++ или Sublime. Но это в данном случае не самый грамотный выбор редактора. Лучше всего начинать знакомство с PowerShell, вооружившись идущим в комплекте PowerShell ISE.

PowerShell ISE

Это даже не редактор, а практически полноценная среда разработки. Здесь есть функция IntelliSense, которая позволяет просматривать перечень командлетов и их параметров, переменных, утилит и прочего. Поддерживаются сниппеты, есть возможность расширения нaбора функций за счет различных аддонов. Очень полезно и окно Commands. В нем можно составлять команды в визуальном режиме: выбираешь модуль, находишь нужный командлет и задаешь ему необходимые параметры. Получившуюся команду можно скопировать в консоль или сразу запустить на выполнение. В общем, этакий конструктор для админа. Ну и конечно, есть подсветка синтаксиса, дебаггер и многое другое.

Тем не менее у PowerShell ISE есть и достойные конкуренты. Один из них — Dell PowerGUI.

PowerGUI — это визуальное дополнение к PowerShell. Оно упрощает сборку собственных сценариев до выбора необходимых командлетов. Берешь то, что нужно для решения задачи, и перетаскиваешь части кода, пока не получишь скрипт. Одна из главных фишек PowerGUI — это Power Packs, готовые скрипты, опубликованные сообществом пользователей и выложенные в свобoдный доступ. Тут есть и простенькие команды вроде добавления пoльзователей, и сложные — к примеру, управление свитчами и виртуальными машинaми. Все их легко дополнять и модифицировать в соответствии с нуждами.

powergui

PowerShell Studio 2015 фирмы Sapien — бoлее продвинутая среда, которая рассчитана на совместную разработку одного проекта большим количеством участников. Если ты когда-нибудь имел дело с Visual Studio, то, думаю, заметишь сходство. Среди полезных фишек PowerShell Studio — панель Ribbon, поддержка удаленной отладки, а также функции компилятора, которые позволяют включить скрипты в исполняемые файлы. Есть поддержка разных версий PowerShell.

PowerShell Studio 2015

Стоит упомянуть и Script Browser для Windows PowerShell ISE. Это не среда разработки, но вeсьма интересный инструмент, разработанный в Microsoft. Script Browser открывает доступ к базе готовых скриптов, которые можно использовать в качестве образцов для написания своего кода. А еще эта штука умеет анализировать код, который ты пишешь, и подсказывает, как его улучшить.

Script Browser для Windows PowerShel

Несколько полезных трюков

Разобравшись с редактором, можно приступать к написанию кода. PowerShell — несложный язык, и, я думаю, ты быстро разберешься, что к чему. Команды здесь называются командлетами, и каждый из них состоит из двух частей. Сначала идeт действие, например Get, Set, Add, Invoke, Remove. Затем указывается то, на что действие направлено: Service, VM, AzureAccount, DHCPServerSetting. Каждая часть отделяется от другой дефисом. Получается, к примеру, get-process. Это, кстати, полезная команда, которая выводит список процессов. Скажем, если написать

get-process BadTh*

увидим что-то такое:

Handles  NPM(K)  PM(K)    WS(K)    VM(M)  CPU(s)  Id    ProcessName
———      ———     ———      ———      ———    ———     ———   ———
28       4       -210844  -201128  -163   25.67   2792  BadThread

Теперь можно завершить зависший процесс:

stop-process -id 2792

Хочешь посмотреть права на директорию? Сделать это помогает такой командлет:

E:>Get-Acl N:Data

Можно проcмотреть рекурсивно, правда уже чуть с более сложной логикой:

E:>Get-ChildItem N:Data -recurse | Get-Acl

Если не можешь понять, что делает какой-то командлет, напиши следующее (заменив Get-Process на название неизвестного командлета):

Get-Help -Name Get-Process

Можно также выполнить

Get-Help -Name Get-*

В этом случае будет выведен весь список возможных вариантов.

Теперь давай попробуем узнать что-нибудь о нашем домене через кoнсоль PowerShell. К примеру, давай посмотрим пользовательские аккаунты, у которых установлен неистекающий пароль:

Search-ADAccount -PasswordNeverExpires | FT Name,  ObjectClass, UserPrincipalName

Кстати, к каждому полю в окошке опции учетной записи или компьютера можно обратиться и считать данные. Таким образом можно делать целые срезы. Вот, к примеру, запрос на основе данных о телефонных номерах:

Get-AdUser -Filter * -Properties OfficePhone | FT OfficePhone,UserPrincipalName

[ad name=»Responbl»]

PowerShell в сравнении с bat

Иногда задачу можно решить как старым дедовским методом, так и при помощи PowerShell. Я рекомендую не лениться и использовать PS, хотя бы просто потому, что так ты его быстрее изучишь и сможешь применять в более сложных ситуациях. К тому же ты постепeнно оценишь его синтаксис — более элегантный и консистентный. Вот несколько примеров, как вещи делались раньше и как их можно сделать при помощи PowerShell.

Следующая командная строка перезагрузит компьютер с задержкой в десять секунд:

shutdown /r /m \\SERVER1 /f /t 10

На PowerShell это будет выглядеть вот так:

Start-Sleep 10
Restart-Computer -Force -ComputerName SERVER1

Вот так через bat можно перезагрузить службу dnscache (или любую другую):

sc stop dnscache
sc start dnscache

В PowerShell это будет так:

Restart-Service dnscache

Мап диска в bat:

Net use L: \\server1\c$

И в PowerShell:

New-PSDrive -name L -psprovider FileSystem -root \\server1\c$

Да, иногда приходится печатать чуть больше букв, но читаются команды PS гораздо лучше. И это не говоря уже про разные новые возможности.

[ad name=»Responbl»]

Удаленное управление с PowerShell

В основном описанные в статье команды выполняются на том же компьютере, на котором они запущены. Проще говоря, команды для управления AD выполнять нужно на сервере, где контроллер домена и установлен, что, согласиcь, на корню рубит удобство и автоматизацию. Для выполнения команд удалeнно, что нам и требуется, надо пользоваться специальными командлетами. К пpимеру, для подключения к удаленному компьютеру и перезапуску там спулера пeчати вводи

Enter-PSSession -ComputerName SRV4
Restart-Service -Name spooler

Более подробно читай тут.

Что почитать еще

Книжек и прочих обучающих материалов по PowerShell огромное количество. Есть как справочники, так и учебные туториалы. Начать можно с сайта Microsoft, где есть неплохие видеоуроки.

В деле немало поможет и книга «Master-PowerShell» Тобиаса Велтнера. В ней автор охватывает многие понятия вроде массивов, хеш-таблиц, конвейеров, объектов, функций, обработки ошибок, регулярных выражeний и так далее. Заодно подробно рассматривается XML и разные аспекты администрирования. Увы, на русский эта книга не переведена.

Из русскоязычных мануалов по PowerShell мне попадался «Windows PowerShell 2.0. Справочник администратора» Уильяма Станека — он весьма неплох.

На «Хабрахабре» есть перевод полезной статьи Джеффери Хикса об администрировании Active Directory при помощи PowerShell.

[ad name=»Responbl»]

Итого

Как видишь, все не так сложно, как кажется на первый взгляд. Главное — четко понимать, что нужно на выходе, и на этом основании выбирать командлеты. А с удобным редактором это делaть куда легче. Доступность разнообразных заготовок может заметно упростить решение повседневных задач администрирования. Знания «пошика» прокачаешь по ходу дела, а это в работе с Windows совсем не лишнее.

Click to rate this post!

[Total: 17 Average: 3.9]

7 скриптов для Windows, которые помогут сэкономить время | GeekBrains

Основы скриптов на PowerShell.

https://d2xzmw6cctk25h.cloudfront.net/post/998/og_cover_image/136640dcd4ae5c224e8596715579ad95

Если вы только недавно встали на путь программирования и ещё даже не пробовали поиграться с установленной операционной системой, то манипулирование с помощью скриптов может вызвать резонные вопросы необходимости и удобства. Однако, даже если опустить тот простой факт, что они помогают лучше понять, как функционирует ОС, в будущем при создании приложений, исполнение сценариев может оказаться крайне полезным навыком.

Для исполнения следующих скриптов мы обратимся к PowerShell. Любой системный администратор (по профессии или в душе) знает его возможности и периодически пользуется, для всех остальных это просто интерфейс командной строки или иностранное слово. На популярных ресурсах вы можете найти уйму идей, как использовать PowerShell для развлечения и дела, здесь же мы рассмотрим лишь простые скрипты, которые помогут войти в курс дела.

Выключение и перезапуск

Итак, самая простая операция выключения вашего компьютера. Открываем блокнот, прописываем:

shutdown -s -t 0

Сохраняем файл, как *.cmd (*- имя вашего файла, например shutdown.cmd) и не забудьте в типе выбрать “все файлы”. Всё, исполняемый файл по запуску выключит ваш компьютер. “-s”, в данном случае означает выключение, замените на “-r” — получите перезагрузку. “-t” — таймер, у нас он установлен на 0 секунд, но если установить на 60 — получите выключение через 60 секунд.

Удаляем ненужное

В различных сборках, предустановленных на компьютер или ноутбук, вы можете наткнуться на массу абсолютно ненужных пакетов приложений. Удалить их с помощью скрипта проще простого:

get-appxpackage -name *APPNAME* | remove-appxpackage

Как вы понимаете, *APPNAME* — название неинтересующей надстройки. Да, удалять эти пакеты можно стандартным путём или через специальные программы, но вы можете создать скрипт, который удалит их все одним двойным кликом.

Управляем процессами

Есть в PowerShell две полезные команды, которые позволят бороться с ветряными мельницами (процессами, снижающими быстродействие). Вывести их на экран можно просто прописав:

 Get-Service

или информацию о конкретном сервисе под кодовым названием *NAME* (на этом месте должно быть название интересующего сервиса):

Get-Service *NAME*

Но это можно сделать в диспетчере задач, а вот действительно полезным может оказаться создание файла, который по клику закрывал бы все процессы с повышенным потреблением ресурсов (браузеры, антивирусы и пр. ). Для этого воспользуйтесь командой Stop-Service:

Stop-Service -Name *ANTIVIRUS*

Stop-Service -Name *BROWSER*

Названия для замены указаны в * *.

Переименовываем группу файлов

Ещё одна назойливая проблема: вы скопировали с фотоаппарата или телефона изображения. Огромная куча фотографий, которые называются однотипно вроде HGNMD034, где HGNMD — название общей директории, объединяющей файлы, например, отснятые за один день. Для того, чтобы сделать название этих файлов приятнее или иметь возможность объединить несколько папок, не получив при этом хронологическую путаницу из-за имен, можно использовать скрипт группового переименования:

$path = «$comp\desktop\journey\russia»
$filter = ‘*.jpg’
get-childitem -path $path -filter $filter |
rename-item -newname {$_.name -replace ‘HGNMD’,’RUSSIA’}

В первой строке в кавычках укажите точный путь к файлам. Во второй строке — расширение файлов, подлежащих изменению. В последней строке вместо “HGNMD” — общее в названиях файлов, подлежащее замене, на что-то, вместо “RUSSIA” — имя, которое вы хотите присвоить. Если данный скрипт опять сохранить в качестве исполняемого файла, то подобные однотипные операции будут отнимать у вас всего несколько секунд времени.

Ищем файлы

Ещё одна простая задача, реализуемая на PowerShell — поиск файлов в директории. В данном случае рассмотрим поиск log-файлов:

Get-Childitem C:\Windows\*.log

Или чуть более сложный пример, когда поиск будет производиться ещё и в подпапках:

Get-ChildItem C:\Windows\* -Include *.log -Recurse -Force

Это чуть более правильная и полная запись, где “Include” — указывает на искомую часть, “Recurse” — на поиск во вложенных каталогах, “Force” — поиск включает в себя системные и скрытые файлы.

Справка

Итак, с общими принципами функционирования PowerShell мы более-менее разобрались. Если что-то непонятно — обратитесь к справочной информации следующим образом:

Get-Help Services

Это команда, которая выведет на экран все доступные команды с кратким описанием. Хотите подробнее? Нет ничего проще:

Get-Help -Name *CMDLET*

Где вместо *CMDLET* вставьте любую интересующую команду.

Находим данные

Теперь перейдём к простым скриптам, описанным чуть более сложными командами. Например, с помощью PowerShell вы можете выудить почти всю информацию о железе и комплектующих. Как вариант, вот скрипт для оценки уровня заряда аккумулятора:

Add-Type -AssemblyName System.Windows.Forms
[Windows.Forms.PowerStatus].GetConstructor(‘NonPublic, Instance’, $null, [Type[]]@(), $null ).Invoke($null)

Архитектура процессора удалённого компьютера:

[PSObject].Assembly.GetType( ‘System.Management.Automation.PsUtils’
).GetMethod(‘GetProcessorArchitecture’, [Reflection.BindingFlags]40
).Invoke($null, @())

Иногда важной задачей бывает проверка прав администратора у текущего пользователя. Вот простой способ на PowerShell:

[PSObject].Assembly.GetType(‘System.Management. Automation.Utils’).GetMethod(
‘IsAdministrator’, [Reflection.BindingFlags]40).Invoke($null, @())

На этом пока остановимся. Как вы наверное убедились, PowerShell не самый сложный, но очень полезный инструмент, который способен выполнять, как простейшие операции, так и достаточно сложные. Однако PowerShell не единственный инструмент для создания скриптов для Windows. Но об этом в следующий раз.

Начало карьеры: интенсив «Основы веб-разработки».

Как писать и как запускать скрипты PowerShell

Программа PowerShell — это альтернативная командная строка с обширной функциональностью. Многие владельцы компьютеров, которые неплохо ориентируются в системных процессах, интересуются возможностями её использования на Windows 10 и предыдущих версиях этого обеспечения, чтобы менять конкретные процессы и настройки ПК под себя.

В использовании программы PowerShell нет ничего сложного. Просто следуйте всем инструкциям из этой статьи и у вас все получится

Если вы не являетесь знатоком в подобной тематике, только начинаете изучение командных строк и действий, доступных к выполнению в них, вам будет полезно узнать ответы на главные вопросы по пользованию таким приложением. Например, как запустить Windows PowerShell ISE Windows 10 и писать, работать со скриптами.

Как открыть PowerShell?

Это можно сделать несколькими следующими способами:

  • Через Пуск — вы найдёте приложение в общем списке компонентов под буквой W.
  • При помощи поиска в Панели задач — откройте её, и введите слово PowerShell для поиска.
  • Используя меню «Выполнить» — запустите его через комбинацию Win+R и напишите название утилиты, после чего она будет найдена в системе.
  • В коммандере задайте действие PowerShell — но, вы должны знать, что будете работать с приложением через уже запущенную строку, а не в отдельном окне.
  • В параметрах Windows выберите «Свойства панели задач» и меню «Пуск». Во вкладке «Навигация» поставьте флажок на строке «Заменить командную строку оболочкой PowerShell…». Теперь вы сможете включать утилиту комбинацией Win+X.

Как писать и запускать скрипты?

Как создать скрипт PowerShell и запустить его? Это можно попросту сделать в блокноте — используя его, укажите в новом документе необходимые вам команды. После сохраните его, но поменяйте формат на .ps1 — именно такое расширение имеют файлы этой системной утилиты.

Писать скрипты в самом приложении можно так:

  • Запустите его.
  • Нажмите на пункт «Создать».
  • Или кликните на «Файл», и в появившемся списке выберите «Создать».
  • Напишите все команды, которые нужно выполнить, сохраните файл.

Скрипты ещё можно писать и редактировать в FAR Manager, но их нельзя использовать непосредственно в таком приложении, ведь оно отображает файлы этого типа через стандартную строку cmd. Однако прочие действия выполняются таким же образом, как и в «родной» утилите.

Запустить скрипт вы сможете таким образом:

  1. Зайдите в PowerShell от имени администратора.
  2. При помощи команд cd укажите месторасположение требуемого файла. Например, e: cd\ cd work .\ имя_файла. Ps1, или e: \work\ имя_файла.ps1
  3. В этом случае e: — имя жёсткого диска, где находится файл.
  4. Жмите Enter.

Использование PowerShell ISE

Если вы создаете свои собственные сценарии или редактируете другие сценарии, вы, вероятно, будете использовать редактор сценариев, например PowerShell ISE или, возможно, Visual Studio (VS) Code .Поскольку ISE поставляется с Windows, давайте сосредоточимся на этом методе в этом руководстве.

Для вызова сценария через ISE:

  1. Перейдите в меню «Пуск», найдите PowerShell ISE и откройте его.
Поиск PowerShell ISE в меню «Пуск»

2. Щелкните Файл Откройте и найдите свой сценарий.

Открыть скрипт с помощью меню «Файл»

3. Открыв сценарий, щелкните зеленую кнопку запуска, чтобы запустить сценарий. Эта кнопка вызовет скрипт во встроенном терминале PowerShell внизу.

Запуск сценария с помощью PowerShell ISE

Выходные данные примера сценария

Сценарий PowerShell иногда может возвращать выходные данные. Это происходит, когда скрипт, который вы выполняете, построен для возврата объектов , который является фундаментальным компонентом PowerShell.

Связано: Назад к основам: Понимание объектов PowerShell

Если вы запустите пример сценария GetServices.ps1 , вы увидите следующее. Этот сценарий запускает командлет Get-Service , который возвращает все службы, установленные на вашем локальном компьютере с Windows.

  PS>. \ GetScripts.ps1
Листинг компьютерных услуг

Название статуса DisplayName
------ ---- -----------
Запуск aakore Acronis Agent Core Service
Остановлена ​​активация агента AarSvc_1b668d, среда выполнения_1b668d
Запуск AcronisActivePr ... Служба активной защиты Acronis
Запуск AcronisCyberPro ... Служба киберзащиты Acronis
Запуск службы AcrSch3Svc Acronis Scheduler2
Запуск AdobeARMservice Adobe Acrobat Update Service
Запуск AdobeUpdateService AdobeUpdateService
Запуск AGMService Adobe Genuine Monitor Service
Запуск AGSService Adobe Genuine Software Integrity Se...
---- Усечено ----
  

Запуск сценария PowerShell из сценария

Допустим, у вас есть два скрипта, и вы хотите, чтобы один вызывал другой. Возможно, у вас есть сценарий с именем GetUser.ps1 и сценарий с именем ResetPassword.ps1 . Внутри сценария GetUser.ps1 вы хотите выполнить ResetPassword.ps1 , чтобы сбросить пароль пользователя.

Внутри вызывающего сценария ( GetUser.ps1) вы должны добавить строку для выполнения другого сценария, как если бы вы вызывали сценарий из командной строки.

Как видите, у вас есть несколько вариантов. Обычно вам следует выбрать запуск другого сценария в том же сеансе или области, чтобы упростить работу, если у вас нет особой причины запускать сценарий в другом сеансе PowerShell.

  ## Для запуска другого сценария в новом сеансе
powershell.exe. \ ResetPassword.ps1

## Чтобы запустить другой скрипт в том же сеансе
. \ ResetPassword.ps1  

Учебное пособие по созданию сценариев Windows PowerShell для начинающих

Автоматизируйте это.Теперь, где этот сценарий…
Предупреждение: PowerShell вызывает привыкание.

Учебное пособие по

Meet PowerShell

Windows PowerShell — это объектно-ориентированный механизм автоматизации и язык сценариев с интерактивной оболочкой командной строки, предназначенный для помощи ИТ-специалистам в настройке систем и автоматизации административных задач. Вы можете найти его в любой современной ОС Windows, начиная с Windows 2008R2. Изучение Windows PowerShell похоже на обучение использованию универсального многофункционального инструмента. В этом посте я расскажу об основах создания сценариев PowerShell, чтобы вам было проще выполнять практически любую административную задачу, связанную с вашей ИТ-средой Windows.

Итак, приступим к изучению PowerShell.

PowerShell предлагает как параметр командной строки, так и интегрированную среду сценариев (ISE):

  • Чтобы запустить командную строку PowerShell, введите powershell.exe в меню «Пуск» Windows. Вы увидите следующий экран:

  • Чтобы запустить PowerShell ISE, введите powershell_ise.exe в меню «Пуск». Использование PowerShell ISE является предпочтительным способом работы с языком сценариев, поскольку он обеспечивает подсветку синтаксиса, автоматическое заполнение команд и другие функции автоматизации, которые упрощают разработку и тестирование сценариев.

Подготовка к запуску сценариев PowerShell

Сценарии

PowerShell хранятся в файлах .ps1. По задумке вы не можете запустить сценарий, просто дважды щелкнув файл; это помогает избежать случайного повреждения ваших систем. Вместо этого, чтобы выполнить сценарий, щелкните его правой кнопкой мыши и выберите «Выполнить с помощью PowerShell»:

Кроме того, существует политика, ограничивающая выполнение сценария. Вы можете проверить эту политику, выполнив команду Get-ExecutionPolicy в PowerShell:

Вы получите одно из следующих значений:

  • Restricted — Скрипты не разрешены.Это настройка по умолчанию, поэтому вы увидите ее при первом запуске команды.
  • AllSigned — Вы можете запускать сценарии, подписанные доверенным разработчиком. Если этот параметр установлен, перед выполнением сценарий попросит вас подтвердить, что вы хотите его запустить.
  • RemoteSigned — Вы можете запускать свои собственные сценарии или сценарии, подписанные доверенным разработчиком.
  • Без ограничений — Вы можете запускать любой сценарий, какой захотите.

Чтобы начать работу с PowerShell, вам нужно изменить параметр политики с Restricted на RemoteSigned с помощью команды Set-ExecutionPolicy RemoteSigned:

Командлеты

PowerShell

О командлетах

Командлет — это команда PowerShell с предопределенной функцией, аналогичная оператору в языке программирования.Вот несколько ключевых вещей, которые нужно знать о командлетах:

  • Существуют системные, пользовательские и настраиваемые командлеты.
  • Командлеты выводят результаты как объект или как массив объектов.
  • Командлеты
  • могут получать данные для анализа или передавать данные в другой командлет с помощью каналов (я подробнее остановлюсь на каналах чуть позже).
  • Командлеты нечувствительны к регистру. Например, не имеет значения, набираете ли вы «Get-ADUser», «get-aduser» или «gEt-AdUsEr».
  • Если вы хотите использовать несколько командлетов в одной строке, вы должны разделить их точкой с запятой (;).

Формат командлета

Командлет всегда состоит из глагола (или слова, которое функционирует как глагол) и существительного, разделенных дефисом (правило «глагол-существительное»). Например, некоторые из глаголов включают:

  • Get — Чтобы получить что-то
  • Установить — Чтобы что-то определить
  • Start — запустить что-то
  • Stop — Чтобы остановить что-то, что работает
  • Out — Чтобы вывести что-то
  • New — Создать что-то («новый», конечно, не глагол, но он функционирует как единое целое)

Для практики попробуйте выполнить следующие командлеты:

  • Get-Process — показывает процессы, запущенные в данный момент на вашем компьютере:

  • Get-Service — Показывает список сервисов с их статусом
  • Get-Content — показывает содержимое указанного файла (например, Get-Content C: \ Windows \ System32 \ drivers \ etc \ hosts)

Доступные командлеты

Хорошие новости — вам не нужно запоминать все командлеты.Вы можете вывести список всех командлетов, выполнив командлет Get-Help -Category, который вернет следующее:

Вы также можете создавать свои собственные командлеты.

Параметры

Каждый командлет имеет несколько параметров, определяющих его действия. Интегрированная среда сценариев PowerShell автоматически предложит все допустимые параметры и их типы после ввода командлета и дефиса (-):

Например, следующий командлет показывает все службы, имена которых начинаются с буквы «W»:
Get-Service -Name W *

Если вы забыли параметры командлета, просто используйте сценарий, подобный следующему, который отобразит параметры для командлета Get-Process:

Get-Process | Get-Member

Если вы все еще не нашли нужный командлет, вы можете убедиться, что справка актуальна, а затем получить примеры для командлета (например, Get-Process), используя следующий сценарий:

 Update-Help # для обновления данных справки
Get-Help Get-Process-Примеры 

Псевдонимы

Вы также можете использовать псевдонимы, которые представляют собой сокращенные имена командлетов.Например, вместо «Get-Help» можно использовать просто «Help». Попробуйте выполнить следующие две команды и посмотрите, получите ли вы тот же результат:

  • Блокнот Start-Process
  • запустить блокнот

Аналогичным образом, чтобы остановить этот процесс, вы можете использовать любую из следующих команд:

  • Stop-Process -Name notepad
  • spps -Имя блокнота

Чтобы увидеть все псевдонимы, выполните командлет Get-Alias.

Комментарии к сценарию помогут вам и вашим коллегам лучше понять, что делает этот сценарий.Строковый комментарий — это одна строка, которая начинается со знака числа (#), а комментарии блока начинаются и заканчиваются числовыми знаками и угловыми скобками и распространяются на несколько строк.

Трубы

Канал передает данные от одного командлета к другому. Раньше я использовал канал для получения всех свойств объекта.

Например, если вы выполните следующий скрипт, вы получите все службы, отсортированные по их статусу:

 Get-Service | Сортировка-Объект-Статус собственности 

Вы также можете использовать конвейер для вывода текста в файл с помощью следующего сценария:

 "Привет, мир!" | Исходный файл C: \ ps \ test.txt 

Можно использовать несколько каналов. Например, следующий скрипт перечисляет все службы, причем первый канал исключает остановленные службы, а второй канал ограничивает список только отображаемыми именами:

 Get-Service | ГДЕ {$ _. Status -eq "Выполняется"} | ВЫБРАТЬ отображаемое имя
# «$ _.» определяет текущий элемент в трубе 

Сводка

Давайте кратко подведем итоги этого руководства по Windows PowerShell. Теперь вы знаете, как запустить PowerShell, как изменить политику выполнения, что такое командлет, как передавать данные с помощью конвейера и как получить свойства объекта.Имейте в виду, что если вы что-то забудете, вы всегда можете использовать командлет Get-Help.

Надеюсь, этот PowerShell для начинающих оказался вам полезен!

В следующих частях этого бесплатного руководства по PowerShell я расскажу о переменных, массивах и циклах, которые используются в сценариях PowerShell для упрощения администрирования серверов Windows.

А пока вы можете проверить следующие сценарии PowerShell, используемые ИТ-специалистами для решения конкретных случаев:

  1. Как получить отчеты о членстве в группах пользователей AD
  2. Как найти отключенных или неактивных пользователей в Active Directory
  3. Как найти неактивные компьютеры в Active Directory
  4. Как получить список учетных записей пользователей с истекшим сроком действия в AD
  5. Как найти заблокированные учетные записи пользователей в Active Directory
  6. Как вывести список всех учетных записей пользователей в системе Windows
  7. Мониторинг журналов событий с помощью PowerShell
  8. Как настроить уведомление об изменении группы локальных администраторов с помощью PowerShell
  9. Как получить уведомление об просроченном пароле в Active Directory с помощью PowerShell
  10. Запрос журнала событий с помощью PowerShell
  11. Пересылка журнала событий Windows в Windows Server 2008
  12. Сочетания клавиш для системных администраторов
  13. Как обнаруживать новых пользователей в Active Directory с помощью PowerShell
  14. Office 365: настройка бессрочных паролей пользователей
  15. Как найти неактивные компьютеры в Active Directory с помощью PowerShell
  16. Windows PowerShell и командная строка (cmd)
  17. Как управлять списками ACL файловой системы с помощью PowerShell
  18. Управление файлами PowerShell
  19. Как создать новых пользователей Active Directory с помощью PowerShell
  20. Как добавлять и удалять группы AD и объекты в группах с помощью PowerShell
  21. Управление подразделениями и перемещение их объектов с помощью PowerShell
  22. Как автоматизировать сценарии PowerShell с помощью планировщика заданий
  23. Как создавать, удалять, переименовывать, отключать и присоединять компьютеры в AD ssing PowerShell

И если вы только начинаете работать с PowerShell, я рекомендую следующие ресурсы:

Ян — бывший специалист по техническому маркетингу в Netwrix.Он ИТ-специалист с более чем 15-летним опытом и заядлый блоггер PowerShell.

Напишите и запустите свой первый сценарий Windows PowerShell

Системным администраторам нравятся сочетания клавиш и методы, которые экономят время. Я думаю, что это вдвойне усложняет управление множеством компьютеров.

Введите Windows PowerShell

Несмотря на то, что существует множество отличных языков сценариев, он не намного лучше, чем Windows PowerShell. Если вы используете последнюю версию Microsoft Windows, возможно, у вас уже установлена ​​ее версия.

Как создать сценарий PowerShell?

PowerShell сохраняет скрипты в формате ps1. Для нашей демонстрации были созданы и файл, и папка.

  C: \ Scripts \ My First Script.ps1  

Не стесняйтесь использовать свои собственные имена папок и файлов.

Сначала создайте новый файл ps1 и добавьте командлет Write-Host (cmdlet — это другое слово для команды)

  Write-Host «Hello, World!»  

Сохраните файл ps1 и вернитесь в окно PowerShell. Наиболее распространенный метод запуска сценария — его вызов в терминале PowerShell. (Вы также можете использовать PowerShell ISE или VS Code)

  & "C: \ Scripts \ My First Script.ps1"  

Попробуйте эту команду. Вы должны получить сообщение об ошибке, в котором говорится, что в вашей системе отключены сценарии.Это сделано из соображений безопасности.

Чтобы предотвратить запуск вредоносных сценариев в вашей системе, PowerShell применяет политику выполнения. Вы можете использовать 4 политики выполнения:

Запрещено Сценарии не запускаются. Период. (Настройка по умолчанию)
RemoteSigned Будут выполняться локально созданные сценарии. Сценарии, созданные на другом компьютере, не будут выполняться, если они не подписаны доверенным издателем.
AllSigned Сценарии будут выполняться только в том случае, если они подписаны доверенным издателем (включая сценарии, созданные локально).
Без ограничений Все сценарии будут выполняться независимо от того, кто их создал и подписаны они или нет.

Чтобы использовать наш только что созданный сценарий, нам нужно будет изменить нашу политику выполнения, чтобы разрешить запуск нашего примера сценария. Поскольку у нас нет цифровой подписи для нашего нового сценария, наши параметры для настройки политики выполнения оставлены на «RemoteSigned» и «Unrestricted». Мы собираемся изменить его на RemoteSigned.

Чтобы изменить политику выполнения, нам нужно будет повторно открыть PowerShell в качестве администратора (в противном случае команда завершится ошибкой) и выполнить следующую команду:

  Set-ExecutionPolicy RemoteSigned  

Командлет Set-ExecutionPolicy запросит убедитесь, что вы действительно хотите изменить политику выполнения.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *