Powershell примеры. Примеры PowerShell скриптов для Windows. Разрешение общего доступа к папке с помощью Windows Powershell

Командлеты PowerShell для вывода данных

Обычно в процессе работы PowerShell генерируются некоторые выходные данные. Для вывода этих данных существуют специальные Out-командлеты (командлеты, название которых начинается с Out-). Когда выполняемая команда PowerShell возвращает данные, они передаются по конвейеру на вход Out-командлета, который обрабатывает их и отправляет в устройство вывода (на экран, в файл, на принтер и т.п.).

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

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

Для просмотра этих командлетов выполним команду:

Get-Command -Verb Out

Out-Host

Командлет Out-Host служит для вывода данных на экран. Например:

Get-Process powershell | Out-Host

Впрочем, добавлять Out-Host в конец команды совсем необязательно. В конце конвейера по умолчанию находится командлет Out-Default, который и перенаправляет все в Out-Host. Т.е. предыдущая команда эквивалентна команде:

Тестовый опрос компьютера с помощью PowerShell

Это отличная подсказка для объединения строк без необходимости их конкатенации. Наконец, используйте двойные кавычки, когда строка должна содержать одинарные кавычки. Двойные кавычки содержат весь контент. Обратите внимание, что только самый внешний набор котировок, по сути, важен. Одиночные кавычки являются буквальными символами. Даже простая строка, такая как «имя», является объектом типа «Система». Используйте период после имени переменной, чтобы сообщить оболочке: Я не хочу получать доступ ко всему объекту внутри этой переменной.

Get-Process powershell | Out-Default

которая в свою очередь эквивалентна команде:

Get-Process powershell

На самом деле механизм вывода еще запутаннее. Как вы помните, результатом работы PowerShell являются объекты. Out-командлеты не умеют работать с любыми объектами, а только со специальным типом объектов форматирования, поэтому при получении объекта вызывают один из командлетов форматирования (Format-*). Format-командлет предоставляет Out-командлету объекты форматирования, описывающие порядок построения выходных данных, а Out-командлет отправляет их в нужное устройство. Т.е. при выполнении команды:

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

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

Get-Process powershell

в действительности отрабатывает команда:

Get-Process powershell | Format-Table | Out-Host


Хотя добавлять Out-Host в конец команды необязательно, но в некоторых случаях удобно. К примеру он имеет ключ Paging , с помощью которого можно организовать постраничный вывод:

Полезные командлеты Windows PowerShell

Другими словами, скобки указывают оболочке «запускать эту первую». Все выражение в круглых скобках заменяется на все вырабатываемое из этого выражения выражение. Вот несколько примеров разума. Чтение этой статьи требует немного усилий. Начните с выражения в круглых скобках. А доступ к первому элементу массива является первой службой. Поскольку за ним следует период, мы знаем, что мы обращаемся к методу свойств или услуг, а не к объекту всей службы.

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

Get-Process | Out-Host -Paging


Командлет Out-File перенаправляет выходные данные в указанный файл, например:

Get-Process powershell | Out-File proc.txt

По умолчанию данные в файле перезаписываются. Запретить перезапись существующего файла можно, указав ключ NoClobber , а если необходимо дописывать данные в существующий файл, то можно использовать ключ Append , который добавляет данные в конец файла:

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

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

Get-Process powershell | Out-File proc.txt -Append


Для вывода в файл можно использовать сокращенный синтаксис. Например для записи:

Get-Process powershell >proc.txt

или для добавления в конец файла:

Get-Process powershell >>proc.txt

Out-GridView

Командлет Out-GridView выводит данные в виде графической таблицы, в которой их можно отфильтровать и отсортировать по нужному признаку. Для наглядности можно указать ключ Title , который будет отображаться в заголовке:

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

Давайте посмотрим на ваши основные сценарии построения, хотя вы всегда можете получить дополнительную помощь в этом, прочитав соответствующую тему «внутри оболочки». В его полной форме он похож на. Если выражение ложно, команды не будут выполняться. Это действительно все, что вам нужно, если вы строите. Они работают так же, как и для построения.

Get-Process | Out-GridView -Title processes


Начиная стретьей версии PowerShell Out-GridView поддерживает ключ PassThru , позволяющий передать полученные данные дальше по конвейеру. Например, можно вывести список процессов, в графической оснастке отобрать нужные и передать их командлету Stop-Process, который остановит выбранные процессы:

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

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

Get-Process | Out-GridView -PassThru | Stop-Process


Командлет Out-Null используется в том случае, если выходные данные отображать не нужно. Он отправляет полученные данные в устройство NULL, т.е. удаляет их. Для примера возьмем такую команду:

$process = Get-WmiObject win32_process -Filter ″Name = ′Notepad.exe′″
$process.Terminate()

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

Помимо основного действия (остановка процесса) она выводит много лишней информации. Чтобы избавится от нее, отправим вывод в Out-Null, например так:

$process.Terminate() | Out-Null

$process.Terminate() >$null


Командлет Out-String преобразует входные данные в массив строк. По сути Out-String преобразует объекты PowerShell в строки, с которыми дальше можно работать как с обычным текстом (форматировать, производить поиск и т.п.).

Он отличается только синтаксисом. Для начинающих легко переоценить эту конструкцию. Имя переменной используется, чтобы напомнить нам, что оно содержит одну или несколько служб. Просто потому, что это множественное число не приводит к тому, что оболочка ведет себя особым образом. Каждый раз он берет один объект из второй переменной и помещает его в первую переменную. Внутри этого конструктора используйте первую переменную для работы с отдельным объектом. В третьей строке указывается период «Я не хочу работать со всем объектом, только одним из его членов - методом Стоп».

Для примера выведем процесс, сохраним его в переменную $a и посмотрим тип данных:

$a = Get-Process powershell
$a.GetType()

Затем скормим содержимое Out-String а вывод сохраним в переменную $b:

$b = $a | Out-String
$b.Get-Type()

Как видно из примера, на входе Out-String тип данных Process, а на выходе String.


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

Out-String принципиально отличается от остальных out-командлетов. Поскольку обычные out-командлеты работают с конечным результатом предыдущих команд, то сами они не производят никаких выходных данных. Именно поэтому out-командлет обычно ставится последним в командной строке, ведь после него в конвейере не остается ничего, с чем могут работать другие командлеты.

Например, с циклом, который будет выполняться ровно десять раз. Это зависит от вас, чтобы выбрать лучшую конструкцию для выполнения этой работы. Если вы просматриваете Интернет для скриптов, будьте готовы к запуску на любых изменениях. Функция - это особый тип конструкции, который содержит группу связанных команд, которые выполняют уникальную и конкретную задачу.

Добавление параметров в скрипт

Однако следующей строкой, которая будет выполнена, будет строка восьмая, и это приведет к ошибке. Сценарий не содержит функции, называемой двумя. В результате он существует в рамках функции. Только другие функции внутри функции, можно видеть два. Попытка вызвать два из любого места приведет к ошибке. Редко создавать сценарий, предназначенный для выполнения точно такой же вещи каждый раз, когда он запускается. Чаще всего у вас будут сценарии, содержащие какие-то переменные данные или поведение переменных.

В отличие от них Out-String принимает объекты, преобразует их в массив строк и передает дальше по конвейеру. По умолчанию данные накапливаются и возвращаются одной строкой, но с помощью ключа Stream можно указать вывод по отдельной строке для каждого объекта.

Для примера выведем список системных служб со всеми свойствами и отформатируем его в виде таблицы:

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

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

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

Get-Service | Format-Table -Property * -AutoSize

Поскольку ширина консоли граничена 80 символами, то большинство данных будет обрезано, что не очень здорово.


Чтобы не обрезать вывод, направим его в Out-String и увеличим ширину:

Get-Service | Format-Table -Property * -AutoSize | Out-String -Width 1024

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

Надеюсь, вы узнаете что-то новое. Первый член, который обычно является глаголом, говорит нам, какой тип операции будет выполнен. Следующий член отвечает за то, что он должен быть. Правильное согласование обоих элементов позволяет легко и интуитивно настраивать команды, соответствующие ситуации. Однако, по сравнению с его предшественником, он работает несколько иначе. Благодаря этому результат, который мы получаем, больше не является простым текстом. Результат запроса, даже если он также представлен в текстовой форме, на самом деле является объектом со своими собственными свойствами и методами.

Теперь все данные попали на экран, но все равно выглядит не очень.


Исправим положение, передав вывод Out-String командлету Out-File:

Get-Service | Format-Table -Property * -AutoSize | Out-String -Width 1024 | Out-File service.txt

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

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

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


Командлет Out-Printer перенаправляет вывод на принтер. Например:

Get-Service | Format-Table -Property * -AutoSize | Out-File service.txt -Width 1024
Get-Content service.txt | Out-Printer

Вывод отправляется на принтер, заданный в системе по умолчанию. Для указания альтернативного принтера можно использовать ключ Name .

В админи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, а также, конечно же, исполняет консольные команды.

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

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

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

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



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

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

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



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



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



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

Разобравшись с редактором, можно приступать к написанию кода. 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

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

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

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

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

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

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

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



Понравилась статья? Поделиться с друзьями: