PowerShell и все, что вам нужно знать о нем
Что такое PowerShell?
Microsoft PowerShell — это утилита командной строки и язык сценариев, который является мощным инструментом для администраторов, помогающим автоматизировать широкий спектр компьютерных и сетевых задач. PowerShell содержит компоненты командной строки и построен на платформе .NET. Если вы изучаете сетевое администрирование, то вам нужно знать, что PowerShell — это инструмент, который выбирают администраторы информационных технологий для управления большими сетями.
Изучение того, как использовать PowerShell, поможет упростить многие утомительные ежедневные задачи. Вы также можете вносить общесистемные изменения по сети, не внося индивидуальные изменения в каждый сервер. PowerShell становится неотъемлемой частью работы гибридных облачных сред.
PowerShell имеет множество различных применений, помогающих вам работать более оптимально и поддерживать эффективную работу сети. Самые основные применения включают: планирование ежедневных обновлений в системах, создание отчетов для текущих процессов, циклических служб и многое другое. Верно, что многие из этих задач можно выполнить через графический интерфейс, но смысл PowerShell в том, чтобы делать их быстрее.
Если у вас есть регулярная задача по обслуживанию, настройка которой занимает несколько минут, вы можете записать те же функции в одну команду, названную на PowerShell. Так что в следующий раз вам просто нужно будет открыть этот скрипт, и он будет работать в фоновом режиме. Освоение логики скриптов PowerShell, понимание того, как работают объекты и vars (переменные), и разумное развертывание его в вашей сети заставят вас задуматься, почему вы не использовали PowerShell раньше.
В этом руководстве будут рассмотрены основы PowerShell, что поможет новичкам в ИТ, особенно если вы знакомы с командной строкой Windows. В статье будет рассказано, как использовать основные инструменты и команды, как манипулировать файлами и папками, понимать объекты, использовать переменные и управлять удаленными серверами.
Краткая история утилит командной строки Windows
После появления Windows NT CMD.EXE стал утилитой командной строки для Windows. Хотя CMD.EXE унаследовал некоторые компоненты своего предшественника DOS (COMMAN.COM), он по-прежнему основан на довольно «примитивном» языке сценариев: с использованием файлов команд Windows (.CMD и .BAT). Добавление Windows Scripting Host и языков VBScript и JScript значительно расширило возможности сценариев утилиты.
Эти технологии представляют собой довольно сбалансированное сочетание расширенных утилит командной строки и сред сценариев. На самом деле, вопрос о том, сколько файлов CMD.EXE, .CMD и Windows Scripting Host можно манипулировать, не является реальной проблемой. Больше всего людей заставляет жаловаться и беспокоиться выполнение некоторых, казалось бы, простых задач.
Используя «фреймворк» скриптов и инструментов командной строки, любой умеренно скомпилированный скрипт требует комбинации пакетных команд, Windows Scripting Host и автономных исполнений. Каждый скрипт использует различные соглашения для выполнения и запроса, анализа и возврата данных.
Слабая поддержка переменных в CMD.EXE, непоследовательные интерфейсы и ограниченный доступ к настройкам Windows в сочетании с другой слабостью затрудняют развертывание и использование сценариев командной строки. Вы, вероятно, сразу же зададитесь вопросом, в чем здесь «еще одна слабость»? Пожалуйста, скажите мне, что это простой текст. В этих технологиях все находится в текстовом формате. Вывод команды или скрипта представляет собой текст, который должен быть проанализирован и переформатирован, чтобы служить входными данными для следующей команды. Это базовая отправная точка, которую PowerShell берет из всех традиционных утилит.
Знакомство с инструментами, командами и модулями PowerShell
Три концепции, представленные в этом разделе, являются лишь основами для понимания ключевых концепций, которые формируют основу PowerShell. Вам понадобится больше времени, чтобы изучить и освоить более сложные концепции при подходе к командам PowerShell.
Инструменты PowerShell
PowerShell устанавливается по умолчанию в Windows 10, Windows 7, Windows Server 2008 R2 и более поздних версиях Windows. Новые версии PowerShell добавляют много новых функций и «командлетов» (термин Microsoft для команд PowerShell — произносится как «командлетс») и устанавливаются с использованием соответствующей версии Windows Management Framework (WMF). ).
В настоящее время WMF 5.1 является последней версией, рекомендуемой для использования. В некоторых случаях некоторые новые функции зависят от операционной системы в дополнение к версии WMF. Например, Windows 8 и Windows Server 2012 поддерживают командлет Test-NetConnection, который позволяет тестировать подключение к определенному порту TCP/IP, но этот командлет недоступен в Windows 7 даже при использовании последней версии WMF.
В большинстве систем Windows пользователям будут доступны две среды PowerShell: консоль PowerShell и PowerShell ISE (Integrated Scripting Environment). Консоль PowerShell выглядит так же, как традиционная командная строка, но со всеми функциями PowerShell за ней. Имена переменных, циклы, автодополнение команд и конвейеризация доступны из консоли PowerShell.
Для более глубокого использования (например, для создания скриптов) PowerShell ISE предоставляет автодополнение команд, подсветку кода и автодополнение кода Microsoft Intellisense, чтобы помочь вам в создании и тестировании кода PowerShell. PowerShell ISE также позволяет вам работать с несколькими скриптами PowerShell одновременно с помощью навигации с вкладками.
Командлеты в PowerShell
Основой команд PowerShell являются командлеты. Microsoft реализовала несколько стратегий проектирования при создании командлетов в PowerShell.
Первая — это возможность легко выводить имена командлетов или, по крайней мере, делать их более обнаруживаемыми. Команды или командлеты PowerShell также разработаны так, чтобы их было проще использовать, со стандартизированным синтаксисом, что упрощает создание скриптов из интерфейса командной строки.
Командлет использует формат Verb-Noun (глагол – существительное), как в Get-Service, Stop-Service или Import-Csv. Глагольная часть имени командлета будет указывать на действие, выполняемое над существительным. Обычно командлеты, используемые для получения информации, будут иметь глагол Get в имени, например Get-Process или Get-Content . Команда, используемая для редактирования чего-либо, обычно начинается с глагола Set , для добавления новой сущности куда-либо она обычно начинается с Add или New .
Во-вторых, часто используемые параметры в PowerShell также именуются стандартным образом. Например, параметр -ComputerName позволяет выполнить командлет на одном или нескольких удаленных компьютерах. -Credential используется для предоставления объекта учетных данных, содержащего учетные данные пользователя, для запуска команды от имени определенного пользователя.
Модули в PowerShell
Вы можете использовать псевдонимы как для командлетов, так и для параметров, чтобы экономить нажатия клавиш, сокращая общую длину команды (очень полезно, когда вы объединяете несколько команд вместе). Хотя эти псевдонимы не всегда используют стандартные соглашения об именовании, они по-прежнему отражают традиционные утилиты командной строки.
В PowerShell псевдонимы, такие как DIR, CD, DEL и CLS, соответствуют командлетам Get-ChildItem, Set-Location, Remove-Item и Clear-Host соответственно. Псевдонимы параметров могут работать двумя способами: они могут использовать псевдоним, предопределенный командлетом, или они могут быть псевдонимами, введенными путем ввода достаточного количества символов для создания уникального соответствия между указанными параметрами. Поддержка командлетов.
Управление файлами и папками
Большинству системных администраторов приходится манипулировать файлами и папками во время работы, например, перемещать папки в другое место на сервере, сохранять файлы журналов или искать файлы. big. В случаях, когда одни и те же операции повторяются в нескольких файлах, использование PowerShell для их автоматизации станет эффективным решением, экономящим время.
Для поиска файлов и папок одним из первых инструментов командной строки, который администраторы изучали на старых компьютерах, была команда dir. Dir выведет список файлов и каталогов, содержащихся в указанном каталоге.
В PowerShell есть похожая команда в виде командлета Get-ChildItem. Get-ChildItem позволяет быстро создать список файлов в каталоге таким образом, чтобы можно было работать с этим файлом через команду конвейера или назначать вывод переменной.
Get-ChildItem можно использовать, просто указав путь через конвейер, используя -Путь параметр или сразу после имени командлета. Чтобы настроить ответ, возвращаемый Get-ChildItem, необходимо рассмотреть несколько параметров, предоставляемых командлетом.
Фильтр параметр — один из способов поиска файлов. По умолчанию Get-ChildItem возвращает только прямые потомки целевой папки. Эту функциональность можно расширить, используя -Рекурсия который рекурсивно ищет каталоги, содержащиеся в текущем каталоге.
В PowerShell 4.0 Get-ChildItem добавлена возможность ограничивать результаты файлами или каталогами с помощью -Файл или –Каталог switch . Предыдущие версии PowerShell должны были передавать результат Where-Object, фильтруя по свойству PSIsContainer, чтобы сделать это определение. Примеры обоих методов, используемых для возврата каталогов, содержащихся в C:Users, показаны здесь:
Get-ChildItem C:Users -Directory Get-ChildItem C:Users | Where-Object {$_.PSIsContainer –eq $true}
Для обнаружения скрытых или системных файлов используйте -Сила Get-ChildItem в PowerShell 4.0 и более поздних версиях также можно использовать для возврата только скрытых, только для чтения или системных файлов с помощью -Скрытый, -Только для чтения и -Система соответственно. Подобная функциональность могла быть достигнута в предыдущих версиях путем фильтрации свойства Mode с помощью Where-Object:
Get-ChildItem C:Users | Where-Object {$_.Mode -like '*R*'}
Проверьте, существует ли файл
Обычно при работе с файлами нам нужно знать только то, существует ли файл или действителен ли путь к каталогу. PowerShell предоставляет командлет для этого в форме Test-Path, который возвращает true или false.
Test-Path используется в качестве профилактического шага перед попыткой копирования или удаления определенных файлов.
Копировать, перемещать и удалять файлы
Copy-Item: копирует один или несколько файлов или папок из местоположения, указанного параметром -Path, в местоположение, указанное параметром -Destination.
Move-Item: перемещение файлов или папок.
При копировании или перемещении структур каталогов -Рекурсия следует использовать для командлета, чтобы выполнить действие над каталогом и его содержимым. В некоторых случаях, -Сила необходимо, например, когда файл, доступный только для чтения, перезаписывается операцией копирования.
Remove-Item: удаление файлов и папок.
-Сила переключатель следует использовать при обнаружении файла или только для чтения и -Рекурсия следует использовать при удалении каталога и его содержимого.
Используйте PowerShell -WhatIf и -Confirm
Прежде чем выполнять серьезное массовое удаление чего-либо, используйте -Что, если . -WhatIf позволяет вам увидеть, что произойдет, если вы запустите скрипт или команду, есть ли у этого потенциальное негативное влияние удаления важных бизнес-данных. Также важно отметить, что -WhatIf не ограничивается файловыми операциями, он широко используется в PowerShell.
Для скриптов, которые вы собираетесь запускать вручную или, что еще хуже, имеющих зависимые команды, которые запускаются вручную, рассмотрите возможность использования -Подтверждать . Это позволяет вам запрашивать взаимодействие с пользователем до того, как действие фактически произойдет.
Скрипт PowerShell = Пакетные файлы на стероидах
Сам PowerShell написан на языке .NET и в первую очередь основан на .NET Framework. Поэтому PowerShell разработан как объектно-ориентированная утилита и язык сценариев. Все в PowerShell считается объектом с полной функциональностью .NET Framework. Команда, которая предоставляет коллекцию объектов, которые можно использовать с использованием свойств и методов этого типа объекта. Когда вы хотите передать вывод одной команды другой команде, PowerShell фактически передает объект, а не только текстовый вывод первой командной строки. Это дает следующей команде полный доступ ко всем свойствам и методам объекта в конвейере.
Обработка всего как объекта и возможность передачи объектов между командами — это серьезное изменение в теории для утилит командной строки. При этом PowerShell по-прежнему работает как традиционный демон оболочки. Команды, скрипты и исполняемые файлы можно вводить и запускать из командной строки, а результаты отображаются в текстовом формате. Файлы Windows .CMD и .BAT, VBScripts, JScripts и исполняемые файлы, работающие внутри CMD.EXE, по-прежнему работают в PowerShell. Однако, поскольку они не являются объектно-ориентированными, у них нет полного доступа к объектам, созданным и используемым в PowerShell. Эти устаревшие скрипты и исполняемые файлы по-прежнему будут обрабатывать все как текст, но вы можете объединить PowerShell с рядом других технологий. Это очень важно, если вы хотите начать использовать PowerShell с набором существующих скриптов, но не можете преобразовать их все сразу.
Объяснение параметров PowerShell
Командлеты могут принимать параметры для изменения своего поведения. При запуске командлета или функции вы можете указать значения параметров, чтобы указать, что, когда, где и как выполняется каждая команда PowerShell.
Например, Get-Process получит и выведет список всех активных процессов в вашей операционной системе:
Но что, если вы просто хотите получить определенный прогресс? Вы можете сделать это с помощью параметров. Например, чтобы получить все процессы Slack, вы можете использовать параметр Name с командлетом Get-Process:
Получить-Процесс-Имя Slack
После этого вы увидите только процессы с именем «slack»:
Совет: Некоторые параметры являются «позиционными», что означает, что их имена необязательны. В этом случае Get-Process -Name Slack и Get-Process Slack выполняют одну и ту же задачу.
Каждый Cmdlet будет принимать различные типы параметров. Используйте команду Get-Help для просмотра принятых параметров Cmdlet в разделе SYNTAX.
Получить-помощь Получить-процесс
Вы увидите список всех возможных способов запуска данного командлета:
В этом случае командлет Get-Process принимает такие параметры, как Name, Id, ComputerName, Module, FileVersionInfo и другие общие параметры. Символы здесь означают:
Символ
Имя
Значение
Барабан
Параметр не принимает входные данные
–
Дефис
Указывает имя параметра
Угловые кронштейны
Заполнитель для текста
()
Скобки
Параметр может принимать одно или несколько значений.
{}
Угловые кронштейны
Параметр принимает набор значений
Параметры принимают набор значений, которые будут указывать тип требуемых им данных, например, строка, целое число, логическое значение или DateTime. Например, следующая команда:
Получить-Процесс ((-Имя) )
. означает, что параметр Name принимает одно или несколько строковых значений, тогда как эта команда:
Получить-Процесс-Id
. означает, что параметр Id принимает одно или несколько целочисленных значений.
В предыдущем примере Get-Process использовался параметр Name для сужения результатов. Однако, если вы хотите сузить его до более конкретного процесса, вы можете использовать параметр ID, который требует целого числа, как указано в его синтаксисе.
Получить-Процесс -Идентификатор 3016
Тогда в списке вы увидите только один процесс:
Создать конвейер
PowerShell обрабатывает все данные как объекты. Для создания скрипта эти объекты проходят через ряд командлетов или функций, соединенных символом конвейера (|). Выбор правильных командлетов и их соединение в правильной последовательности с помощью конвейера важны для эффективного скрипта.
Предположим, вы создаете скрипт для сортировки и отображения 5 файлов, которые занимают больше всего места в папке. Существуют более мощные способы создания скриптов сортировки файлов, но следующий простой прост для понимания:
Чтобы сделать это в PowerShell, используйте конвейер, который выглядит примерно так:
Get-ChildItem -Path “C:Directory” -File | Сортировать-Длина объекта -По убыванию ` | Выбрать-Объект -Первые 5 | Формат-Имя таблицы, Длина -Авторазмер
Сохраните конвейер как скрипт PS1
Теперь, когда у нас есть работающий конвейер, вы можете сохранить его как файл сценария PS1, чтобы вам не приходилось импортировать его каждый раз при использовании.
Самый простой способ создать файл PS1 — вставить сценарий в Блокнот и сохранить файл с расширением .ps1.
После создания файла PS1 вы можете использовать его в PowerShell, запустив ./ScriptName.ps1 :
Совет: Если вы получаете ошибки разрешений, самым быстрым решением будет запустить PowerShell с правами администратора при запуске скрипта.
Поздравляем! Теперь вы можете создавать скрипты PowerShell PS1.
Пример скрипта PowerShell
Читать и понимать чудеса новой технологии — это одно, а изучать и использовать ее — совсем другое! В оставшейся части этой статьи мы разработаем скрипт PowerShell, чтобы продемонстрировать его возможности и применение.
DIR — одна из самых распространенных команд в CMD.EXE. Эта команда выводит все файлы и подпапки, содержащиеся в родительской папке (как показано на рисунке 1). Наряду с именем каждого объекта, предоставленная информация также включает дату и время последнего обновления и размер каждого файла. DIR также отображает совокупный размер всех файлов в папке, а также общее количество файлов и общее количество подпапок.
Рисунок 1
Запуск DIR в PowerShell также создает список каталогов, как на рисунке 2, но он немного отличается. В PowerShell нет команды DIR, но вместо нее есть Get-ChildItem, которая также выполняет ту же функцию. В PowerShell DIR является псевдонимом для Get-ChildItem. Я не собираюсь вдаваться в подробности о псевдонимах в этой статье. Вы можете считать DIR в PowerShell сокращением для Get-ChildItem.
DIR в PowerShell предоставляет большую часть той же информации, что и упомянутая выше: список файлов и папок, дата и время последнего обновления и размер каждого файла. Однако в нем отсутствует сводная информация, которую предоставляет DIR в CMD.EXE: общий размер всех файлов в папке, общее количество файлов и общее количество подпапок.
Рисунок 2
Для примера сценария вам нужно будет создать скрипт PowerShell, который имитирует команду CMD.EXE DIR. Ниже я объясню наиболее существенные части скрипта.
DIR.PS1: Заголовок
Скрипт PowerShell включает команды PowerShell в текстовом файле с расширением .PS1. Вместо DIR вы будете использовать текстовый файл с именем DIR.PS1.
Чтобы запустить скрипт, введите следующую команду на экране PowerShell:
.DIR.PS1 X:Папка
Где X — буква раздела диска (например, C, D, E), а Folder — имя папки.
Если вы хотите узнать некоторую информацию о разделах диска, вам придется использовать Windows Management Instrumentation (WMI). Подробности о WMI выходят за рамки этой статьи, поэтому мы не будем обсуждать их здесь. Но код PowerShell ниже довольно прост для понимания без необходимости использования WMI. Вы можете создать переменную '$filter' для использования с командой Get-WmiObject. Эта переменная фильтра сообщает команде Get-WmiObject, что вам нужна информация только о конкретном диске. Результаты команды Get-WmiObject сохраняются в переменной с именем $volInfo. Помните, в PowerShell все является объектом; $volInfo теперь также является объектом результата, возвращаемым Get-WmiObject.
$filter = “DeviceID = '” + $drive + “:'” $volInfo = Get-WmiObject -Class Win32_LogicalDisk -Filter $filter
Теперь вы можете получить доступ ко всем объектам и методам, связанным с объектом. Серийный номер раздела диска можно получить через свойство VolumeSerialNumber. Возвращаемая информация представляет собой 8-символьную строку цифр. Но обычно вы хотите отформатировать ее как четыре отдельных числа, разделенных дефисом. можно сделать так же, как в строке ниже. Дефис в конце первой строки — это символ продолжения строки в PowerShell. По сути, он просто сообщает PowerShell, что строка не прерывается, а включает следующую строку. Разделение строк не обязательно при написании кода, но чтобы уменьшить ширину и сделать код более удобным для чтения, вы должны это сделать.
$serial = $volInfo.VolumeSerialNumber.SubString(0, 4) + “-” + ` $volInfo.VolumeSerialNumber.SubString(4, 4)
Теперь, когда у вас есть объект $volInfo, вы можете записать информацию заголовка DIR на экран. Если у диска нет имени, текст, выводимый на экран, будет немного отличаться от текста, выводимого на экран, если у диска есть имя. Простой оператор If-Else используется для проверки того, является ли свойство VolumeName пустой строкой или нет. Команда Write-Host используется для записи каждой строки команды на экран.
If ($volInfo.VolumeName -eq “”) { Write-Host (” Том в накопителе ” + $drive + ” не имеет метки”) } Else { Write-Host (” Том в накопителе ” + $drive + ” равен ” + $volInfo.VolumeName) } Write-Host (” Серийный номер тома равен ” + $serial) Write-Host (” `n Каталог ” + $args(0) + “`n”)
Символ “n'' в начале и конце команды Write-Host используется для вставки новых строк перед текстом и после него. Команда Write-Host добавляет новую строку в конец каждой строки. Таким образом, эффект “n' заключается в создании пустых строк перед строкой текста и после нее.
Вы заметили '-eq' в операторе If? Это оператор сравнения на равенство. В таблице ниже показаны все операторы сравнения:
-eq, -ieq Сравнить равно -ne, -ine Сравнение не равно -gt, -igt Больше сравнение -ge, -ige Сравнить больше или равно -lt, -ilt Сравнить меньше -le, -ile Сравнить меньше или равно
Символ -i перед операторами сравнения указывает на то, что оператор нечувствителен к регистру.
Рисунок 3: Вывод скрипта, который у вас есть в данный момент
DIR.PS1: Список файлов/папок
Теперь вы готовы отобразить содержимое и свойства этой папки. Первое, что нужно сделать, это вызвать команду PowerShell Get-ChildItem, чтобы получить набор файлов и передать его скрипту в качестве параметра. Команда Get-ChildItem извлечет коллекцию объектов файлов и папок, не только имена, но и передаст эти объекты напрямую в команду Sort-Object для их сортировки. По умолчанию команда Sort-Object сортирует объекты на основе атрибута Name. Поэтому вам не нужно описывать какие-либо другие параметры. Затем отсортированная коллекция объектов сохраняется в переменной с именем $items.
$items = Get-ChildItem $args(0) | Сортировка-Объекта
После того, как у вас есть набор объектов файлов и папок, вам нужно выполнить итерацию по ним и отобразить соответствующие функции. Для этого используется команда ForEach. Для каждого файла или папки отображаемыми характеристиками будут дата и время последнего обновления, имя, длина или размер файла. Странная вещь, которая выглядит как строки символов в скобках, — это код формата строки .NET. Они используются для выравнивания полей по левому/правому краю и форматирования дат, времени и чисел. Понимание этих кодов формата строки не очень важно, поскольку они не являются существенными для природы этого скрипта.
Оператор If определяет, является ли объект каталогом или нет. Если первый символ атрибута Mode — «d», объект является каталогом. Вам нужно дважды проверить, поскольку код, написанный для каталогов, часто отличается от кода, написанного для файлов.
Обратите внимание на строку $totalDirs++ внутри оператора If. Это счетчик, отвечающий за отслеживание номеров каталогов. Аналогично, есть переменная $totalFiles, которая используется для отслеживания общего размера всех файлов. Эти значения всегда вычисляются во время выполнения. Но они отображаются только после завершения процесса листинга файлов.
ForEach ($i In $items) { $date = “{0, -20:MM/dd/yyyy hh:mm tt}” -f $i.LastWriteTime $file = $i.Name If ($i.Mode.SubString(0, 1) -eq “d”) { $totalDirs++ $list = $date + ” {0, -15}” -f ” ” + ” ” + $file } Else { $totalFiles++ $size = “{0, 18:N0}” -f $i.Length $list = $date + $size + ” ” + $file } $totalSize += $i.Length Write-Host $list }
Рисунок 4: Отображение выходных данных обновленного скрипта.
DIR.PS1: Нижний колонтитул
Осталось только вывести на экран общее количество файлов, папок, общий размер всех файлов и свободное место на этом разделе диска. Для этого вам понадобятся переменные-счетчики ($totalFiles, $totalDirs, $totalSize), созданные в предыдущем разделе. Узнать объем свободного места можно из переменной $volInfo, созданной в начале скрипта.
Write-Host (“{0, 16:N0}” -f $totalFiles + ” Файл(ы)” + ` “{0, 15:N0}” -f $totalSize + ” байт”) Write-Host (“{0, 16:N0}” -f $totalDirs + ” Каталог(ы)” + ` “{0, 16:N0}” -f $volInfo.FreeSpace + ” байт свободно”)
Рисунок 5: Полное отображение выходных данных скрипта.
Возможны улучшенные прогнозы и возможности
Хотя созданный вами скрипт выдает практически идентичный результат команде CMD.EXE DIR, есть некоторые прогнозы, о которых вам следует знать, и некоторые улучшения, которые можно внести.
- Этот скрипт не выполняет проверку на наличие ошибок.
- Если в скрипт не указан допустимый путь, скрипт завершится сбоем и выдаст сообщение об ошибке PowerShell.
- Общее количество папок, указанное в скрипте, на 2 меньше, чем результат команды CMD.EXE DIR, поскольку команда Get-ChildItem не учитывает две папки «.» и «.», как в CMD.EXE.
- Ваш скрипт сортирует только по имени файла и имени папки и не предоставляет других способов сортировки по атрибуту.
- Ваш скрипт не способен отображать содержимое папки и всех подпапок.
Заключение
Хотя PowerShell — это мощная утилита и язык сценариев, для его освоения и использования требуется совсем немного времени, особенно если вы не знакомы со средой .NET Framework. Надеюсь, эта статья с примером сценария будет полезна всем, кто хочет понять PowerShell. Но сценарий, созданный в качестве примера в статье, довольно прост. Поверьте, его можно построить и разработать более полно, чтобы он хорошо обслуживал более сложные приложения.
Карим Винтерс
Обновление 12 августа 2024 г.