Повысьте производительность с помощью сценариев Windows PowerShell

Итак, я решил протестировать работу скриптов powershell на Windows Server 2003. Имеем следующий файл находящийся в корне диска C: с именем audit.ps1.

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

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

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

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

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

Политика выполнения скриптов PowerShell Политика выполнения скриптов PowerShell PowerShell в Windows 10

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

Windows Powershell – ввод с клавиатуры

Вспомним наш пример:

PowerShell write-host «Попытка выполнить внешнюю функцию.» write-host «Пожалуйста, введите значение, которое вы хотите узнать:» write-host «1. Результат выполнения функции» write-host «2. Дату время и погоду» write-host «3. Дату и время» $ex=read-host

Читайте также:  Интеграция драйверов в установочный образ Windows 10 / Server 2012 R2
12345678 write-host «Попытка выполнить внешнюю функцию.»write-host «Пожалуйста, введите значение, которое вы хотите узнать:» write-host «1. Результат выполнения функции» write-host «2. Дату время и погоду» write-host «3. Дату и время» $ex=read-host

Ключевая строка, которая отвечает за ожидание ввода пользователя – самая последняя. read-host – отвечает за прием входящих введенных символов. В нашем случае обыграно так, что ввод записывается сразу в переменную. Это было необходимо для того, чтобы выбрать одно из трех заранее известных значений. Достаточно простой пример, и в принципе все понятно. Так же и понятно как работает read-host.

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

. .\try_execute_ write-host «Попытка выполнить внешнюю функцию.» write-host «Пожалуйста, введите значение, которое вы хотите узнать:» write-host «1. Результат выполнения функции» write-host «2. Дату время и погоду» write-host «3. Дату и время» $ex=read-host if ($ex -eq «1» -or $ex -eq «2» -or $ex -eq «3») { write-host «Выполняю функцию:» } elseif ([string]::IsNullOrEmpty($ex)) { write-host «Вы указали неверный параметр.» break; } switch ($ex){ «1»{ Execute-Function } «2»{ Get-DateOne } «3»{ Get-DateTwo } Default { write-host «Такой функции не существует.» } }

123456789101112131415161718192021222324252627282930313233343536 . .\try_execute_function.ps1 writehost «Попытка выполнить внешнюю функцию.»writehost «Пожалуйста, введите значение, которое вы хотите узнать:» writehost «1. Результат выполнения функции» writehost «2. Дату время и погоду» writehost «3. Дату и время» $ex=readhost if ($ex eq «1» or $ex eq «2» or $ex eq «3») { writehost «Выполняю функцию:»}elseif ([string]::IsNullOrEmpty($ex)) { writehost «Вы указали неверный параметр.» break;}switch ($ex){ «1»{ ExecuteFunction } «2»{ GetDateOne } «3»{ GetDateTwo } Default { writehost «Такой функции не существует.» }}

Что мы сделали? Во-первых, спасибо Дмитрию, оставившему комментарий в прошлой статье, который подсказал, что файл с функциями можно подключать только в начале файла. Во-вторых запомните именно такой синтаксис в операторе if. Если вы попробуете реализовать кастомный exception с условием -ne (not equals), то условие срабатывать не будет. Это связано с особенностями семантики powershell. В-третьих, теперь если мы ничего не введем, то у нас вылетит ошибка “Вы ничего не выбрали!”. В четвертых, у нас целых 2 исключения:

  1. Первое находится в elseif – выпадет в случае, если мы ничего не ввели.
  2. Второе находится в Default – это блок, который выводит значение по умолчанию, если в оператор switch прилетело значение, которого в нем нет.
Читайте также:  Установка и настройка System Center Configuration Manager 2012 r2

Так же мы добавили завершение скрипта, если мы ничего не ввели – break;

Итак, давайте попробуем запустить наш скрипт:

Почему PowerShell — это круто

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

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

Подробная информация о процессе. Одно дело использовать альтернативный диспетчер задач

, но PowerShell позволяет выполнять некоторые хитрые трюки в отношении управления процессами. Начните с собственных командлетов Get-Process и Stop-Process.

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

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

Командный трубопровод и логика. В Bash (Linux) команды могут передаваться вместе, так что выходные данные одной команды могут использоваться в качестве входных данных для другой команды. Например, базовый командлет Get-Process выводит информацию для всех запущенных процессов. Что если вы хотите получать информацию только из подмножества процессов? Вы можете передать его с помощью командлета Where-Object, который действует как фильтр процессов, чтобы выполнять Get-Process только для процессов, возвращаемых Where-Object.

Читайте также:  Установка и настройка гипервизора KVM на CentOS

PowerShell также предоставляет несколько собственных команд для условной логики (например, If, Else, For, Switch), которые можно использовать для управления потоком выполнения командлета. Например, вы можете создать сценарий PowerShell, который выполняет определенные командлеты только при соблюдении определенных условий (например, очистка процессов, когда объем ОЗУ близок к полному).

Удаленные и фоновые задания. Мало того, что командлеты могут выполняться как фоновые процессы (так что вы можете выполнять несколько задач одновременно асинхронно), но многие командлеты также могут выполняться на удаленных компьютерах в сети, если они были настроены для этого. Командлеты с удаленными возможностями часто предоставляют параметр ComputerName, который вы можете указать при выполнении указанного командлета.

Для получения дополнительной информации посетите эту страницу TechNet по запуску удаленных команд с помощью PowerShell.

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

Работа с элементами

В Windows PowerShell есть командлеты, которые умеют работать с элементами, под элементами здесь можно понимать: файлы, папки, ключи реестра и так далее.

  • Clear-Item — очищает содержимое элемента, но не удаляет сам элемент;
  • Copy-Item – копирует элемент;
  • Get-Item — получает элемент в указанном месте;
  • Invoke-Item — выполняет действие по умолчанию над указанным элементом;
  • Move-Item – перемещает элемент;
  • New-Item – создает новый элемент;
  • Remove-Item – удаляет указанные элементы;
  • Rename-Item — переименовывает элемент в пространстве имен поставщика Windows PowerShell;
  • Set-Item — изменяет элемент;
  • Get-ChildItem — возвращает элементы и дочерние элементы в одном или нескольких определенных местах;
  • Get-Location – выводит информацию о текущем местонахождении.

Запуск PowerShell

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

Вызвать окно PowerShell можно несколькими путями.

Запуск PowerShell

Представлено оно в двух видах:

  • классическая консоль;

Рис. 2 – Окно PowerShell

  • PowerShell ISE – добавляет поддержку вкладок, синтаксиса, контекстной справки, контекстного и главного и меню, что в значительной мере облегчает работу в интерпретаторе.

Рис. 3 – Внешний вид PowerShell ISE