Функции программы Windows powershell

Содержание

Добрый день! Уважаемые читатели и гости одного из крупнейших IT блогов рунета Pyatilistnik.org. В прошлый раз мы с вами очень подробно разобрали, как производится подключение к удаленному рабочему столу в разных операционных системах. Сегодня я вам так же хочу упростить жизнь и научить классным возможностям PowerShell. Мы научимся бороться с рутиной, созданием и использованием функций PowerShell, которые войдут в вашу жизнь так, что вы уже больше не сможете без них представить свое рабочее окружение, ведь проще запомнить одну команду, чем вспоминать, где располагаются ваши скрипты, какое у них имя и так далее.

Что такое функции PowerShell?

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

Читайте также:
Программа чтобы установить Windows 7 с флешки

И это имя используется для запуска вашей функции.

Использование функций в конвейере Windows PowerShell 5

По своему опыту хочу отметить, что если вы очень часто используете какие-то сценарии, то старайтесь переводить и сохранять их в функции, это будет экономить много времени, не забывайте делиться этими функциями в галереи PowerShell или github, давайте помогать друг другу.

Подробнее об этом можно прочитать в справке MS:

  • https://docs.microsoft.com/ru-ru/powershell/scripting/learn/ps101/09-functions?view=powershell-7.1
  • https://docs.microsoft.com/ru-ru/powershell/module/microsoft.powershell.core/about/about_functions?view=powershell-7.1

Представим себе ситуацию, что у вас есть какие-то повседневные задачи, которые вы решаете через скрипты PowerShell, например:

  • Часто ищите ID сессии пользователя на RDS ферме
  • Ищите события блокировки пользователя в Active Directory
  • Тестируете репликацию Active Directory
  • Или доступность основного шлюза

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

Упрощение рутины

Как создавать функции в PowerShell

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

Итак, обо всем по порядку, нам нужно определить, как мы будем запускать delprof2. Для моей функции я решил, что у меня будет стандартное расположение .exe и сделать его необязательным параметром:

15 Useful PowerShell Commands for Beginners | Learn Microsoft PowerShell

Param (
.
[string]$delprof2 = «c:windowssystem32delprof2.exe»
)

Я выбрал system32, потому что это начальный путь по умолчанию для PowerShell с повышенными привилегиями, но выберите то, что вам подходит. Чтобы фактически запустить delprof2, мы теперь используем амперсанд $delprof2 ‘/l’

Затем, чтобы получить результат, нам нужно присвоить его переменной:

$output = ^Ignoring profile ‘(?

\\([^\]+\)+(?[^’]+))’ (reason: (?[^)]+))»)

Далее, мы можем построить возвращаемый объект:

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

if ($line -match «^(?

\\([^\]+\)+(?S+))»)

Это дает нам больше полезных данных, которые мы можем использовать в возвращаемом объекте:

Читайте также:
Как поставить Windows программу на мак

Поскольку нам действительно нужно иметь возможность определять параметры для этой функции и мы также хотим иметь возможность принимать ввод с некоторыми параметрами. Для param блока мы можем начать с ( Parameter() для краткости исключаю настройки):

param (
[string]$Name
,
[string[]]$Include
,
[string[]]$Exclude
,
[int]$OlderThan
)

Так что нам понадобится пара циклов foreach, чтобы получить все переключатели в массиве:

$switches =
«/l»
if ($PSBoundParameters.ContainsKey(‘Include’)) <
foreach ($inc in $include) <
«/id:$inc»
>
>
if ($PSBoundParameters.ContainsKey(‘Exclude’)) <
foreach ($exc in $exclude) <
«/ed:$exc»
>
>
if ($PSBoundParameters.ContainsKey(‘OlderThan’)) <
«/d:$OlderThan»
>
>

if ($PSBoundParameters.ContainsKey(‘Name’) -and ($Name -ne $env:COMPUTERNAME)) <
if (Test-Connection $Name -Count 1 -Quiet) <
$computer += «/c:$Name»
> else <
Throw «Cannot ping $name»
>
>

И теперь наша команда будет выглядеть так:

$return = Файл» и выберите «Сохранить». Чтобы сделать вашу функцию доступной для всех пользователей, сохраните ее в ProgramFilesWindowsPowerShellModulesGet-InactiveUserProfiles.

Как сохранить свою функцию как модуль сценария

Это означает, что вы должны создать там папку с тем же именем, что и ваш файл. Выберите Тип psm1.

Создание папки для модуля PowerShell

Щелкните Сохранить. Закройте все сеансы PowerShell. Снова откройте PowerShell и запустите Get-Module, чтобы просмотреть новый модуль сценария.

Get-Module -ListAvailable

Просмотр своего созданного модуля PowerShell

А вот и ваш новый модуль и его функция:

Get-Command -Module Get-InactiveUserProfiles | Format-List

Вывод справки по созданному модулю PowerShell

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

Get-InactiveUserProfiles | Format-Table

Использование собственной функции PowerShell

Или если бы мы хотели получить только те профили, которые начинаются с «А» и не использовались более 20 дней:

Get-InactiveUserProfiles -Include ‘А*’ -OlderThan 20 | Format-Table

Помните, что мы можем принимать как входные, так и выходные объекты конвейера? Да, так что мы можем сделать несколько довольно интересных вещей, например, если вам нужно очистить профиль на нескольких компьютерах:

Get-ADComputer -Filter | Get-InactiveUserProfiles -Exclude ‘Administrator’ -OlderThan 10 | Where-Object

Это будет список профилей со всех компьютеров, возвращенных в этом запросе к AD, которые не являются профилем Administrator и не были использованы в течение 10 дней. Обратите внимание, что я использую командлет Where-Object для фильтрации только тех профилей, которые соответствуют этим критериям. Так что вы даже можете использовать Export-Excelи при необходимости создать хороший отчет для руководителя.

Вывод списка пользователей на определенном количестве компьютеров в Active Directory

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

Читайте также:
Лучшая программа для скриншотов Windows

Get-Content C:pathtocomps.txt | Get-InactiveUserProfiles | Where-Object

Как видите создавать свою функцию и свой модуль PowerShell не так уж и сложно, если вы это освоите, то сможете очень многое для себя улучшить. На этом у меня все, с вами был Иван Семин, автор и создатель IT портала Pyatilistnik.org.

Популярные Похожие записи:

  • Установка и управление модулями PowerShell
  • Удаление устаревших профилей на RDS ферме
  • Как запустить скрипт PowerShell в WindowsКак запустить скрипт PowerShell в Windows
  • Как поменять DNS имя подключения к Remote Desktop Services HAКак поменять DNS имя подключения к Remote Desktop Services HA
  • Как открыть PowerShell, все методыКак открыть PowerShell, все методы
  • Как массово поменять пароль локального администратора в домене

Функции в Windows PowerShell

В предыдущей статье мы говорили о командлетах в Windows PowerShell. Теперь поговорим о следующем типе команд — функциях.

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

Создадим простейшую функцию Primer , которая просто выводит сообщение. Для этого введем в PowerShell

Function Primer

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

Windows PowerShell, функции

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

Изменим нашу функцию Primer , добавив в неё переменную $Args .

Function Primer

Тогда при вызове функции нам необходимо будет прописать аргумент или аргументы. Внимательно посмотрите на скриншот ниже.

Windows PowerShell, функции

В данном случае «функции», «с» и «аргументами» — три элемента массива $Args . Как видим, они выводятся через пробел. Для того, чтобы убедиться, что это именно три отдельных элемента, введем разделитель в виде точки с помощью специальной переменной $OFS .

Function Primer< >> $OFS=».» >> «Это пример $Args.»> >>

Windows PowerShell, функции

Второй способ обработки аргументов функций в Windows PowerShell это использование формальных параметров. Формальные параметры указываются в круглых скобках после имени функции.

Продолжим наш пример с выводом сообщения. Снова изменим функцию Primer , приведя её к следующему виду

Function Primer ($a, $b, $c)

Результат будет тем же самым.

Windows PowerShell, функции

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

Создадим функцию Summa , которая складывала бы значения двух аргументов.

Function Summa ($a, $b)

Windows PowerShell, функции

Рейтинг
( Пока оценок нет )
Загрузка ...
EFT-Soft.ru