Написание и запуск сценариев в интегрированной среде сценариев Windows PowerShell — PowerShell
- Статья
- Чтение занимает 4 мин
Оцените свои впечатления
Да Нет
Хотите оставить дополнительный отзыв?
Отзывы будут отправляться в корпорацию Майкрософт. Нажав кнопку «Отправить», вы разрешаете использовать свой отзыв для улучшения продуктов и служб Майкрософт. Политика конфиденциальности.
Отправить
Спасибо!
В этой статье
В этой статье описано как создавать, редактировать, выполнять и сохранять скрипты в области скриптов.
Создание и выполнение сценариев
В области скриптов можно открывать и редактировать файлы Windows PowerShell. Сейчас нас интересуют следующие типы файлов Windows PowerShell: файлы скриптов (.ps1
), файлы данных скриптов (.psd1
) и файлы модулей скриптов (
). Эти типы файлов имеют цветовую подсветку синтаксиса в редакторе области сценариев. Другие стандартные файлы, которые можно открыть в области сценариев, — это файлы конфигурации (.ps1xml
), XML-файлы и текстовые файлы.
Примечание
Политика выполнения Windows PowerShell определяет, можно ли выполнять сценарии, загружать профили Windows PowerShell и файлы конфигурации. Политика выполнения по умолчанию, Restricted, запрещает выполнение сценариев и блокирует загрузку профилей. Чтобы изменить эту политику выполнения и разрешить загрузку и использование профилей, см. описание Set-ExecutionPolicy и about_Signing.
Создание файла сценария
Нажмите кнопку Создать
.ps1
), но его можно сохранить с новым именем и расширением. На одной вкладке PowerShell может быть создано несколько файлов сценариев.Открытие существующего сценария
Нажмите кнопку Открыть… на панели инструментов или откройте меню Файл и выберите пункт Открыть. В диалоговом окне Открыть выберите файл, который требуется открыть. Открытый файл появится в новой вкладке.
Закрытие вкладки сценария
На вкладке файла, которую нужно закрыть, щелкните значок закрытия (X) или откройте меню File (Файл) и выберите Close (Закрыть).
Если файл был изменен с момента последнего сохранения, будет предложено сохранить или отменить изменения.
Отображение пути к файлу
На вкладке файла наведите курсор на его имя. Появится подсказка с полным путем к файлу сценария.
Запуск сценария
Нажмите кнопку Выполнить сценарий на панели инструментов или откройте меню Файл и выберите пункт Выполнить.
Выполнение части сценария
- Выберите часть сценария в области сценариев.
- Нажмите кнопку Выполнить выделенный фрагмент на панели инструментов или откройте меню Файл и выберите пункт Выполнить выделенный фрагмент.
Остановка выполняемого сценария
Есть несколько способов остановить выполняемый скрипт.
- На панели инструментов щелкните Остановить операцию.
- Нажмите CTRL+BREAK.
- В меню Файл выберите Остановить операцию.
Нажатие клавиш CTRL+C также сработает, если нет выделенного текста. В противном случае нажатие клавиш CTRL+C приведет к копированию выделенного текста.
Написание и редактирование текста в области сценариев
Ввод текста в области сценариев
- Установите курсор в область сценариев, щелкнув кнопкой мыши любую ее часть или выбрав пункт Перейти в область сценариев в меню Вид.
- Создайте сценарий. Цветовая подсветка синтаксиса и заполнение нажатием клавиши TAB обеспечивают более широкие возможности для редактирования в интегрированной среде скриптов Windows PowerShell.
- Подробную информацию о заполнении нажатием клавиши TAB, помогающем при вводе кода, см. в статье How to Use Tab Completion in the Script Pane and Console Pane (Использование заполнения нажатием клавиши TAB в областях сценариев и консоли).
Поиск текста в области сценариев
- Чтобы найти текст в любой части скрипта, нажмите клавиши CTRL+F или выберите Find in Script (Найти в сценарии) в меню Edit (Правка).
- Чтобы найти текст после курсора, нажмите клавишу F3 или выберите Найти следующее в сценарии в меню Правка.
- Чтобы найти текст до курсора, нажмите клавиши SHIFT+F3 или выберите Find Previous in Script (Найти предыдущее в сценарии) в меню Edit (Правка).
Поиск и замена текста в области сценариев
Нажмите клавиши CRTL+H или в меню Edit (Правка) выберите Replace in Script (Заменить в сценарии). Введите текст, который нужно найти, и замещающий текст, затем нажмите клавишу ВВОД.
Переход к определенной строке текста в области сценариев
В области сценариев нажмите клавиши CTRL+G или выберите Go to Line (Перейти к строке) в меню Edit (Правка).
Введите номер строки.
Копирование текста в области сценариев
В области сценариев выделите текст, который требуется скопировать.
Нажмите клавиши CTRL+C, щелкните значок
Вырезание текста в области сценариев
- В области сценариев выделите текст, который требуется вырезать.
- Нажмите клавиши CTRL+X, щелкните значок Cut (Вырезать) на панели инструментов или выберите Cut (Вырезать) в меню Edit (Правка).
Вставка текста в области сценариев
Нажмите клавиши CTRL+V, щелкните значок Paste (Вставить) на панели инструментов или выберите Paste (Вставить) в меню Edit (Правка).
Отмена действия в области сценариев
Повторное выполнение действия в области сценариев
Нажмите клавиши CTRL+Y, щелкните значок Повторить на панели инструментов или выберите Повторить в меню Правка.
Сохранение сценария
Звездочка рядом с именем скрипта обозначает, что файл не был сохранен после изменения. После сохранения звездочка исчезает.
Сохранение сценария
Нажмите клавиши CTRL+S, щелкните значок Сохранить на панели инструментов или выберите Сохранить в меню Файл.
Сохранение сценария с определенным именем
- В меню Файл выберите пункт Сохранить как. Появится диалоговое окно Сохранить как.
- В поле Имя файла введите имя файла.
- В поле Тип файла выберите тип файла. Например, в поле Тип сохраняемого файла выберите «Скрипты PowerShell (
*.ps1
)». - Нажмите Сохранить.
Сохранение сценария в кодировке ASCII
По умолчанию интегрированная среда сценариев Windows PowerShell сохраняет новые файлы сценариев (.ps1
), файлы данных сценариев (.psd1
) и файлы модулей сценариев (.psm1
) в кодировке Юникод (BigEndianUnicode). Чтобы сохранить сценарий в другой кодировке, например ASCII (ANSI), используйте методы
Следующая команда сохраняет новый сценарий в кодировке 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 не изменяет кодировку файлов скриптов при использовании команд «Сохранить» или «Сохранить как».
См. также:
Примеры 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ми. Все их легко дополнять и модифицировать в соответствии с нуждами.
powerguiPowerShell 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 совсем не лишнее.
Создание и запуск файла сценария PowerShell в Windows 10
Windows 10 PowerShell – это средство командной строки, которое позволяет выполнять команды и сценарии для изменения параметров системы и автоматизации задач. Это похоже на командную строку, но PowerShell является более эффективным интерфейсом командной строки (CLI), который предоставляет широкий набор инструментов и обеспечивает большую гибкость и контроль (особенно для сценариев).
Скрипт – это просто набор команд, сохраненных в текстовый файл (с расширением .ps1), которые PowerShell может понять и выполнить в заданной последовательности. Единственное предупреждение заключается в том, что в отличие от командной строки, протокол безопасности по умолчанию предотвращает выполнение всех сценариев.
Это означает, что при двойном щелчке .ps1 файла в системе Windows 10 ничего не произойдёт, и если вы пытаетесь выполнить скрипт в PowerShell, вы получите сообщение об ошибке: «не может быть загружен, потому что запрещено выполнение сценариев в этой системе». Тем не менее, запускать сценарии на вашем устройстве довольно просто. Вам просто нужно включить правильную политику выполнения.
В этой версии урока по Windows 10 мы проведём вас шаг за шагом, чтобы вы смогли успешно запустить свой первый скрипт в PowerShell.
Создание файла сценария PowerShell
В Windows 10 файлы сценариев PowerShell можно создавать с помощью практически любого текстового редактора или консоли интегрированной среды сценариев (ISE).
Создание скрипта с помощью блокнота
Чтобы создать сценарий PowerShell с помощью блокнота, выполните следующие действия:
- Откройте приложение «Блокнот».
- Создайте или вставьте сценарий. Например:
Write-Host "«Поздравляем! Ваш первый скрипт успешно выполнен»"
Вышеприведенный скрипт просто выводит на экране фразу «Поздравляем! Ваш первый скрипт успешно выполнен».
- Сохраните файл под любым удобным названием, например, first_script.ps1
Создание сценария с помощью интегрированной среды сценариев
Кроме того, консоль PowerShell ISE можно использовать для кодирования сценариев в Windows 10. Интегрированная cреда сценариев является сложным инструментом, но вы можете начать работу с помощью этих шагов:
- Откройте системный поиск и введите запрос Windows PowerShell ISE, щелкните правой кнопкой мыши верхний результат, и выберите Запуск от имени администратора или выберите соответствующий параметр в правой колонке.
В PowerShell ISE создайте пустой файл .ps1, в котором можно создать или вставить скрипт. Например:
Write-Host "«Поздравляем! Ваш первый скрипт успешно выполнен»"
- Откройте меню Файл и нажмите кнопку Сохранить.
- Введите название сценария. Например, first_script_ise.ps1
- Сохраните скрипт.
Как только Вы выполнили эти шаги с помощью Блокнота или PowerShell ISE, сценарий готов к запуску, но он не будет выполнен. Это происходит потому, что параметры PowerShell по умолчанию всегда настроены на блокирование выполнения любого сценария.
Запуск файла сценария PowerShell
Чтобы запустить файл сценария в PowerShell, необходимо изменить политику выполнения, выполнив следующие действия:
- Откройте поиск и введите PowerShell, щелкните правой кнопкой мыши в верхний результат и выберите Запуск от имени администратора.
- Введите следующую команду, чтобы разрешить выполнение скриптов и нажмите клавишу Enter:
Set-ExecutionPolicy RemoteSigned
- Укажите тип А и ещё раз нажмите клавишу Enter.
Введите следующую команду для запуска скрипта и нажмите клавишу Enter:
& "C:\PATH\to\SCRIPT\first_script.ps1"
В приведенной выше команде обязательно измените PATH\to\SCRIPT на расположение вашего скрипта.
После выполнения этих шагов сценарий будет запущен, и если он был создан правильно, вы должны увидеть его вывод без проблем.
PowerShell в Windows 10 включает четыре политики выполнения:
- Restricted – останавливает выполнение скрипта.
- RemoteSigned – запускает скрипты, созданные на устройстве. Однако, сценарии, созданные на другом компьютере, не будут запускаться, если они не содержат подписи доверенного издателя.
- AllSigned – все скрипты будут работать до тех пор, пока они подписаны надежным издателем.
- Unrestricted запускает любой скрипт без каких-либо ограничений.
В приведенных выше шагах мы использовали команду, чтобы разрешить запуск локальных скриптов в Windows 10. Однако, если вы не планируете регулярно выполнять скрипты, можно восстановить настройки по умолчанию, используя те же инструкции, но на Шаге 4, обязательно используйте Set-ExecutionPolicy Restricted команду.
Как писать и как запускать скрипты 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. Однако прочие действия выполняются таким же образом, как и в «родной» утилите.
Запустить скрипт вы сможете таким образом:
- Зайдите в PowerShell от имени администратора.
- При помощи команд cd укажите месторасположение требуемого файла. Например, e: cd\ cd work .\ имя_файла. Ps1, или e: \work\ имя_файла.ps1
- В этом случае e: — имя жёсткого диска, где находится файл.
- Жмите Enter.
Программа обязательно покажет вам сообщение с текстом «Не удаётся загрузить файл ___ .Ps1, так как выполнение скриптов запрещено для этой системы…», когда вы будете первый раз запускать команду. Дело в том, что Windows оснащён защитой от вмешательства благодаря разработчикам, поэтому никто из пользователей по умолчанию не имеет доступа на выполнение таких действий. Но, это ограничение можно очень просто обойти.
Как? В тексте, возникающем вместе с ошибкой, будет рекомендация ввести команду get-help about_signing, чтобы получить больше информации. Вы можете выполнить эти указания, или использовать комбинацию Set-ExecutionPolicy remotesigned — после её ввода потребуется подтверждение, и ограничение будет снято.
Другие вопросы по пользованию
У многих возникает вопрос, как узнать версию PowerShell? Для этого выполните следующее:
- Откройте приложение.
- Введите $PSVersionTable.
- Если это ни к чему не привело, значит, у вас версия 1.0 — для неё есть команда $host.version.
- В ином случае появится подробная информация о том, какая версия приложения установлена на ПК.
Ещё один вопрос, на который стоит дать ответ — как удалить PowerShell? Для этого потребуются такие действия:
- Зайдите через Панель управления в меню установки и удаления программ.
- Найдите ветку Microsoft Windows
- Удалите обновление для компонента WindowsPowerShell (TM), следуйте инструкциям системы.
Теперь вы знаете всё о том, как писать и запускать скрипты PowerShell, сможете пользоваться такой командной строкой для многих операций в системе. Дополнительно вы всегда имеете возможность узнать версию этого продукта и даже частично удалить его — из-за того, что он установлен вместе с системными компонентами, полностью сделать это всё равно не получится. Посоветуем только быть аккуратным при выполнении всех подобных действий, чтобы не навредить компьютеру в целом.
Разрешить запуск скриптов PowerShell | internet-lab.ru
По умолчанию запуск скриптов PowerShell может быть запрещён.
Пытаюсь запустить скрипт, получаю ошибку:
Не удается загрузить файл. Файл не имеет цифровой подписи. Невозможно выполнить сценарий в указанной системе.
Посмотрим текущее значение политики выполнения скриптов PowerShell:
Get-ExecutionPolicy
Возможные варианты:
- Restricted – запрещен запуск скриптов PowerShell, можно выполнять только интерактивные команды.
- AllSigned – разрешено выполнять только скрипты с цифровой подписью от доверенного издателя.
- RemoteSigned – можно запускать локальные PowerShell скрипты без ограничения. Можно запускать удаленные PowerShell скрипты с цифровой подписью. Нельзя запускать PS1 файлы, скачанные из Интернета. В свойствах скачанного файла можно «Разблокировать» запуск скрипта.
- Unrestricted – разрешен запуск любых PowerShell скриптов.
- Bypass – разрешён запуск любых PowerShell скриптов. Эта политика обычно используется для автоматического запуска PS скриптов без вывода каких-либо уведомлений и не рекомендуется для постоянного использования.
- Default – сброс настроек выполнения скриптов на стандартные.
У меня установлена политика AllSigned, поэтому неподписанный скрипт не запустился.
Для изменения текущего значения политики запуска PowerShell скриптов используется командлет Set-ExecutionPolicy.
Set-ExecutionPolicy Bypass
Как видно из скриншота, политика запуска PowerShell скриптов изменилась, но… не изменилась. Такая ошибка появляется, если политики запуска PowerShell скриптов управляются групповыми политиками, например, если компьютер в домене.
В этом случае нам поможет реестр. В разделе
\HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Microsoft\Windows\PowerShell
Установить ExecutionPolicy=Bypass.
Ещё можно запустить скрипт с явно указанной политикой:
powershell.exe -noprofile -executionpolicy bypass -file c:\ps\hello.ps1
Или так:
Get-Content c:\ps\hello.ps1 | PowerShell.exe -noprofile -executionpolicy bypass
Можно установить не только политику запуска PowerShell скриптов, но и зону её действия с помощью параметра Scope.
Get-ExecutionPolicy -List
Например:
Set-ExecutionPolicy -Scope MachinePolicy -ExecutionPolicy Bypass –Force
Возможные варианты:
- LocalMachine — для всех пользователей данного компьютера. Значение хранится в реестре, в разделе HKEY_LOCAL_MACHINE.
- CurrentUser — для текущего пользователя. Хранится в разделе реестра HKEY_CURRENT_USER.
- Process — в текущем сеансе PowerShell. Значение хранится в переменной окружения $PSExecutionPolicyPreference и при закрытии сеанса удаляется.
- UserPolicy — для всех пользователей данного компьютера. Распространяется с помощью групповых политик. Значение хранится в разделе пользователя, политика применяется при входе пользователя в систему.
- MachinePolicy — действует на всех пользователей данного компьютера. Распространяется с помощью групповых политик. Значение хранится в разделе компьютера, политика применяется при загрузке системы.
7 скриптов для Windows, которые помогут сэкономить время | GeekBrains
Основы скриптов на PowerShell.
https://gbcdn.mrgcdn.ru/uploads/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. Но об этом в следующий раз.
Начало карьеры: интенсив «Основы веб-разработки».
Скрипты Windows PowerShell для работы с Active Directory
Скрипты Windows PowerShell для работы с Active DirectoryДобрый день уважаемые системные администраторы. Предлагаем подборку скриптов под PowerShell для работы с Active Directory.
Меню
Добавление пользователя в группу
Изменение вкладки Address
Изменение вкладки Organization
Изменение вкладки Profile
Изменение вкладки Telephone
Изменение общей информации о пользователе
Изменение одного атрибута пользователя
Создание доменных групп
Создание доменных пользователей
Создание и включение учетной записи
Добавление пользователя в группу
param($name,$group,$ou,$dc,[switch]$help) function funHelp() { [email protected]" DESCRIPTION: NAME: AddUserToGroup.ps1 Adds a user account to a group PARAMETERS: -name name of the user -ou ou of the group -dc domain of the user -group group to modify -help prints help file SYNTAX: AddUserToGroup.ps1 -name "cn=MyNewUser" -ou "ou=myOU" ` -dc "dc=nwtraders,dc=com" ` -group "cn=MyGroup" Adds a user named MyNewUser in the myOU organizational unit in the nwtraders.com domain to the MyGroup group in the same OU. AddUserToGroup.ps1 -help Displays the help topic for the script "@ $helpText exit } if($help){ "Obtaining help ..." ; funhelp } if(!$name -or !$dc -or !$group -or !$ou) { "Missing parameter ..." ; funhelp } $CLass = "User" "Modifying $name,$ou,$dc" $ADSI = [ADSI]"LDAP://$group,$ou,$dc" $ADSI.add("LDAP://$name,$ou,$dc")
Изменение вкладки Address
$objUser = [ADSI]"LDAP://cn=MyNewUser,ou=myTestOU,dc=nwtraders,dc=msft" $objUser.put("streetAddress", "123 main st") $objUser.put("postOfficeBox", "po box 12") $objUser.put("l", "Bedrock") $objUser.put("st", "Arkansas") $objUser.put("postalCode" , "12345") $objUser.put("c", "US") $objUser.put("co", "United States") $objUser.put("countryCode", "840") $objUser.setInfo()
Изменение вкладки Organization
$strDomain = "dc=nwtraders,dc=msft" $strOU = "ou=myTestOU" $strUser = "cn=MyNewUser" $strManager = "cn=myBoss" $objUser = [ADSI]"LDAP://$strUser,$strOU,$strDomain" $objUser.put("title", "Mid-Level Manager") $objUser.put("department", "sales") $objUser.put("company", "North Wind Traders") $objUser.put("manager", "$strManager,$strou,$strDomain") $objUser.setInfo()
Изменение вкладки Profile
$objUser = [ADSI]"LDAP://cn=MyNewUser,ou=myTestOU,dc=nwtraders,dc=msft" $objUser.put("profilePath", "\\London\profiles\myNewUser") $objUser.put("scriptPath", "logon.vbs") $objUser.put("homeDirectory", "\\london\users\myNewUser") $objUser.put("homeDrive", "H:") $objUser.setInfo()
Изменение вкладки Telephone
$objUser = [ADSI]"LDAP://cn=MyNewUser,ou=myTestOU,dc=nwtraders,dc=msft" $objUser.Put("homePhone", "(215)788-4312") $objUser.Put("pager", "(215)788-0112") $objUser.Put("mobile", "(715)654-2341") $objUser.Put("facsimileTelephoneNumber", "(215)788-3456") $objUser.Put("ipPhone", "192.168.6.112") $objUser.Put("info", "All contact information is confidential," ` + "and is for official use only.") $objUser.setInfo()
Изменение общей информации о пользователе
$objUser = [ADSI]"LDAP://cn=MyNewUser,ou=myTestOU,dc=nwtraders,dc=msft" $objUser.put("SamaccountName", "myNewUser") $objUser.put("givenName", "My") $objUser.Put("initials", "N.") $objUser.Put("sn", "User") $objUser.Put("DisplayName", "My New User") $objUser.Put("description" , "simple new user") $objUser.Put("physicalDeliveryOfficeName", "RQ2") $objUser.Put("telephoneNumber", "999-222-1111") $objUser.Put("mail", "<a href="mailto:[email protected]">[email protected]</a>") $objUser.Put("wwwHomePage", "<a href="http://www.mnu.msn.com"">http://www.mnu.msn.com"</a>) $objUser.setInfo()
Изменение одного атрибута пользователя
param($name,$property,$value,$ou,$dc,[switch]$help) function funHelp() { [email protected]" DESCRIPTION: NAME: ModifyUser.ps1 Modifies a user account PARAMETERS: -name name of the user to modify -ou ou of the user -dc domain of the user -property attribute to modify -value value of the attribute -help prints help file SYNTAX: ModifyUser.ps1 -name "CN=MyNewUser" -ou "ou=myOU" ` -dc "dc=nwtraders,dc=com" ` -property "SamaccountName" ` -value "MyNewUser" Modifies a user named MyNewUser in the myOU organizational unit in the nwtraders.com domain adds the SamaccountName attriute with a value of MyNewUser ModifyUser.ps1 -help Displays the help topic for the script "@ $helpText exit } if($help){ "Obtaining help ..." ; funhelp } if(!$name -or !$dc -or !$property -or !$value) { "Missing parameter ..." ; funhelp } $CLass = "User" "Modifying $name,$ou,$dc" $ADSI = [ADSI]"LDAP://$name,$ou,$dc" $ADSI.put($property, $value) $ADSI.setInfo()
Создание доменных групп
param($name,$ou,$dc,[switch]$help) function funHelp() { [email protected]" DESCRIPTION: NAME: CreateGroup.ps1 Creates a group PARAMETERS: -name name of the group to create -ou ou to create group in -dc domain to create group in -help prints help file SYNTAX: CreateGroup.ps1 -name "CN=MyNewGroup" -ou "myOU" ` -dc "dc=nwtraders,dc=com" Creates a group named MyNewGroup in the myOU organizational unit in the nwtraders.com domain CreateGroup.ps1 -name "CN=MyNewGroup" ` -dc "dc=nwtraders,dc=com" Creates a group named MyNewGroup in the users container in the nwtraders.com domain CreateGroup.ps1 -help Displays the help topic for the script "@ $helpText exit } if($help){ "Obtaining help ..." ; funhelp } if(!$name -or !$dc) { "Missing name parameter ..." ; funhelp } if($ou) { "Creating group $name in LDAP://$ou,$dc" $ADSI = [ADSI]"LDAP://$ou,$dc" } ELSE { "Creating group $name in LDAP://cn=users,$dc" $ADSI = [ADSI]"LDAP://cn=users,$dc" } $CLass = "Group" $Group = $ADSI.create($CLass, $Name) $Group.setInfo()
Создание доменных пользователей
param($name,$ou,$dc,[switch]$help) function funHelp() { [email protected]" DESCRIPTION: NAME: CreateUser.Ps1 Creates a user account PARAMETERS: -name name of the user to create -ou ou to create user in -dc domain to create user in -help prints help file SYNTAX: CreateUser.Ps1 -name "CN=MyNewUser" -ou "ou=myOU" ` -dc "dc=nwtraders,dc=com" Creates a user named MyNewUser in the myOU organizational unit in the nwtraders.com domain CreateUser.ps1 -name "cn=myuser" -ou "ou=ou2,ou=mytestou" ` -dc "dc=nwtraders,dc=com" Creates a user named MyNewUser in the ou2 organizational unit. A child OU of the mytestou Organizational unit in the nwtraders.com domain CreateUser.Ps1 -name "CN=MyNewUser" ` -dc "dc=nwtraders,dc=com" Creates a user named MyNewUser in the users container in the nwtraders.com domain CreateUser.Ps1 -help Displays the help topic for the script "@ $helpText exit } if($help){ "Obtaining help ..." ; funhelp } if(!$name -or !$dc) { "Missing name parameter ..." ; funhelp } if($ou) { "Creating user $name in LDAP://$ou,$dc" $ADSI = [ADSI]"LDAP://$ou,$dc" } ELSE { "Creating user $name in LDAP://cn=users,$dc" $ADSI = [ADSI]"LDAP://cn=users,$dc" } $CLass = "User" $User = $ADSI.create($CLass, $Name) $User.setInfo()
Создание и включение учетной записи
param([switch]$help) function funHelp() { [email protected]" DESCRIPTION: NAME: CreateAndEnableUser.Ps1 Creates an enabled user account by reading csv file PARAMETERS: -help prints help file SYNTAX: CreateAndEnableUser.Ps1 Creates an enabled user by reading a csv file CreateAndEnableUser.Ps1 -help Displays the help topic for the script "@ $helpText exit } if($help){ "Obtaining help ..." ; funhelp } $aryUser= import-csv -Path c:\psbook\enabledusers.csv $Class = "User" $dc = "dc=nwtraders,dc=com" foreach($strUser in $aryUser) { $ou = "ou="+$strUser.OU $ADSI = [ADSI]"LDAP://$ou,$dc" $cnuser="cn="+$($strUser.userName) $User = $ADSI.create($CLass,$cnuser) $User.put("SamaccountName", $($strUser.username)) $User.setInfo() $User.put("userPassword", $($strUser.Password)) $user.psbase.invokeset("AccountDisabled", "False") $User.setInfo() }
Как писать и запускать сценарии в Windows PowerShell ISE — PowerShell
- Статья
- 5 минут на чтение
Пожалуйста, оцените свой опыт
да Нет
Любая дополнительная обратная связь?
Отзыв будет отправлен в Microsoft: при нажатии кнопки отправки ваш отзыв будет использован для улучшения продуктов и услуг Microsoft.Политика конфиденциальности.
Представлять на рассмотрение
Спасибо.
В этой статье
В этой статье описывается, как создавать, редактировать, запускать и сохранять сценарии в области сценариев.
Как создавать и запускать скрипты
Вы можете открывать и редактировать файлы Windows PowerShell в области сценариев. Конкретные типы файлов, представляющие интерес
в Windows PowerShell — это файлы сценариев ( .ps1
), файлы данных сценария ( .psd1
) и модуль сценария
файлы ( .psm1
). Синтаксис этих типов файлов окрашен в редакторе панели сценариев. Другой общий файл
типы, которые вы можете открыть на панели сценариев, — это файлы конфигурации ( .ps1xml
), файлы XML и текстовые
файлы.
Примечание
Политика выполнения Windows PowerShell определяет, можете ли вы запускать сценарии и загружать Windows. Профили PowerShell и файлы конфигурации. Политика выполнения по умолчанию Restricted предотвращает все скрипты не запускаются и предотвращает загрузку профилей.Чтобы изменить политику выполнения, чтобы разрешить профили для загрузки и использования, см. Set-ExecutionPolicy и about_Подписание.
Чтобы создать новый файл сценария
На панели инструментов щелкните Новый или в меню Файл щелкните Новый . Созданный файл появится в
новая вкладка файла на текущей вкладке PowerShell. Помните, что вкладки PowerShell видны только
когда их больше одного. По умолчанию создается файл типа script ( .ps1
), но его можно
сохранены с новым именем и расширением.В одном PowerShell можно создать несколько файлов сценариев.
вкладка
Чтобы открыть существующий скрипт
На панели инструментов щелкните Открыть или в меню Файл щелкните Открыть . В диалоговом окне Открыть выберите файл, который хотите открыть. Открытый файл появится в новой вкладке.
Чтобы закрыть вкладку скрипта
Щелкните значок Закрыть ( X ) на вкладке файла, который вы хотите закрыть, или выберите меню Файл и нажмите Закрыть .
Если файл был изменен с момента последнего сохранения, вам будет предложено сохранить или удалить его.
Для отображения пути к файлу
На вкладке файла укажите имя файла. Полный путь к файлу сценария отображается в подсказка.
Для запуска скрипта
На панели инструментов щелкните Запустить сценарий или в меню Файл щелкните Запустить .
Чтобы запустить часть скрипта
- На панели сценариев выберите часть сценария.
- В меню File нажмите Run Selection или на панели инструментов нажмите Run Selection .
Чтобы остановить запущенный скрипт
Есть несколько способов остановить запущенный скрипт.
- Нажмите Остановить операцию на панели инструментов
- Нажмите CTRL + ПЕРЕРЫВ
- Выберите меню File и щелкните Stop Operation .
Нажатие CTRL + C также работает, если в данный момент не выделен текст, в котором case CTRL + C сопоставляется с функцией копирования для выделенного текста.
Как писать и редактировать текст в области сценариев
Вы можете копировать, вырезать, вставлять, находить и заменять текст на панели сценариев. Вы также можете отменить и повторить последнее действие, которое вы только что выполнили. Сочетания клавиш для этих действий те же сочетания клавиш используется для всех приложений Windows.
Для ввода текста в области сценариев
- Переместите курсор на панель сценариев, щелкнув в любом месте области сценариев или нажав Перейти на панель сценариев в меню View .
- Создать сценарий. Подсветка синтаксиса и завершение табуляции обеспечивают более широкие возможности редактирования в Windows PowerShell ISE.
- См. раздел «Как использовать автодополнение с помощью табуляции на панели сценариев и панели консоли». для получения подробной информации об использовании функции завершения табуляции для облегчения набора текста.
Чтобы найти текст в области сценариев
- Чтобы найти текст где угодно, нажмите CTRL + F или в меню Редактировать нажмите Найти в сценарии .
- Чтобы найти текст после курсора, нажмите F3 или в меню Правка щелкните Найти далее в Скрипт .
- Чтобы найти текст перед курсором, нажмите SHIFT + F3 или в меню Правка , нажмите Найти предыдущее в сценарии .
Для поиска и замены текста в области сценариев
Нажмите CTRL + H или в меню Редактировать щелкните Заменить в сценарии . Введите текст, который вы хотите найти, и текст замены, затем нажмите ENTER .
Для перехода к определенной строке текста на панели сценариев
На панели сценариев нажмите CTRL + G или в меню Редактировать щелкните Перейти к Строка .
Введите номер строки.
Чтобы скопировать текст в области сценариев
В области сценариев выберите текст, который вы хотите скопировать.
Нажмите CTRL + C или на панели инструментов щелкните значок Копировать или на значок Изменить меню, нажмите Копировать .
Чтобы вырезать текст в области сценариев
- В области сценариев выберите текст, который вы хотите вырезать.
- Нажмите CTRL + X или на панели инструментов щелкните значок Вырезать или Редактировать меню, нажмите Вырезать .
Чтобы вставить текст в область сценариев
Нажмите CTRL + V или на панели инструментов щелкните значок Вставить или значок Редактировать меню, нажмите Вставить .
Чтобы отменить действие на панели сценариев
Нажмите CTRL + Z или на панели инструментов щелкните значок Отменить или Редактировать меню нажмите Отменить .
Чтобы повторить действие на панели сценариев
Нажмите CTRL + Y или на панели инструментов щелкните значок Повторить или значок Редактировать меню нажмите Повторить .
Как сохранить скрипт
Рядом с именем сценария появляется звездочка, помечающая файл, который не сохранялся с момента его создания. измененный. Звездочка исчезнет, когда файл будет сохранен.
Чтобы сохранить скрипт
Нажмите CTRL + S или на панели инструментов щелкните значок Сохранить или Файл меню, нажмите Сохранить .
Чтобы сохранить и назвать скрипт
- В меню Файл щелкните Сохранить как . Появится диалоговое окно Сохранить как .
- В поле Имя файла введите имя файла.
- В поле Сохранить как тип выберите тип файла. Например, в поле Сохранить как тип выберите «Сценарии PowerShell (
*.ps1
)». - Нажмите Сохранить .
Для сохранения скрипта в кодировке ASCII
По умолчанию Windows PowerShell ISE сохраняет новые файлы сценариев ( .ps1
), файлы данных сценария ( .psd1
) и
файлы модуля сценария ( .psm1
) по умолчанию в формате Unicode (BigEndianUnicode). Чтобы сохранить сценарий в другом
кодировке, такой как ASCII (ANSI), используйте методы Сохранить или Сохранить как на
Объект $psISE.CurrentFile.
Следующая команда сохраняет новый сценарий как MyScript.ps1 с кодировкой ASCII.
$psISE.CurrentFile.SaveAs("MyScript.ps1", [System.Text.Encoding]::ASCII)
Следующая команда заменяет текущий файл сценария файлом с тем же именем, но с Кодировка ASCII.
$psISE.CurrentFile.Save([System.Text.Encoding]::ASCII)
Следующая команда получает кодировку текущего файла.
$psISE.CurrentFile.encoding
Windows PowerShell ISE поддерживает следующие параметры кодировки: ASCII, BigEndianUnicode, Unicode, UTF32, UTF7, UTF8 и по умолчанию. Значение параметра «По умолчанию» зависит от системы.
Windows PowerShell ISE не изменяет кодировку файлов сценариев при использовании кнопки «Сохранить» или Сохранить как команды.
См. также
10 основных понятий сценариев PowerShell
PowerShell может сэкономить вам много времени на задачах администратора Windows, но чтобы использовать его эффективно, вам нужно понимать, как он работает. Вот ускоренный курс по основам PowerShell, который поможет вам начать работу.
Сценарии PowerShellпредлагают удобный способ автоматизации различных рутинных операций. Вот несколько ключевых понятий, которые помогут новичкам приступить к разработке сценариев PowerShell.
Примечание. Эта статья также доступна для загрузки в формате PDF.
1: файлы PS1
Сценарий PowerShell на самом деле представляет собой не что иное, как простой текстовый файл. Файл содержит ряд команд PowerShell, каждая из которых отображается в отдельной строке. Чтобы текстовый файл рассматривался как сценарий PowerShell, его имя файла должно использовать расширение .PS1.
2: Разрешения на выполнение
Чтобы предотвратить выполнение вредоносных сценариев, PowerShell применяет политику выполнения.По умолчанию для политики выполнения установлено значение Restricted, что означает, что сценарии PowerShell не будут выполняться. Текущую политику выполнения можно определить с помощью следующего командлета:
.Get-ExecutionPolicy
Вы можете использовать следующие политики выполнения:
- Ограничено — Скрипты не запускаются.
- RemoteSigned — Сценарии, созданные локально, будут выполняться, а загруженные из Интернета — нет (если только они не снабжены цифровой подписью надежного издателя).
- AllSigned — сценарии будут выполняться, только если они подписаны доверенным издателем.
- Без ограничений — Сценарии будут выполняться независимо от того, откуда они получены и подписаны ли они.
Вы можете установить политику выполнения PowerShell с помощью следующего командлета:
Set-ExecutionPolicy <имя политики>
3: Запуск скрипта
В течение многих лет, если вы хотели запустить исполняемый файл из командной строки, практика заключалась в том, чтобы перейти к пути к файлу, а затем ввести имя исполняемого файла.Однако этот старый метод не работает для сценариев PowerShell.
Если вы хотите выполнить сценарий PowerShell, вам обычно придется ввести полный путь вместе с именем файла. Например, чтобы запустить сценарий с именем SCRIPT.PS1, введите:
.C:\Scripts\Script.ps1
Большим исключением является то, что вы можете выполнить сценарий, просто введя его имя, если папка, содержащая сценарий, находится в системном пути. Существует также ярлык, который вы можете использовать, если вы уже находитесь в папке, содержащей скрипт.В такой ситуации вместо того, чтобы вводить полный путь к сценарию, вы можете ввести .\ и имя сценария. Например, вы можете ввести:
.\Script.ps1
4: Конвейерная обработка
Конвейерная обработка — это термин, обозначающий передачу вывода одной команды в другую команду. Это позволяет второй команде воздействовать на полученный ввод. Чтобы передать две команды (или командлеты), просто разделите их вертикальной чертой (|).
Чтобы помочь вам понять, как работает конвейерная обработка, представьте, что вы хотите создать список процессов, запущенных на сервере, и отсортировать этот список по идентификационному номеру процесса.Вы можете получить список процессов с помощью командлета Get-Process, но этот список не будет отсортирован. Однако если вы направите выходные данные командлета в команду Sort-Object ID, список будет отсортирован. Строка используемых команд выглядит так:
Процесс получения | Идентификатор объекта сортировки
5: переменные
Хотя вы можете использовать конвейерную обработку для подачи вывода одной команды в другую команду, иногда одной конвейерной обработки недостаточно. Когда вы передаете выходные данные команды в другую команду, эти выходные данные используются немедленно.Иногда вам может потребоваться сохранить выходные данные на некоторое время, чтобы вы могли использовать (или повторно использовать) их позже. Здесь в игру вступают переменные.
Легко представить переменную как репозиторий для хранения значения, но в PowerShell переменная может хранить полный вывод команды. Например, предположим, что вы хотите сохранить список процессов, запущенных на сервере, в виде переменной. Для этого вы можете использовать эту строку кода:
$a = Процесс получения
Здесь имя переменной $a.Если вы хотите использовать переменную, просто вызовите ее по имени. Например, если ввести $a , содержимое переменной будет напечатано на экране.
Вы можете назначить переменную для конечного вывода нескольких команд, которые были объединены в конвейер. Просто заключите команды в круглые скобки. Например, чтобы отсортировать запущенные процессы по идентификатору процесса, а затем назначить вывод переменной, вы можете использовать эту команду:
$a = (Get-Process | Sort-Object ID)
6: символ @
Используя символ @, вы можете преобразовать содержимое списка в массив.Например, возьмите следующую строку кода, которая создает переменную с именем $Procs, содержащую несколько строк текста (массив):
.$procs = @{name="explorer","svchost"}
Вы также можете использовать символ @ при использовании переменной, чтобы убедиться, что она обрабатывается как массив, а не как одно значение. Например, строка кода ниже запустит командлет Get-Process для переменной, которую я только что определил. При этом Windows отобразит все процессы, используемые Windows Explorer и Svchost.Обратите внимание, что перед именем переменной используется символ @, а не знак доллара, который мы обычно видим:
.Get-процесс @procs
7: Сплит
Оператор разделения разделяет текстовую строку на основе указанного вами символа. Например, предположим, что вы хотите разбить предложение на массив, состоящий из каждого отдельного слова в предложении. Вы можете сделать это с помощью такой команды:
"Это тест" - сплит " "
Результат будет выглядеть так:
Это
это
и
тест
8: присоединиться к
Точно так же, как функция split может разделить текстовую строку на несколько частей, оператор соединения может объединить несколько блоков текста в один.Например, эта строка создаст текстовую строку, состоящую из моего имени и фамилии:
."Брайен", "Поузи" - присоединиться к " "
Пробел между кавычками в конце команды сообщает Windows о необходимости вставить пробел между двумя текстовыми строками.
9: Точки останова
Запуск только что созданного сценария PowerShell может иметь непредвиденные последствия, если сценарий содержит ошибки. Один из способов защитить себя — вставить точки останова в стратегически важных местах вашего сценария.Таким образом, вы можете убедиться, что сценарий работает должным образом, прежде чем обрабатывать его целиком.
Самый простой способ вставить точку останова — по номеру строки. Например, чтобы вставить точку останова в 10-ю строку скрипта, вы можете использовать такую команду:
.New-PSBreakpoint -Script C:\Scripts\Script.ps1 -строка 10
Вы также можете привязать точку останова к переменной. Поэтому, если вы хотите, чтобы ваш скрипт ломался всякий раз, когда содержимое a$ изменялось, вы могли бы использовать команду, подобную этой:
New-PSBreakpoint -Script C:\scripts\Script.ps1 - переменные
Обратите внимание, что я не поставил знак доллара после имени переменной.
Существует ряд команд, которые можно использовать с PSBreakpoint, включая New, Get, Enable, Disable и Remove.
10: Шаг
При отладке скрипта иногда может потребоваться его построчный запуск. Для этого вы можете использовать командлет Step-Into. Это заставит сценарий приостанавливаться после каждой строки, независимо от того, существует ли точка останова. Когда вы закончите, вы можете использовать командлет Step-Out, чтобы остановить Windows от пошагового выполнения сценария.Однако стоит отметить, что точки останова продолжают обрабатываться даже после использования командлета Step-Out.
Кстати, если ваш скрипт использует функции, вас может заинтересовать командлет Step-Over. Step-Over работает точно так же, как Step-Into, за исключением того, что если вызывается функция, Windows не выполняет ее. Вся функция будет работать без остановки.
Дополнительные ресурсы
Как создать и запустить файл сценария PowerShell в Windows 10
В Windows 10 PowerShell — это инструмент командной строки, разработанный Microsoft для запуска команд и сценариев для изменения настроек и автоматизации задач.В некотором смысле это похоже на командную строку. Однако PowerShell — это более функциональный интерфейс командной строки (CLI), который предлагает расширенный набор инструментов и большую гибкость и контроль. Кроме того, в отличие от командной строки, PowerShell доступен в Windows, macOS и Linux.
Сценарий — это просто набор команд, сохраненных в текстовом файле (со специальным расширением «.ps1»), которые PowerShell понимает и последовательно выполняет для выполнения различных действий.
Единственное предостережение заключается в том, что протокол безопасности по умолчанию всегда блокирует запуск любого сценария на устройстве.Это означает, что при двойном щелчке по файлу «.ps1» в Windows 10 ничего не произойдет, и если вы попытаетесь запустить скрипт в PowerShell, вы увидите ошибку «невозможно загрузить, поскольку выполнение скриптов в этой системе отключено». сообщение. Тем не менее, запуск скриптов на вашем компьютере невозможен. Вам нужно только включить правильную политику выполнения.
В этом руководстве по Windows 10 мы расскажем, как успешно написать и запустить свой первый файл сценария в PowerShell с помощью Visual Studio Code, Блокнота и консоли интегрированной среды сценариев PowerShell (ISE).
Как создать файл сценария PowerShell в Windows 10
В Windows 10 вы можете создавать файлы сценариев PowerShell, используя практически любой текстовый редактор или консоль ISE. Тем не менее, предпочтительным вариантом (спасибо @jotaka за наводку) для создания сценариев в будущем является использование редактора кода Visual Studio с расширением PowerShell.
Создание сценария с помощью кода Visual Studio
Visual Studio Code, также известный как VS Code, — это бесплатный и расширяемый кроссплатформенный редактор кода, предоставляющий среду для редактирования практически любого языка программирования.А при добавлении расширения PowerShell вы получаете полностью интерактивный опыт редактирования сценариев, даже с поддержкой IntelliSense (дополнение кода).
Новый интерфейс должен использоваться по умолчанию, но консоль PowerShell ISE не исчезнет. Тем не менее, компания не будет добавлять новые функции и не будет поддерживать PowerShell 7 или более поздние выпуски.
Установить код Visual Studio
Чтобы установить Visual Basic Code в Windows 10, выполните следующие действия:
- Откройте страницу загрузки Visual Studio.
Нажмите кнопку Windows , чтобы загрузить программу установки.
Источник: Windows Central- Дважды щелкните загруженный файл, чтобы начать процесс установки VS Code.
- Подтвердить условия соглашения.
Нажмите кнопку Далее .
Источник: Windows Central- Нажмите кнопку Далее еще раз.
- Нажмите кнопку Далее еще раз.
При необходимости подтвердите дополнительные задачи.
Источник: Windows Central- Нажмите кнопку Далее .
- Нажмите кнопку Установить .
- Нажмите кнопку Готово .
После выполнения этих шагов вы можете приступить к установке расширения PowerShell.
Установите расширение PowerShell
Чтобы установить расширение PowerShell в VS Code, выполните следующие действия:
- Открыть Код ВС .
- Щелкните вкладку Расширения на левой панели.
- Найдите PowerShell и выберите верхний результат.
Нажмите кнопку Установить .
Источник: Windows Central
После выполнения этих шагов вы можете начать писать сценарии PowerShell с помощью Visual Studio Code.
Создать сценарий PowerShell с кодом Visual Studio
Чтобы создать скрипт с помощью кода Visual Basic, выполните следующие действия:
- Открыть Код ВС .
Откройте меню Файл и выберите параметр Новый файл .
Источник: Windows CentralЩелкните меню Файл и выберите параметр Сохранить как .
Источник: Windows Central- В поле «Имя файла» укажите имя файла с расширением .ps1 — например: first_script.ps1 .
- Нажмите кнопку Сохранить .
Напишите новый или вставьте скрипт, который хотите запустить, например:
Write-Host "Поздравляем! Ваш первый сценарий успешно выполнен"
Приведенный выше скрипт выведет на экран фразу «Поздравляем! Ваш первый скрипт успешно выполнен».
(Необязательно) Нажмите кнопку Run в правом верхнем углу (или нажмите клавишу F5), чтобы запустить сценарий.
Источник: Windows Central- Откройте меню Файл .
- Выберите параметр Сохранить .
Создание сценария с помощью Блокнота
Чтобы создать сценарий PowerShell с помощью редактора «Блокнот» в Windows 10, выполните следующие действия:
- Открыть Запустить .
- Найдите Блокнот и щелкните верхний результат, чтобы открыть приложение.
Напишите новый или вставьте свой скрипт в текстовый файл, например:
Write-Host "Поздравляем! Ваш первый сценарий успешно выполнен"
- Откройте меню Файл .
- Выберите параметр Сохранить как .
Введите описательное имя сценария, например, first_script.ps1 .
Источник: Windows Central- Нажмите кнопку Сохранить .
Создание сценария с интегрированной средой сценариев
Кроме того, вы можете использовать встроенную консоль PowerShell ISE для кодирования сценариев в Windows 10.
Интегрированная среда сценариев — это расширенный инструмент, но вы можете начать работу, выполнив следующие действия:
- Открыть Запустить .
- Найдите Windows PowerShell ISE , щелкните правой кнопкой мыши верхний результат и выберите параметр «Запуск от имени администратора ».
- Щелкните меню Файл .
Выберите параметр New , чтобы создать новый пустой файл .ps1 .
Источник: Windows CentralНапишите новый или вставьте скрипт, который хотите запустить, например:
Write-Host "Поздравляем! Ваш первый сценарий успешно выполнен"
- Откройте меню Файл .
- Выберите параметр Сохранить .
Введите имя сценария, например, first_script.ps1 .
Источник: Windows Central- Выберите папку для хранения скрипта.
- Нажмите кнопку Сохранить .
После того как вы выполните шаги с помощью Блокнота, Visual Studio Code или PowerShell ISE, сценарий будет готов к запуску, но по умолчанию произойдет сбой. Это связано с тем, что параметры PowerShell по умолчанию всегда блокируют выполнение любого скрипта.(Единственным исключением является запуск содержимого скрипта в Visual Studio Code или PowerShell ISE.)
Как запустить файл сценария PowerShell в Windows 10
Если вы хотите запустить файл сценария с помощью PowerShell, вам необходимо изменить политику выполнения в Windows 10.
Чтобы изменить политику выполнения для запуска сценариев PowerShell, выполните следующие действия:
- Открыть Запустить .
- Найдите PowerShell , щелкните правой кнопкой мыши верхний результат и выберите параметр «Запуск от имени администратора ».
Введите следующую команду, чтобы разрешить выполнение сценариев, и нажмите . Введите :
.Set-ExecutionPolicy RemoteSigned
Введите A и нажмите Введите (если применимо).
Источник: Windows CentralВведите следующую команду для запуска скрипта и нажмите Введите :
& "C:\PATH\TO\SCRIPT\first_script.ps1"
В приведенной выше команде обязательно измените «PATH\TO\SCRIPT» на расположение вашего скрипта.
Например, эта команда запускает сценарий, хранящийся в папке «Загрузки»:
& "C:\Пользователи\имя пользователя\Загрузки\first_script.ps1"
После того, как вы выполните эти шаги, скрипт запустится, и если он был написан правильно, вы должны увидеть его вывод без проблем.
В Windows 10 PowerShell включает четыре политики выполнения, в том числе:
- Restricted — Останавливает запуск любого скрипта.
- RemoteSigned — Разрешает сценарии, созданные на устройстве, но сценарии, созданные на другом компьютере, не будут выполняться, если они не содержат подпись доверенного издателя.
- AllSigned — Все сценарии будут выполняться, но только если их подписал доверенный издатель.
- Unrestricted — Запускает любой скрипт без ограничений.
В приведенных выше шагах мы используем команду, позволяющую запускать локальные сценарии в Windows 10. Однако, если вы не планируете запускать сценарии регулярно, вы можете восстановить настройки по умолчанию, чтобы блокировать ненадежные сценарии, используя те же инструкции, описанные выше. , а на шаг №.4 обязательно используйте команду Set-ExecutionPolicy Restricted
.
Дополнительные ресурсы Windows 10
Для получения дополнительных полезных статей, материалов и ответов на распространенные вопросы о Windows 10 посетите следующие ресурсы:
5 примеров сценариев PowerShell, которые вдохновят вас на создание сценариев
PowerShell — это обширный язык сценариев, способный автоматизировать практически все, и не только для системных администраторов. Но что, если вы не знаете того, чего еще не знаете? В этом случае эта комбинация различных примеров сценариев PowerShell поможет вам начать приключение со сценариями PowerShell.
Предпосылки
Этот туториал представляет собой практическую демонстрацию. Если вы хотите продолжить, убедитесь, что у вас есть следующее:
- Любая версия Windows 10, но в этом руководстве используется Windows 10 Корпоративная, сборка 19043.
- Подойдет Windows PowerShell версии 5.1 или выше, но в этом руководстве используется PowerShell 7.1, и в идеале — последняя доступная версия PowerShell.
- Редактор, такой как PowerShell ISE или Visual Studio Code с расширением PowerShell.
Создание и обновление ключей и значений реестра
Каждое приложение и операционная система на вашем компьютере с Windows регистрируются в центральном месте — реестре Windows. Реестр Windows состоит из значений и ключей, где ключи являются контейнерами для значений.
PowerShell имеет множество встроенных команд, помогающих создавать, обновлять и изменять ключи и значения реестра.
Связано:Как редактировать реестр Windows полностью в автономном режиме
Реестр Windows является важной областью операционной системы Windows, поэтому перед внесением изменений обязательно сделайте резервную копию реестра.
Чтобы внести изменения в реестр, ниже перечислены три разные команды PowerShell. Давайте рассмотрим несколько примеров того, как работает каждый из этих командлетов PowerShell.
-
New-Item
— создает новые ключи реестра. -
New-ItemProperty
— создает новые значения реестра. -
Set-ItemProperty
— изменяет значения раздела реестра.
Приведенный ниже пример сценария определяет список разделов реестра и проверяет, существует ли каждый из них.Если это так, он обновляет значения реестра внутри. Если нет, он создает ключи, а затем создает новые значения реестра внутри этих ключей.
В результате приведенного ниже сценария отключаются значения реестра, связанные с безопасностью транспортного уровня (TLS 1.0).
## Определяет пути к трем ключам реестра в массиве
$tls10 = 'HKLM:\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\TLS 1.0\Server', 'HKLM:\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\TLS 1.0\Клиент'
## Проверяет, существуют ли все ключи реестра в массиве
$tls10check = ($tls10 | Путь к тесту) -не содержит $false
## Если все ключи реестра существуют
если ($tls10check -eq $True){
## Обновляет четыре разных значения реестра DWORD до 0 или 1
Set-ItemProperty -Path 'HKLM:\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\TLS 1.0\Server' -name 'Enabled' -value '0' -Type 'DWORD'
Set-ItemProperty -Path 'HKLM:\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\TLS 1.0\Server — имя «DisabledByDefault» — значение «1» — тип «DWORD»
Set-ItemProperty -Path 'HKLM:\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\TLS 1.0\Client' -name 'Enabled' -value '0' -Type 'DWORD'
Set-ItemProperty -Path 'HKLM:\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\TLS 1.0\Client' -name 'DisabledByDefault' -value '1' -Type 'DWORD'
} else { ## Если хотя бы один из ключей реестра не существует
## Создает отсутствующие ключи реестра, пропуская подтверждение (Force)
Новый элемент 'HKLM:\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\TLS 1.0\Сервер'-Force
Новый элемент "HKLM:\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\TLS 1.0\Client" -Force
## Создает четыре разных значения реестра DWORD, устанавливая значение либо 0, либо 1.
New-ItemProperty -Path 'HKLM:\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\TLS 1.0\Server' -name 'Enabled' -value '0' -Type 'DWORD'
New-ItemProperty -Path 'HKLM:\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\TLS 1.0\Server' -name 'DisabledByDefault' -value '1' -Type 'DWORD'
New-ItemProperty -Path 'HKLM:\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\TLS 1.0\Клиент» — имя «Включено» — значение «0» — Тип «DWORD»
New-ItemProperty -Path 'HKLM:\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\TLS 1.0\Client' -name 'DisabledByDefault' -value '1' -Type 'DWORD'
}
Запуск службы Windows (если она не запущена)
Когда вы закончите редактирование реестра, давайте перейдем непосредственно к управлению службами Windows.
Связано:Как управлять службами Windows с помощью PowerShell
В приведенном ниже примере сценария PowerShell вы увидите отличный пример выполнения некоторой логики сравнения, за которой следует действие.При запуске этот скрипт получит статус
службы EventLog
. Если статус
отличается от Running
, он напишет некоторый текст в консоль и запустит службу.
Если служба уже запущена, она сообщит вам об этом и не будет выполнять никаких дальнейших действий.
## Определите имя службы в переменной
$ServiceName = 'Журнал событий'
## Считать службу из Windows, чтобы вернуть объект службы
$ServiceInfo = Get-Service -Name $ServiceName
## Если сервер не запущен (ne)
если ($ServiceInfo.Статус -ne 'Выполняется') {
## Пишем в консоль, что служба не запущена
Write-Host «Служба не запущена, запуск службы»
## Запустить службу
Start-Service -Name $ServiceName
## Обновите объект $ServiceInfo, чтобы отразить новое состояние
$ServiceInfo.Обновить()
## Записать в консоль свойство Status, которое показывает состояние службы
Запись хоста $ServiceInfo.Status
} else { ## Если Статус отличается от Выполняется
## Пишем в консоль, что служба уже запущена
Write-Host 'Служба уже запущена.'
}
## Определите имя службы в переменной
$ServiceName = 'Журнал событий'
## Считать службу из Windows, чтобы вернуть объект службы
$ServiceInfo = Get-Service -Name $ServiceName
## Если сервер не запущен (ne)
if ($ServiceInfo.Status -ne 'Выполняется') {
## Пишем в консоль, что служба не запущена
Write-Host «Служба не запущена, запуск службы»
## Запустить службу
Start-Service -Name $ServiceName
## Обновите объект $ServiceInfo, чтобы отразить новое состояние
$ServiceInfo.Обновить()
## Записать в консоль свойство Status, которое показывает состояние службы
Запись хоста $ServiceInfo.Status
} else { ## Если Статус отличается от Выполняется
## Пишем в консоль, что служба уже запущена
Write-Host «Служба уже запущена».
}
Служба запущена успешно.Поиск классов CIM/WMI
CIM — это удобный репозиторий информации в Windows, и PowerShell по умолчанию может запрашивать его. Используя комбинацию команд CIM, вы можете собирать всевозможную полезную информацию из CIM.
Чтобы найти все командлеты PowerShell, связанные с CIM, запустите
Get-Command -Name *Cim*
.
Связанный:Как работать с WMI в PowerShell
Данные CIM разбиты на классы CIM. Классы CIM содержат категории информации Windows. Возможно, вы ищете какую-то информацию об оборудовании и обнаружили, что класс CIM имеет некоторую вариацию System
в имени класса. С помощью командлета Get-CimClass
можно найти все классы, соответствующие определенному шаблону.
Чтобы получить один или несколько классов CIM с помощью командлета Get-CimClass
, укажите параметр ClassName
с точным именем класса или шаблоном поиска в командной строке PowerShell. Если вы не знаете полное имя класса, вы можете использовать подстановочный знак ( *
). Ниже вы увидите команду для поиска всех классов CIM, соответствующих шаблону Win32_*System
.
Get-CimClass -ClassName Win32_*Система
Классы CIM, отфильтрованные по имени класса.Запрос WMI для получения информации о компьютере
После того, как вы нашли класс CIM, который хотите запросить, PowerShell теперь имеет еще один командлет с именем Get-CimInstance
, который поможет вам запросить информацию из этого класса.
Ниже вы найдете еще один отличный пример сценария PowerShell, на этот раз демонстрирующий реальный случай запроса CIM. В этом примере выполняется запрос класса CIM Win32_OperatingSystem
одновременно на двух удаленных компьютерах и создание CSV-файла с несколькими выбранными свойствами, возвращенными из этого запроса.
Найдя нужный -ClassName
, возможно, вы захотите дополнительно отфильтровать информацию, где имена свойств разделены запятыми.
## Запрос экземпляра CIM Win32_OperatingSystem на компьютерах serv1 и serv2
Get-CimInstance -ClassName Win32_OperatingSystem -ComputerName Serv1, Serv2 |`
## Ограничьте вывод только несколькими выбранными свойствами
Select-Object -Property BuildNumber, BuildType, OSType, ServicePackMajorVersion, ServicePackMinorVersion | `
## Отправьте каждый объект экземпляра CIM в файл CSV с именем C:\Folders\Computers.CSV
Export-CSV C:\Folder\Computers.csv -NoTypeInformation -Encoding UTF8 -Verbose
Когда сценарий завершится, вы найдете CSV-файл с именем Computers.csv в каталоге C:\Folder , который выглядит примерно так:
BuildNumber, BuildType, OSType, ServicePackMajorVersion, ServicePackMinorVersion
19042, Мультипроцессор Бесплатно, 18,0,0
19012, Мультипроцессор Бесплатно, 18,0,0
Установка приложений
Теперь, когда вы знаете, как собирать информацию о компьютерах, вы можете использовать эту информацию, чтобы, например, определить, совместимы ли эти компьютеры с определенными приложениями.
Ручная установка программного обеспечения на один компьютер может быть выполнима, но если у вас есть много компьютеров для установки программного обеспечения, эта задача вскоре становится невыполнимой. Чтобы помочь, вы можете создать сценарий PowerShell для автоматической установки программного обеспечения (если ваше программное обеспечение поддерживает это).
Возможно, вы работаете с пакетом Microsoft Installer (MSI) и хотите установить программное обеспечение в автоматическом режиме. Вы можете установить пакеты MSI с помощью утилиты msiexec.exe . Эта утилита не является командой PowerShell, но вы можете вызвать ее с помощью PowerShell.
Возможно, у вас есть файл MSI с именем package.msi в каталоге C:\folder . Чтобы автоматически установить программное обеспечение, вы должны сначала узнать, какие переключатели требуются для этого установщику. Чтобы найти доступные переключатели, запустите MSI и введите /? переключатель
. /?
должен отображать каждый доступный параметр, как показано ниже.
C:\Folder\package.msi /?
Ниже вы можете увидеть всплывающее окно со списком параметров аргументов, доступных для установки пакета MSI.
Список аргументов установщика Windows После того, как вы узнали, какие переключатели нужны пакету установщика, пришло время вызвать утилиту msiexec.exe . Поскольку msiexec.exe не является командой PowerShell, ее необходимо вызывать как внешний процесс. Один из самых простых способов запуска процессов с помощью PowerShell — использование командлета Start-Process
.
Связано: Улучшенный процесс запуска PowerShell
Start-Process
имеет два параметра, которые вам нужно использовать в этом примере; Имя
и Подождите
.В приведенном ниже примере вы увидите, что Start-Process
вызывает утилиту msiexec.exe
с использованием параметра Name
и , ожидающего ( Wait
) завершения процесса, прежде чем передать управление обратно консоль.
Поскольку msiexec.exe
требуется несколько параметров для автоматической установки программного обеспечения, в примере используется ArgumentList
для предоставления каждого параметра, необходимого msiexec.exe
для автоматической установки программного обеспечения.
## Запустите процесс msiexec.exe, передав аргумент /i, чтобы указать установку
## путь к MSI, /q для автоматической установки и расположение файла журнала
##, который будет регистрировать сообщения об ошибках (/le).
Start-Process -Name 'msiexec.exe' -Wait -ArgumentList '/i "C:\Folder\package.msi" /q /le "C:\Folder\package.log"'
Обработка ошибок с помощью оператора Try, Catch и, наконец,
Подводя итог этому посту с примером сценария PowerShell, давайте закончим темой, которую вы можете (и должны) применить к любому сценарию PowerShell; обработка ошибок.Обработка ошибок «отлавливает» неожиданные ошибки, обнаруженные в вашем скрипте, делая ваш скрипт более надежным и способным выполняться с меньшим количеством сбоев.
Обработка ошибок — это большая тема, которую можно было бы объяснить в целой книге, но давайте рассмотрим только основы; try
, catch
и наконец
утверждения. Блоки Try/catch
— это блоки кода, которые PowerShell «отслеживает» на наличие ошибок или исключений жесткого завершения.
Если код внутри блока try/catch
выдает принудительную завершающую ошибку, это исключение будет «перехвачено» блоком, и для него будет запущен специальный код.Как только сценарий завершится, возвращая исключение или успешно завершаясь, PowerShell обработает блок finally
.
В приведенном ниже примере сценарий создает файл сценария протокола передачи файлов (FTP), который подключается к FTP-серверу, пытается загрузить файл на FTP-сервер, а затем удаляет файл сценария FTP после завершения.
В примере вы увидите, что «функциональный» код был заключен в блок try
, catch
и finally
.Например, если командлет Out-File
возвращает ошибку принудительного завершения, PowerShell перехватит эту ошибку и вернет Error: <сообщение об ошибке/исключении>
, а затем завершит работу с кодом 1.
После того как сценарий успешно создает файл сценария FTP, он пытается вызвать утилиту ftp.exe , которая выполняет команды внутри файла сценария FTP. Если _то
Обратите внимание, что вы создаете файл сценария FTP с помощью командлета Out-File
с первым оператором try
.Если оператор try
завершился неудачно, приведенный ниже оператор catch
перехватит ошибки. Затем свойство $($_.Exception.Message)
, за которым следует exit 1
, завершит сценарий, отображая статус ошибки.
Но если первый оператор try
завершится успешно, следующий оператор try
запустит сгенерированный сценарий FTP. При успешном выполнении сценария FTP вы увидите вывод журнала с успешным подключением к FTP-серверу и загрузкой файла.
Затем, независимо от результатов операторов try
и catch
, будет выполнен оператор finally
, который удалит файл сценария FTP.
## Создайте блок try и создайте внутри него любой код.
пытаться {
## Создайте файл сценария FTP, используя строку здесь (https://devblogs.microsoft.com/scripting/powertip-use-here-strings-with-powershell/)
## Если Out-File создает FTP-скрипт, он затем вызывает ftp.exe для выполнения
## файл сценария.
$Скрипт = @"
открыть локальный хост
имя пользователя
пароль
ДВОИЧНЫЙ
удаленная папка компакт-диска
ЖК-дисплей C:\папка
ПОЛУЧИТЕ пульт.файл
ДО СВИДАНИЯ
"@
$Скрипт | Исходящий файл "C:\Folder\ftp.txt" - Кодировка ASCII
ftp -s:C:\folder\ftp.txt
} поймать {
## Если в любой момент для любого кода внутри блока try возвращается принудительная завершающая ошибка
## PowerShell направит код в блок catch, который записывает в консоль
## и выходит из консоли PowerShell с кодом выхода 1.
Write-Host "Ошибка: $($_.Exception.Message)"
выход 1
} наконец-то {
## Независимо от того, поймал ли блок catch исключение, удалите файл сценария FTP
Remove-Item -Path "C:\folder\ftp.текст"
}
## Когда код внутри блоков try/catch/finally завершается (ошибка или нет),
## выйти из сеанса PowerShell с кодом выхода 0
выход 0
Как видно ниже, запуск FTP-скрипта прошел успешно.
Вывод FTP-скрипта. Если где-то внутри блока try
возникнет исключение, вы увидите сообщение об ошибке ( $_.Exception.Message
), указывающее, что пошло не так.
Заключение
Благодаря этим примерам сценариев PowerShell вы должны получить представление о возможностях PowerShell.PowerShell может делать гораздо больше, чем вы узнали из этого руководства, поэтому используйте это руководство в качестве трамплина для своего обучения.
Как, по вашему мнению, эти примеры сценариев могут улучшить ваш рабочий процесс? Каким бы ни был ваш ответ, не медлите и начните повышать уровень своих навыков написания сценариев!
полезных скриптов/команд PowerShell — Spiceworks
Спасибо Джастину за указание на то, что я пропустил, возможно, самую полезную команду. Получить помощь. Я также добавил некоторые из моих любимых команд для обучения, которые я до сих пор использую почти каждый день.
Get-Help — удивительно полезная команда, к тому же весьма универсальная.
Get-Help Get-WMIObject — выводит основную справку и советы по команде, но Get-Help имеет много полезных параметров или переключателей;
-Полный (полный справочный документ)
-Примеры (показывает только примеры использования команды, мой личный фаворит)
-Online (открывает страницу MSDN для командлета или команды)
-ShowWindow (Помещает справку в отдельное окно)
Get-Command — еще один отличный инструмент для обучения. Думаете, что-то может быть командой? Используйте Get-Command, чтобы узнать.Он также принимает подстановочные знаки. Отличным примером является;
Get-Command -Name Get-* (может показаться немного пугающим, но большинство командлетов PowerShell говорят сами за себя)
Самые распространенные глаголы, если хотите, по-моему, таковы;
Получить-
Шоу-
Новый-
Удалить-
Старт-
Стоп-
Копия-
Импорт-
Экспорт-
Вы можете использовать приведенный выше пример Get-Command для любого из них.
Get-Member, вероятно, вторая наиболее часто используемая мной команда, когда я пишу скрипт или даже делаю однострочный (однострочный — это, по сути, однострочный скрипт)
Это инструмент, который можно использовать, если вы хотите увидеть каждое отдельное свойство, метод и практически все, что хранится внутри созданной вами переменной (пожалуйста, не стесняйтесь вмешаться, если я объяснил это неправильно).Вот пример;
$Object=Get-WMIObject-Класс Win32_ComputerSystem
$Объект | Get-Member
(Я бы вставил вывод сюда, но он будет очень плохо отформатирован, поэтому я предлагаю вам попробовать это самостоятельно)
Get-Alias отлично подходит, когда вы пытаетесь найти решение и находите его, но автор использует то, что я называю сокращением для команд, и это здорово, если вы уже это знаете. Примером может быть gwmi, если вы не знакомы с PowerShell, это, вероятно, ничего не значит для вас, вот где появляется Get-Alias.Вот пример.
Get-Alias-Name gwmi
Вывод этой команды сообщит вам, что gwmi является псевдонимом команды Get-WMIObject
Учебное пособие по написанию сценариев Windows PowerShell для начинающих
Windows PowerShell — это мощный язык сценариев, который многие системные администраторы и другие ИТ-специалисты используют для автоматизации широкого круга задач. Действительно, изучение даже базового набора команд Windows PowerShell может помочь вам добиться значительной автоматизации.В этом посте рассматриваются наиболее важные основы сценариев PowerShell. Кроме того, в конце руководства есть FAQ с ответами на несколько распространенных вопросов о Windows PowerShell.
Предупреждение: Запустить сценарии PowerShell легко, но они могут оказать серьезное влияние на стабильность и безопасность вашей ИТ-экосистемы. Во время обучения обязательно экспериментируйте с Windows PowerShell только в изолированной среде.
Запуск Windows PowerShell
PowerShell предлагает как параметр командной строки, так и интегрированную среду сценариев (ISE):
- Чтобы запустить командную строку PowerShell, введите powershell.exe в меню «Пуск» Windows. Вы увидите экран, подобный следующему:
- Чтобы запустить PowerShell ISE, введите powershellexe в меню «Пуск». Использование ISE является предпочтительным способом работы с языком, поскольку оно обеспечивает подсветку синтаксиса, автоматическое заполнение команд и другие функции автоматизации, которые упрощают разработку и тестирование сценариев PowerShell.
Подготовка к запуску сценариев PowerShell
Кроме того, существует политика, ограничивающая выполнение сценариев.Вы можете проверить эту политику, выполнив команду Get-ExecutionPolicy в PowerShell:
.Вы получите одно из следующих значений:
- Restricted — Использование скриптов запрещено. Это значение по умолчанию.
- AllSigned — Вы можете запускать сценарии, подписанные доверенным разработчиком. Перед выполнением скрипт попросит вас подтвердить, что вы хотите его запустить.
- RemoteSigned — Вы можете запускать собственные сценарии или сценарии, подписанные доверенным разработчиком.
- Без ограничений — Вы можете запускать любой скрипт, который захотите.
Если установлено значение Restricted, измените его на другой параметр с помощью команды PowerShell Set-ExecutionPolicy:
Сценарии PowerShell хранятся в файлах PS1. По замыслу вы не можете запустить сценарий, просто дважды щелкнув файл; это помогает избежать случайного повреждения ваших систем. Вместо этого, чтобы выполнить сценарий, щелкните его правой кнопкой мыши и выберите «Выполнить с PowerShell»:
.Командлеты PowerShell
О командлетахКомандлет — это команда PowerShell.Вот некоторые важные сведения о командлетах:
- Существуют системные, пользовательские и пользовательские командлеты.
- Командлеты выводят результаты в виде объекта или массива объектов. Командлеты
- могут получать данные для анализа или передавать данные другому командлету с помощью конвейеров, о которых я расскажу чуть позже.
- Командлеты нечувствительны к регистру.
- Если вы хотите использовать несколько командлетов в одной строке, вы должны разделить их с помощью
Командлет всегда состоит из глагола (или слова, функционирующего как глагол) и существительного, разделенных дефисом (правило «глагол-существительное»).Например, некоторые из глаголов включают:
- Получить — Получить что-то
- Набор — Что-то определить
- Старт — Запустить что-то
- Остановить — Чтобы остановить то, что работает
- Out — Вывести что-то
- Новый — Создать что-то («новый» — это, конечно, не глагол, но действует как таковое)
Для практики попробуйте выполнить следующие командлеты:
- Get-Process — показывает процессы, запущенные в данный момент на вашем компьютере:
- Get-Service — показывает список служб с их статусом
- Get-Content — показывает содержимое указанного вами файла (например, Get-Content C:\Windows\System32\drivers\etc\hosts)
Хорошая новость — вам не нужно запоминать все командлеты.Вы можете получить список всех командлетов, выполнив командлет Get-Help -Category, который вернет следующее:
Вы также можете создавать свои собственные командлеты.
ПараметрыКаждый командлет имеет несколько параметров, определяющих его действия. PowerShell ISE автоматически предложит все допустимые параметры и их типы после ввода командлета и дефиса:
.Вы также можете начать вводить значение параметра. Например, следующий командлет показывает все службы, имена которых начинаются с буквы «W»: Get-Service —Name W*
.Другой способ просмотреть параметры командлета — использовать скрипт, подобный следующему, который отобразит параметры для командлета Get-Process: Get-Process | Получить член.(«|» — это канал, по которому данные передаются от одного командлета к другому.)
Чтобы получить примеры для командлета, используйте следующий скрипт:
Get-Help Get-Process — примерыПсевдонимы
Вы также можете использовать псевдонимы, которые являются сокращенными именами командлетов. Например, вместо «Get-Help» можно использовать просто «Help». Попробуйте выполнить следующие две команды и посмотрите, получите ли вы тот же результат:
.- Блокнот запуска процесса
- запустить блокнот
Точно так же, чтобы остановить этот процесс, вы можете использовать любую из следующих команд:
- Блокнот Stop-Process-Name
- spps -Имя блокнота
Чтобы просмотреть все псевдонимы, выполните командлет Get-Alias.
Комментарии к скрипту помогут вам и вашим коллегам лучше понять, что делает скрипт. Однострочный комментарий начинается со знака номера (#), а блочный комментарий начинается с «<#» и заканчивается «#>».
ТрубыКанал передает данные от одного командлета к другому. Ранее мы использовали конвейер для получения всех свойств объекта. Вот еще один пример: следующий скрипт предоставляет все службы, отсортированные по их статусу:
.Get-Service | Sort-Object -статус свойства
Вы также можете использовать канал для вывода текста в файл с помощью сценария, подобного следующему:
"Привет, мир!" | Внешний файл C:\ps\test.текст
Вы можете использовать несколько каналов. Например, в следующем сценарии перечислены все службы, причем первый канал исключает остановленные службы, а второй канал ограничивает список только отображаемыми именами:
.Get-Service | ГДЕ {$_.status -eq "Выполняется"} | ВЫБЕРИТЕ отображаемое имя # "$_." определяет текущий элемент в канале
Краткое руководство по написанию сценариев Windows PowerShell
В этом руководстве по Windows PowerShell мы рассказали, как подготовиться к сценариям PowerShell и запустить их, что такое командлет, как передавать данные с помощью каналов и как получить свойства объекта.Имейте в виду, что если вы что-то забудете, вы всегда можете воспользоваться командлетом Get-Help.
Надеюсь, этот PowerShell для начинающих был вам полезен!
В следующих частях этого бесплатного руководства по Windows PowerShell я расскажу, как включать переменные, массивы и циклы в сценарии PowerShell.
Дополнительные ресурсы
Полезные сценарии PowerShell
Управление пользователями AD
Управление компьютерами AD
Управление группами и подразделениями
Управление другими делами
Получите больше возможностей с помощью PowerShell
Другие ресурсы
Часто задаваемые вопросы- Сложно ли освоить PowerShell?
Начать работу с Microsoft PowerShell может быть очень просто, так как язык простой и вы можете легко получить информацию о любом командлете.Но важно также понимать системы, с которыми вы взаимодействуете, чтобы ваши сценарии не приводили к серьезным проблемам, таким как простои системы или инциденты безопасности.
- С чего начать изучение PowerShell?
Мы рекомендуем Учебник по написанию сценариев Windows PowerShell для начинающих. Он охватывает основы сценариев PowerShell, в том числе способы запуска сценариев PowerShell и использования наиболее распространенных команд PowerShell. Другим хорошим источником является страница PowerShell на веб-сайте Microsoft, которая включает в себя солидный вводный курс.
- Какие еще ресурсы есть по сценариям PowerShell?
Вот еще несколько полезных ресурсов:
Джефф — бывший директор по разработке глобальных решений в Netwrix. Он давний блогер Netwrix, спикер и ведущий. В блоге Netwrix Джефф делится лайфхаками, советами и рекомендациями, которые могут значительно улучшить ваш опыт системного администрирования.
Идеальный сценарий PowerShell
Существует миллион и одна книга и статья о том, как улучшить свои методы кодирования, но определение того, какие из них стоят вашего времени, займет вечность.
В ЭТОЙ статье описаны основные навыки, которым должна научиться ваша команда, чтобы иметь возможность писать замечательные сценарии.
Каждый член вашей команды имеет разный уровень владения PowerShell; профессионалы и абсолютные новички, скорее всего, будут работать бок о бок.Может ли ваша библиотека сценариев соответствовать постоянно меняющимся требованиям вашей организации и быть доступной для ваших товарищей по команде всех уровней квалификации?
По-настоящему идеальных сценариев не существует, но мы можем сделать все возможное, чтобы создать самые совершенные сценарии.
Идеальный сценарий — это не код без ошибок или оптимизация. Речь идет о написании сценариев, чтобы все члены вашей команды могли понимать, использовать и изменять их, позволяя легко изменять и развивать их вместе с потребностями вашей команды и организации.
Чтобы помочь вашей команде писать и использовать «идеальные» сценарии, мы рассмотрим:
Кто будет использовать ваши сценарии?
Ваши сценарии PowerShell, скорее всего, будут использоваться всей вашей командой, а НЕ только экспертами. Существуют пробелы в знаниях, которые вам необходимо заполнить для этих разных «уровней опыта».
Воспользуемся аналогией «Повышение уровня» из предыдущей статьи:
XP | Уровень | Описание |
---|---|---|
1 | Использует PowerShell | любой, кто знает, как открыть настоящую оболочку/командную строку PowerShell.Его используют все, так как это единственный способ запуска/использования командлетов | .
10 | Выполняет сценарии | знает, что такое скрипт и как аккуратно вставить параметры |
50 | Чтение скриптов | может понять, что делает большинство, прочитав его, и знает, как исследовать командлеты | .
200 | Изменяет сценарии | вносит изменения в существующие сценарии для решения несколько иной проблемы, но НЕ пишет полностью новые сценарии |
1000 | Создает сценарии | выявляет проблемы и создает совершенно новый/почти новый сценарий для решения этой проблемы |
10 000 | Модули разработки | создает и упаковывает функции в модули, может использоваться для помощи в создании скриптов |
50 000 | Разработка командлетов | использует C# для написания, тестирования и сборки командлетов, упакованных в модули | .
Большая часть вашей команды, вероятно, попадет в диапазон от 10 до 1000 XP.В идеале вы хотите, чтобы вся ваша команда повышала уровень как можно быстрее, чтобы они могли выполнять более сложные задачи, потому что это позволит вам быстрее и эффективнее масштабироваться как команде и как организации.
Скрипты, предназначенные специально для участников с низким уровнем опыта, должны помогать в повышении уровня, а не тормозить его. Чем меньше времени уходит на то, чтобы понять сценарий, тем больше времени уходит на конструктивное обучение и рост.
Правильное комментирование
Ключом к эффективному использованию и обслуживанию сценариев являются хорошие комментарии.«Комментарии — пустая трата моего времени, Криста». Ни за что. Помните: то, что вы (или Ларри, или кто-то еще) написали сценарий, не означает, что вы также будете его поддерживать. Большинство сценариев переживают своих создателей в организации. Качественные комментарии помогают товарищам по команде с меньшим опытом повышать уровень быстрее, поскольку весь необходимый им контекст находится прямо в комментариях. Они могут быстрее изучать функции в сценарии и быстрее повышать уровень. И помните, вы всегда можете добавить или улучшить комментарии к существующим документам, если считаете, что они не соответствуют требованиям.
Нельзя предполагать, что кто-то сможет понять ваши сценарии, просто прочитав их, особенно если вы используете настраиваемые псевдонимы и имена переменных. Например:
Set-ItemProperty -Path ‘HKLM:\SYSTEM\CurrentControlSet\Control\Terminal Server’-name «fDenyTSConnections» -Value 0
Кто-то, кто никогда раньше не изменял запись реестра, будет потерян. Они могут понятия не иметь, куда указывает этот -Path, и даже если они знают, что он изменяет запись реестра, нет никаких указаний на то, что именно эта запись изменяет.Поэтому они потратят кучу времени, пытаясь понять это, вместо того, чтобы быть продуктивными.
Простая строка комментария может сделать это гораздо более доступным для читателей:
# Отключить значение реестра, которое блокирует подключения, необходимые для RDP
Set-ItemProperty -Path ‘HKLM:\SYSTEM\CurrentControlSet\Control\Terminal Server’-name «fDenyTSConnections» -Value 0
Очень, очень важный момент: комментарии совершенно бесполезны, если они не являются точными или четкими. Попросите коллегу проверить ваши комментарии на манекене в качестве одной из форм проверки.
Комментирование следующего уровня: справка на основе комментариев
Справка на основе комментариев (CBH) представляет собой набор описаний и ключевых слов, заключенных в блочный комментарий. В отличие от обычных комментариев, PowerShell может читать ПОМОЩЬ НА ОСНОВЕ КОММЕНТАРИЙ и отображать ее по запросу с помощью команды Get-Help.
Пример использования CBH:
С помощью команды «Get-Help» PowerShell может прочитать информацию о поддержке, указанную в сценарии, содержащуюся в «<#» и «#>», а затем вывести ее в виде справочной документации.На выходе будет комбинация описаний, предоставленных автором, и информации, предоставленной самим PowerShell.
Например, использование «Get-Help» в приведенном выше сценарии приведет к выводу, подобному следующему:
CBH поставляется с бонусной функцией для пользователей Otter. Otter может сгенерировать графический интерфейс ваших сценариев PowerShell в доступный графический интерфейс, выполняемый как задание.
Долгосрочное использование и обслуживание сценариев
Скрипты являются активами компании, поэтому их следует поддерживать как можно дольше.Если вы постоянно тратите время на написание новых скриптов, вы можете не использовать автоматизацию и по-прежнему делать все вручную.
Чтобы ваши сценарии можно было поддерживать в долгосрочной перспективе, начните с написания одного-двух предложений, описывающих цель вашего сценария. Затем добавьте это как комментарий, в идеале перед .SYNOPSIS или .DESCRIPTION вашей справки на основе комментариев.
Затем подумайте, на каких типах систем можно запускать сценарий, например на настольных компьютерах или контроллерах домена, и убедитесь, что это понятно в вашем файле .ОПИСАНИЕ. Если это для критически важной системы с высокой доступностью, сценарий потребует особой осторожности для обслуживания, поэтому обратите внимание на это также в вашем .DESCRIPTION. Если скрипт не подходит для предполагаемой цели, он также затруднит использование скрипта участниками с низким опытом. Они могут извлечь из этого неверные уроки, что оборачивается совершенно новой проблемой , не обучающей (никто этого не хочет).
Убедившись, что сценарий написан хорошо, подтвердите, что его можно эффективно обновлять в долгосрочной перспективе, рецензируя его разными членами команды с разным уровнем опыта.
Регистрация
Для помощи в устранении неполадок со сценариями ведение журнала абсолютно необходимо. Это не обязательная практика для создания идеальных сценариев , потому что ведение журнала создает запись обо всем, что происходит при выполнении сценария PowerShell.
Это упрощает выполнение сценариев, потому что тот, кто запустил ошибочный сценарий, может более четко увидеть, что пошло не так.
PowerShell предоставляет различные командлеты, которые позволяют пользователям создавать подробные и удобочитаемые журналы, например:
- Write-Information: записывает информацию в поток 6 PowerShell (информация).Эта информация может быть перенаправлена в любой из других потоков через системную переменную $InformationPreference. Эту же переменную также можно использовать для приостановки скрипта при написании сообщения.
- Write-Debug записывает отладочное сообщение для кода, следующего за командлетом. Код обычно невидим, но его можно отобразить с помощью параметра «-debug» в определенных точках кода. Например, вы можете использовать его для отображения отладочного сообщения в случае сбоя.
- Write-Warning отображает предупреждающее сообщение желтого цвета для PowerShell .Выполнение скрипта не останавливается.
- запись-предупреждение «У нас может возникнуть проблема»
- Вывод: ВНИМАНИЕ: У нас может возникнуть проблема
- Write-Error отображает красное предупреждающее сообщение для PowerShell . Выполнение скрипта не останавливается.
- Ошибка записи «У нас проблема!»
- Вывод: C:/Users/kawauso/Untitled-1.ps1 : У нас проблема!
+ CategoryInfo : NotSpecified: (:) [Write-Error], WriteErrorException
+ FullyQualifiedErrorId : Microsoft.PowerShell.Commands.WriteErrorException,Без названия-1.ps1
Write-Verbose отображает всю информацию о том, что происходит во время выполнения скрипта. Поскольку иногда это может привести к тому, что будет отображаться слишком много информации, можно переключить использование подробного ведения журнала в скрипте с помощью параметра «-verbose».
Комбинируя эти методы ведения журналов, можно создать легко читаемый журнал с цветовой кодировкой, который упростит и ускорит анализ выполнения скриптов для всей команды, независимо от их уровня PowerShell XP.
Инструменты управления внешней инфраструктурой, такие как Otter , , могут считывать и собирать различные выходные потоки из PowerShell для создания постоянных записей, которые можно использовать для анализа сценариев более эффективно, чем просто прокручивая сотни строк вывода в PowerShell.
Качество кода благодаря лучшим практикам
Это не проблема: чем проще, тем лучше для кода. Почему? Потому что, когда что-то неизбежно идет не так, простое гораздо легче исправить, чем большое, длинное и сложное.
Начните с простого предположения: «Все, что я напишу, провалится». Я всегда предполагаю, что сценарий, который я пишу, не сработает, каким бы простым он ни был. Сценарий, запущенный на моем компьютере, может завершиться ошибкой на другом. Это может быть простая ошибка, поскольку путь к файлу жестко запрограммирован в скрипте только для того, чтобы понять, что нужное расположение отличается на другом сервере.
Чтобы легко исправить эти ошибки и (что, возможно, более важно) позволить другим легко исправлять эти ошибки в будущем, следуйте нескольким рекомендациям:
Согласованный стиль кода и форматирование
У каждого есть предпочтительный способ написания кода.Это может быть что-то столь же простое, как решить, поставить ли «{» в той же строке, что и имя функции, или на следующей строке.
Это нормально, когда вы пишете личные сценарии, которые будете использовать только вы, . Но при написании сценариев компании все сценарии должны быть отформатированы одинаково. Наличие единообразного форматирования во всей вашей библиотеке сценариев гарантирует, что тому, кто читает сценарий, не придется тратить время на то, чтобы понять смысл вашего сценария без отступов (но я не осуждаю).
Обработка различных путей и рабочих каталогов
Сценарии могут не выполняться на сервере, поскольку путь к файлу, указанный в сценарии, не соответствует фактическому пути к файлу на сервере. Управление путями — сложный вопрос, поскольку каждая система может иметь различную файловую структуру.
Во избежание ошибок вы можете (например) написать функцию для открытия диалогового окна файла, которая позволит вам вручную выбрать файл (возможно, следуя этим инструкциям о том, как создать диалоговое окно открытия файла/папки с помощью PowerShell) .Однако это противоречит цели автоматизации.
Вместо этого используйте переменные среды, чтобы не задавать конкретные пути. Например, вместо того, чтобы предполагать «C: \», используйте «$ env: SystemDrive», чтобы установить местоположение на системном диске. (Вы можете узнать, как использовать переменные среды, прочитав документацию Microsoft.) После того, как вы указали свои пути, обязательно проверьте их с помощью функции «Test-Path».
Обработка ошибок
Помните мантру: «Все, что я напишу, провалится.Это поможет с обработкой ошибок.
Сбой может быть чем-то простым, например невозможностью найти местоположение файла «cute-otters.jpg», или чем-то гораздо более серьезным, например, неправильное применение параметра, что приводит к неправильно настроенным серверам.
PowerShell поддерживает простую, но мощную функцию «Try/Catch», которая пытается выполнить команду и перехватывает любые возникающие ошибки.
Как только вы «поймали» ошибку, вы можете использовать «Управление потоком», чтобы решить, как должен действовать сценарий.Использование четкого управления потоком сделает ваш сценарий более читабельным благодаря четкому определению того, что произойдет в определенных сценариях. Например:
Разделите свои сценарии
Это факт, что более короткие сценарии легче читать и редактировать, особенно вашим инженерам с низким уровнем опыта. Хотя это не единственное преимущество. Более короткие сценарии также требуют меньше времени и ресурсов для выполнения.
Как долго ваш сценарий должен сводиться к тому, что мы обсуждали ранее: цели сценария.При написании новых сценариев или редактировании существующих сценариев задайте себе вопрос:
.- Что должен делать скрипт?
- Если сценарий выполняет несколько функций, действительно ли вам нужны эти функции в одном сценарии?
- В какой системе будет работать скрипт?
- Можете ли вы позволить себе запустить скрипт, выполнение которого может занять несколько часов?
Это может показаться здравым смыслом, но раздувание программного обеспечения и сценариев — это распространенные проблемы, которые могут легко проникнуть в ваши системы.Этого можно избежать, разделив сценарии на более мелкие и более управляемые части.
Заключение: идеальный сценарий
Как я уже сказал во введении, идеальный сценарий — тот, который все члены вашей команды могут понять, использовать и модифицировать. Он может легко меняться и развиваться вместе с потребностями вашей команды и организации.
Используя методы, изложенные в этой статье, ваши инженеры с 1000+ XP должны быть в состоянии писать сценарии, которые ваши более молодые (<1000XP) инженеры смогут легко понять, изучить и, что наиболее важно, чувствовать себя комфортно при редактировании/обновлении.Этот уровень комфорта необходим для того, чтобы ваша команда могла быстрее повышать уровень PowerShell и иметь возможность решать сложные проблемы, постоянно совершенствуя свои скрипты.
.