Вадим стеркин

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

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

– это усовершенствованная оболочка, интегрированная во все операционные системы Microsoft, начиная с Windows 7. Она включает в себя интерактивные подсказки и среду сценариев, которую можно использовать по отдельности или в комбинации.

Что такое Windows PowerShell ISE

Windows PowerShell ISE (интегрированная среда сценариев) – это приложение, появившееся в PowerShell 2.0. Она позволяет запускать команды и писать, тестировать и отлаживать сценарии в едином графическом интерфейсе пользователя на базе Windows.

Этот ISE включает командную панель, одну для сценариев и одну для вывода. Панель вывода отображает результаты команд, запущенных в двух других панелях. Кроме того, графическое окружение можно изменить, выбрав расположение блоков.

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

Как запустить Windows PowerShell ISE

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

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

Давайте подробно рассмотрим, какие функции и преимущества предлагает эта оболочка от Microsoft:

Время на прочтение

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

Если объём корзины (C:$Recycle.Bin) превышает 500МБ, то на панели появляется кнопка CR, она запускает скрипт для удаления из корзины файлов старше двух месяцев, таким образом пользователь не потеряет файл, недавно перемещённый в корзину.

Скрипт поддерживает работу с доменом и запрашивает имена пользователей у домена.

Также скрипт показывает информацию об устройствах и сетевых папках на удалённом ПК, кнопка Devices. Если устройство было подключено или отключено, то при следующем сканировании оно будет выделено цветом.

Запросы к удалённому ПК осуществляются командами Get-WmiObject, Invoke-Command и через доступ к папкам по SMB. Если скрипт не может получить информацию, то возможно доступ блокирует фаервол, либо на ПК отключены необходимые службы(WinRM), либо пользователь не добавлен в группу администраторы на удалённом ПК.

Скриншот 1Скриншот 2Вывод Devices с подсветкой подключенного устройства

Скрипт который поможет почистить диск. Сканирует папки на локальном и удалённом ПК, а также на сетевых папках, выводит путь и размер папки.

Для сканирования удалённого ПК используется команда Invoke-Command, для её работы требуется работа службы WinRM на удалённом ПК, если она остановлена, то служба запускается на время работы скрипта.

Ссылка на GitHub

Если вы знаете программы с подобным функционалом, напишите о них в комментариях, особенно если они лучше, возможно я о них просто не знал и потратил время зря 🙂

Цель упражнения — полностью локализовать установленную Windows на русский язык для текущего пользователя и всех созданных впоследствии аккаунтов.

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

В качестве подопытной системы используется английская Windows 11 23H2. ОС установлена с настройками по умолчанию, и никакие языковые параметры не менялись. Если у вас другой язык дистрибутива или добавлены языки, учитывайте это при управлении списком языков. В остальном разницы нет.

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

[+] Сегодня в программе

В Windows 11 добавили новый модуль LanguagePackManagement, а затем портировали его в Windows 10. Командлет Install-Language входит в состав этого модуля.

Пример добавления русского языка в английскую систему:

Install-Language ru-RU

Language Language Packs Language Features
——– ————– —————–
ru-RU LpCab BasicTyping, Handwriting, TextToSpeech, OCR

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

Добавленный командлетом язык не активируется автоматически!

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

Вадим стеркин

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

При использовании Install-Language можно избежать установки дополнительных компонентов параметром -ExcludeFeatures. Однако он блокирует все компоненты сразу, а тонкой настройки не предусмотрено. Это решается с помощью командлетов для управления компонентами по требованию. Ниже пример получения сведений о компонентах и удаления OCR после установки языка посредством Install-Language.

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

Вадим стеркин

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

Uninstall-Language

Для удаления языка в том же модуле LanguagePackManagement предусмотрен командлет Uninstall-Language. У него свои нюансы.

Copy-UserInternationalSettingsToSystem

В этом примере языковые параметры копируются всюду:

Здесь тонкостей поменьше.

Скрипт для полной локализации ОС

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

Вадим стеркин

Заключение

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

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

Что такое политика выполнения PowerShell?

Политика выполнения PowerShell (PowerShell Execution Policy) — это параметр, определяющий, какие типы сценариев PowerShell можно запускать в системе. По умолчанию для параметра установлено значение «Restricted». Когда этот режим активирован, PowerShell предоставляет только базовые команды интерактивной сессии командной строки, не позволяя загрузку и выполнение пользовательских сценариев. Параметр обеспечивает защиту от случайного или злонамеренного выполнения вредоносного кода.

Отметим, что режим «Restricted» может ограничить возможности PowerShell и повлиять на его функциональность. Поэтому существует несколько вариантов обхода этого параметра.

Почему администраторы хотят обойти политику выполнения?

Основная и самая частая причина – автоматизация процессов. Также есть несколько других причин, по которым PowerShell стал популярным среди администраторов, пентестеров и хакеров:

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

Перед использованием всех функций PowerShell злоумышленникам, возможно, придется обойти политику выполнения «Restricted». Мы можем посмотреть текущую конфигурацию с помощью команды PowerShell «Get-ExectionPolicy». Параметр по умолчанию имеет значение «Restricted».

:/>  Не работает микрофон в Windows 10 - простое решение проблемы - Синий экран BSOD

Вадим стеркин

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

Вадим стеркин

Настройка тестовой среды

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

Write-Host “My voice is my passport, verify me.”

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

Вадим стеркин

Если ваша текущая политика разрешает запуск скриптов, и вы хотите установить запрет в целях тестирования приведенных методов, запустите команду «Set-ExecutionPolicy Restricted» из консоли администратора PowerShell.

Обход политики выполнения PowerShell

1. Скопируйте сценарий в интерактивную консоль PowerShell.

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

Вадим стеркин

2. Отправьте сценарий в стандартный поток ввода PowerShell

Просто введите ваш скрипт в стандартный ввод PowerShell. Такой метод не приводит к изменению конфигурации и не требует записи на диск.

Вадим стеркин

3. Прочитайте сценарий из файла и перенаправьте его в стандартный поток ввода PowerShell

Используйте команду Windows «type» или команду PowerShell «Get-Content», чтобы прочитать сценарий с диска и перенаправить его в стандартный ввод PowerShell. Этот метод не приводит к изменению конфигурации, но требует записи сценария на диск. Однако вы можете прочитать его из общего сетевого ресурса, если пытаетесь избежать записи на диск.

Пример 1: команда Get-Content PowerShell

Вадим стеркин

Пример 2: Введите команду

Вадим стеркин

4. Загрузите скрипт по URL-адресу и выполните его с помощью Invoke Expression.

Такой метод можно использовать для загрузки сценария PowerShell из Интернета и его выполнения без записи на диск. Способ также не приводит к каким-либо изменениям конфигурации.

Вадим стеркин

5. Используйте переключатель функций PowerShell (Command Switch)

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

Пример 1: Полная команда

Вадим стеркин

Пример 2: Укороченная команда

Powershell -c “Write-Host ‘My voice is my passport, verify me.'”

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

6. Используйте переключатель EncodeCommand Switch

EncodeCommand Switch очень похож на Command Switch, но отображает все скрипты в кодировке Unicode/base64. Кодирование скрипта таким образом помогает избежать ошибок синтаксического анализа, с которыми вы сталкиваетесь при использовании Command Switch.

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

Вадим стеркин

Пример 2: Сокращённая команда с использованием закодированной строки

powershell.exe -Enc VwByAGkAdABlAC0ASABvAHMAdAAgACcATQB5ACAAdgBvAGkAYwBlACAAaQBzACAAbQB5ACAAcABhAHMAcwBwAG8AcgB0ACwAIAB2AGUAcgBpAGYAeQAgAG0AZQAuACcA

7. Используйте команду Invoke-Command

Обычно команда выполняется через интерактивную консоль PowerShell или в сочетании с параметром «Command», но команду можно использовать для выполнения скриптов в удаленных системах, где включен запуск скриптов PowerShell. Такой способ не приводит к изменению конфигурации и не требует записи на диск.

Вадим стеркин

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

8. Используйте команду Invoke-Expression

Команда не требует изменения конфигурации и записи на диск.

Пример 1: Полная команда с использованием Get-Content

Вадим стеркин

Пример 2: сокращенная команда с использованием Get-Content

9. Используйте флаг Bypass

Флаг будет обходить политику выполнения, когда вы выполняете скрипты из файла. Microsoft заявляет, что при использовании флага «ничего не блокируется и не выводится никаких предупреждений или сообщений». Техника не влечет за собой изменения настроек и не требует записи на диск.

Вадим стеркин

10. Используйте флаг Unrestricted

Флаг похож на Bypass, но при его использовании, как заявляет Microsoft, «загружаются все файлы конфигурации и запускаются все сценарии. Если вы запускаете неподписанный скрипт, загруженный из Интернета, перед его запуском у вас запрашивается разрешение». Такой метод не приводит к изменению конфигурации и не требует записи на диск.

Вадим стеркин

11. Используйте флаг Remote-Signed

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

PowerShell.exe -ExecutionPolicy Remote-signed -File .runme.ps1

12. Отключите ExecutionPolicy, заменив AuthorizationManager

Функцию можно выполнить через интерактивную консоль PowerShell или в сочетании с параметром «Command». После вызова функция заменит «AuthorizationManager» на null. В результате политика выполнения устанавливается на unrestricted до конца сессии.

Метод не приводит к постоянному изменению конфигурации и не требует записи на диск. Однако изменение будет применяться на протяжении всей сессии.

Вадим стеркин

13. Установите Excution Policy для уровня Process

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

Вадим стеркин

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

Вадим стеркин

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

Вадим стеркин

Подведение итогов

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

Вадим стеркин

четверг, 4 апреля 2024 г., 00:51:35

Изучение методов пересылки электронной почты в PowerShell с использованием Office365 Graph API

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

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

Invoke-RestMethod Отправляет запрос HTTP или HTTPS веб-службе RESTful.

Bearer $token Метод авторизации, включающий токены безопасности, называемые токенами на предъявителя. Используется для доступа к защищенным ресурсам.

-Method Post Определяет метод веб-запроса, при этом «Post» указывает, что данные отправляются на сервер.

-ContentType “application/json” Указывает тип носителя запроса, указывая, что текст запроса имеет формат JSON.

$oauth.access_token Получает доступ к свойству access_token из ответа аутентификации OAuth, используемому для выполнения аутентифицированных запросов.

Углубленное погружение в автоматизацию пересылки электронной почты с помощью PowerShell и Graph API

Предоставленные сценарии предназначены для автоматизации процесса пересылки одного электронного письма по его идентификатору с помощью PowerShell и Microsoft Graph API — мощного инструмента для взаимодействия со службами Office 365. Первый скрипт ориентирован на получение токена аутентификации, который имеет решающее значение для безопасного доступа к API Graph. Он начинается с определения идентификатора клиента приложения, идентификатора клиента и секрета клиента, которые являются важными учетными данными для потока аутентификации OAuth. Эти переменные используются для создания тела запроса POST, направленного к конечной точке Microsoft OAuth2. Этот запрос возвращает токен доступа после успешной аутентификации. Этот токен затем используется в заголовке последующих запросов для аутентификации пользователя и авторизации действий в Office 365, таких как пересылка электронной почты.

:/>  Управление объектом групповой политики windows active directory с помощью power shell

Пересылка электронной почты в Office365 через PowerShell и Graph API

Сценарии PowerShell для пересылки электронной почты

Настройка OAuth для доступа к API Graph в PowerShell

Настройка аутентификации с помощью PowerShell для Graph API

Изучение расширенного управления электронной почтой с помощью PowerShell и Graph API

Углубляясь в управление электронной почтой с помощью PowerShell и API Microsoft Graph, вы обнаруживаете надежную структуру, предназначенную для сложных операций с электронной почтой, помимо простого поиска и пересылки. Эта экосистема предоставляет программируемый интерфейс для функций электронной почты Office 365, предлагая детальный контроль над взаимодействием с электронной почтой. Интеграция PowerShell с Graph API расширяет возможности сценариев для автоматизации таких задач, как пересылка электронной почты, что крайне важно для администраторов, стремящихся оптимизировать свой рабочий процесс или процессы отладки путем перенаправления электронных писем на определенные адреса для дальнейшего анализа. Такая автоматизация особенно полезна в средах, где электронная почта играет решающую роль в рабочих процессах, позволяя быстро реагировать на ошибки или исключения, отмеченные уведомлениями по электронной почте.

Использование API Graph для операций с электронной почтой подчеркивает важность понимания OAuth 2.0 для безопасной аутентификации и авторизации. Сложность управления токенами аутентификации, создания запросов API и обработки ответов требует четкого понимания как сценариев PowerShell, так и структуры Graph API. Эти знания имеют решающее значение для создания сценариев, которые могут манипулировать объектами электронной почты, фильтровать на основе определенных критериев и выполнять такие операции, как пересылка, при этом придерживаясь лучших практик безопасности. Такие возможности неоценимы для ИТ-специалистов, которым поручено поддерживать бесперебойную работу каналов связи внутри организаций, демонстрируя мощь и гибкость сочетания PowerShell с API-интерфейсом Graph для расширенного управления электронной почтой.

Основные вопросы по пересылке электронной почты PowerShell через Graph API

В ходе исследования использования PowerShell в сочетании с API Graph для пересылки электронной почты в Office 365 мы обнаружили сочетание технической сложности и эксплуатационной необходимости. Это путешествие подчеркивает важность надежных навыков написания сценариев, глубокого понимания возможностей Graph API и пристального внимания к механизмам аутентификации, особенно в безопасных средах. Возможность программного управления электронной почтой — в частности, пересылки их на основе уникального идентификатора — демонстрирует значительный прирост эффективности при выполнении административных задач, устранении неполадок и управлении процессами. Более того, исследование проливает свет на более широкую применимость этих инструментов для автоматизации и оптимизации операций, связанных с электронной почтой, демонстрируя их потенциал для повышения производительности и непрерывности работы в различных бизнес-контекстах. По мере того, как мы продолжаем преодолевать сложности цифровой коммуникации, интеграция языков сценариев, таких как PowerShell, с API-интерфейсами, предназначенными для управления электронной почтой, становится краеугольным камнем стратегии для ИТ-специалистов, стремящихся использовать технологии для достижения организационных целей.

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

Буквально два года назад, имея базовые знания навигации в консоли Linux, написание несложных batch-файлов и небольшой опыт VBScript открыл для себя PowerShell, и после этого я уже в прямом смысле этого слова, не мог остановиться реализовывать свои идеи, правда, такое дело очень затягивает. В один момент решился завести канал на GitHub и там же по сей день виду работу с заметками, где за это время накопилось более 6 тысяч строк из описания работы cmdlet (PowerShell-команд) и утилит для Системного Администратора (AD, Exchange, VMWare, MSSQL и т.д.) с примерами, ведь далеко не все получалось найти в интернете, порой, только изучая на практике свойства и методы объектов, можно получить желаемый результат. Так же набралась небольшая коллекция модулей и тестовый стенд WinForms с примерами работы различных методов, на котором я в дальнейшем базировался для написания приложений с графическим интерфейсом. Все работы писал по большей части для себя с целью автоматизировать и разгрузить текущий рабочий процесс, иногда помочь коллегам, именно по этому мне хочется поделиться своими наработками, возможно кому-то это еще сможет пригодиться.

Так сложилось, что многие с кем я общался, недолюбливают данный язык, порой, не воспринимают за язык вовсе, на рынке и правда для написания скриптов есть более функциональные конкуренты, но когда ты являешься администратором Windows систем, то это однозначно лучший, а порой незаменимый инструмент под рукой. Во-первых, язык является объектно-ориентированным, что сильно упрощает работу, и хотя в последнее время активно пишу на Bash, где преимущества в работе с текстом очевидны, но в силу привычки, мне очень не хватает данной модели, прибегая к сторонним инструментам, например jq и xmllint, которые нужно изучать отдельно, формировать массивы используя свой синтаксис. В PowerShell весь процесс автоматизирован и привычен. Во-вторых, язык на прямую интегрирован с платформой .NET, что дает возможности, как создание графических форм, используя WinForms и WPF, сетевые сокеты (например, можно написать свой syslog сервер), использовать различные библиотеки (изначально написанные на, или для C#), вплоть до создания и манипуляциями с графикой (создание или редактирование изображений).

Думаю очевидно, что для системного администратора графический интерфейс дает много возможностей, например, можно оптимизировать работу консольной команды или целого ряда cmdlet, не запоминая все ключи, имея возможность менять параметры наглядно в формах интерфейса. Автоматизировать процесс создания учетных записей в Active Directory, или формирование динамических табличный отчет состояния инфраструктуры VMWare (помимо набора модулей из PowerCLI присутствует целый ряд встроенных командлетов для Hyper-V) или Exchange (EMShell), где с помощью нескольких кликов можно узнать состояние всех баз данных и групп доступности в удобном формате, просмотреть message tracking log и выгрузить PST (возможность, которая отсутствует в консоли управления). Все это позволяет автоматизировать рутину, а главное, оптимизировать работу инструментов под себя. Естественно, никто не мешает выбрать другой интерфейс взаимодействия, например написать своего собственного бота Telegram или использовать Pipeline в Jenkins, где вся логика будет на PowerShell, и вероятно, для многих решения на базе скриптов могут казаться костыльными, тем не менее, это работает, а порой очень хорошо и других вариантов попросту может и не быть. Но в конечно итоге можно создать свою службу (используя бесконечный цикл и NSSM) или даже конвертировать скрипт в исполняемый exe-файл используя модуль ps2exe.

Фоновые задания (Jobs). Здесь смотря с кем сравнивать, например в Bash для управления jobs слишком мало функционала, они есть и работают неплохо, но по факту сами задания непредсказуемы и нуждаются в дополнительном логирование. По времени выполнения, тут все не очень хорошо, но наглядно, т.к. задания выполняются упорядочено (в отличие от Thread в Python). Для сравнения на ping 256 машин занимает примерно 2 минуты используя встроенный модуль, если воспользоваться модулем ThreadJob, время сокращается в среднем до 26 секунд, а вот задания через PoshRSJob уже 13 секунд.

:/>  Subfolders in a given folder via the command prompt?

Вадим стеркин

Сравнение скорости работы модулей фоновых заданий

А вот в Python это занимает всего 5 секунд уже с resolve именем хоста, где можно так же создать отдельный поток для графического интерфейса (в примере, TKInter).

Вадим стеркин

Пример графического интерфейса для ping подсети на python.

Но эту проблему можно исправить, используя классы .NET, например, System.Net.Sockets.TcpClient для проверки портов, где можно определить timeout ожидания ответа в 100мс и ситуация становится более наглядной, и демонстрирует разницу, при проверки одного порта на всех 254 хостах, создание заданий с использования ThreadJob занимает в среднем на 30-40% меньше времени, чем пауза (Start-Sleep) в 100 миллисекунд.

Вадим стеркин

Сравнение метода BeginConnect с и без использования ThreadJob (timeout 100 milliseconds).

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

Вадим стеркин

Интерфейс последней версии RSA 1.4.1

Далее мне хотелось увеличить возможности удаленного администрирования без прямого взаимодействия с удаленным пользователем и добавить инструментов, за время работы у меня выработался определенный алгоритм, который я выполняю при анализе проблем в работоспособности операционной системы – это оценка нагрузки процессов, состояние служб, проверка uptime, последних обновлений и установленных приложений, состояние синхронизации компьютерных часов (ntp) и лицензий (kms), анализ сетевых настроен, подключений и конечно логов. Всем этим и не только возможно управлять удаленно, и у меня это получилось поместить в один интерфейс.

Работа с REST API. Есть одна ключевая особенность, PowerShell способен на прямую конвертировать вывод JSON и XML в объект (в обоих направлениях), что сильно оптимизирует работу для написания своих собственных скриптов взаимодействия с различными сервисами, для меня это остается самым удобно читаемым форматом, на фоне альтернатив, например, модулей для IDE. В остальном, преимуществ у Invoke-RestMethod или Invoke-WebRequest над curl особых нет. А вот для создания собственного REST API сервера вариантов наберется даже несколько. Имеется полноценный кроссплатформенный Web Framework Pode для создания REST API, веб-сайтов и серверов TCP/SMTP. Можно воспользоваться встроенным классом .NET HttpListener, на базе которого можно обработать все условия кодов возврата и использоваться базовую авторизация (Base64), и допустим создать возможность управления Windows системой на платформе Linux без необходимости конфигурирования WinRM – WinAPI, пример такой реализации.

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

Благодаря прямому взаимодействию PowerShell с ОС Windows и COM-объектами, вы можете создавать собственные кликеры на WScript для автоматизации любым простых действий (порой незаменимый подход по сей день, особенно, если это старые desktop Windows приложения), управлять продуктами MS Office (например, автоматическое создание подписи в Outlook с получением информации о пользователи из LDAP), создание и парсинг Excel-отчетов или автоматизация действий в браузере через Internet Explorer (альтернатива Selenium). Для примера у меня была задача, читать из smb каталога Excel-файл и смотреть на даты окончания срока доступа, по итогу такого совпадения делать рассылку на почту (указанную в столбце с Email и информацией в теле письма, о чем идет речь из столбца с описанием). Или, с указанным интервалом получать метрики измерений скорости интернета, используя Okkla Speedtest с выгрузкой их в InfluxDB и отрисовской в Grafana. Так же мне было удобно читать отчеты на почте состояния заданий и репозиториев Veeam, пока я нахожусь в дороге на работу, а позднее, написал модуль получения данных через REST API, который в дальнейшем развил до автоматизации добавления виртуальных машин в систему резервного копирования.

.NET Framework/Core. Модули есть практически для всего, можно даже создать собственный сервер мониторинга через WMI/CIM (фактически метрики дублируют Performance Counter), или библиотеку SNMP. Есть ряд библиотек для различных баз данных, таких как MS SQL (имеет 3 варианта взаимодействия, в том числе встроенный класс System.Data.SqlClient), MySQL Connector, SQLite, для других же присутствует стандартизированный программный интерфейс взаимодействия ODBC (присутствуют драйверы для PostgreSQL, Firebird, Elastic и т.д.). Примеры для работы с различными модулями можно посмотреть тут. У меня как-то была задача, реализовать рассылку оповещений об окончании срока действия лицензий из ITInvent (данная программа мне очень нравится своим удобством удобной, т.к. работал с ней в разных компаниях, но к сожалению данный функционал отсутствовал), где база крутилась в MS SQL Express на Oracle Linux, разобравшись во взаимосвязях между таблицами эту задачу получилось выполнить за 3 дня и на выходе всего 70 строк кода.

Selenium. Очень удобный и простой инструмент в первую очередь для функционального тестирования, но так же может быть полезен при автоматизации тех действий, для которых не предусмотрено API. Ключевой проблемой в PowerShell является отсутствие актуального готового решения подготовки всех зависимостей для работы с данным инструментом. Данный процесс подготовки у меня получилось автоматизировать, и как мне кажется, требует отдельного внимания, по этому планирую написать отдельную статью.

На этом пожалуй все. Осознаю, что многие решения нужно было описывать в свое время отдельной статьей, все работы это только энтузиазм, не являюсь разработчиком, весь опыт исключительно на практике. В освоение большинства тем очень помогали статьи различных источников, в т.ч. Habr и большая база знаний Microsoft, где так же присутствует браузер модулей PowerShell и .NET API.

Как обновить PowerShell

Вадим стеркин

На этом закончим. Если вас заинтересовал этот материал, не забудьте заглянуть на канал PDALIFE Official в Telegram, а своими мнениями о прочитанном делитесь в комментариях.

Минутка теории

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

Вадим стеркин

Как взаимодействовать с Windows PowerShell

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

Мы можем использовать символы переправления для отправки вывода в файл или для добавления в файл. PowerShell использует псевдонимы для связи команд cmd.exe со своими командлетами. Например, команда cd является псевдонимом для командлета set-location, точно так же, как dir является псевдонимом для командлета get-children.

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

Одна из сильных сторон этой оболочки – её командлеты. Каждый командлет представлен «глаголом», за которым следует тире и существительное.

Чтобы просмотреть полный список всех доступных командлетов, введите get-command. Чтобы получить информацию о конкретном командлете, введите get-help и имя командлета.

Как узнать версию

Чтобы узнать используемую версию PowerShell, запустите этот инструмент любым удобным способом и введите команду

Текущая версия будет указана в поле PSVersion.

Вадим стеркин

После объяснения, что такое Windows PowerShell, давайте посмотрим, как его запустить.

Более современный способ – доступный в Windows 10 – щелкнуть правой кнопкой мыши по меню «Пуск» и выбрать соответствующий пункт из меню «Опытного пользователя»

Оставьте комментарий