Версии Windows PowerShell
Первая версия PowerShell 1.0 появилась 14 ноября 2006 года и выпускалась в виде отдельного дистрибутива, который можно было установить на следующие версии операционных систем Windows: Windows XP Service Pack 2, Windows Server 2003 Service Pack 1 и Windows Vista.
В Windows Server 2008 PowerShell 1.0 поставлялся в виде компонента, который также нужно было устанавливать.
Начиная с Windows 7 и Windows Server 2008 R2, PowerShell поставляется как неотъемлемый компонент системы (т.е. предустановленный, устанавливать его не надо). Ниже представлена таблица соответствия версии PowerShell и версии операционной системы Windows (т.е. какая версия PowerShell по умолчанию установлена в той или иной версии Windows):
Версия PowerShell | Версии Windows |
PowerShell 2.0 | Windows 7, Windows Server 2008 R2 |
PowerShell 3.0 | Windows 8, Windows Server 2012 |
PowerShell 4.0 | Windows 8.1, Windows Server 2012 R2 |
PowerShell 5.0 | Windows 10, Windows Server 2016 |
С каждой новой версией PowerShell становится все более мощным инструментом администрирования, для сравнения в первой PowerShell было около 130 командлетов, а в PowerShell 5.0 их уже более 600!
Узнать текущую версию PowerShell можно с помощью свойства PSVersion встроенной переменной $PSVersionTable, например, выполните следующую команду:
$PSVersionTable.PSVersion
Или запустите командлет
Get-Variable -Name PSVersionTable –ValueOnly
где, значение PSVersion и будет версией PowerShell.
Удаленное управление на PowerShell
Windows PowerShell рассчитан не только на локальное использование, но и на удаленное выполнение команд. Данная возможность необходима, чтобы Вы могли со своего рабочего места управлять удаленными компьютерами, т.е. выполнять команды PowerShell.
Существует несколько способов удаленного управления:
- С помощью параметра –ComputerName (есть у многих команд). Другими словами Вы передаете имя компьютера, на котором необходимо выполнить команду, в качестве параметра. Способ обладает недостатком, так как ограничивается выполнением одной команды;
- С помощью сессий. Командлет Enter-PSSession (интерактивный сеанс). Таким способом Вы подключаетесь к удаленному компьютеру и все команды, которые Вы будете набирать в оболочке PowerShell, будут выполняться на удаленном компьютере так же, как если бы Вы набирали команды непосредственно на удаленном компьютере. Способ также обладает недостатком, так как сеанс ограничивается одним компьютером;
- С помощью командлета Invoke-Command. С помощью данного способа можно выполнять команды или сценарии как на одном компьютере, так и на нескольких.
Например, чтобы подключиться к удаленному компьютеру (в примере ниже ServerName) интерактивным сеансом выполните следующую команду:
Enter-PSSession ServerName
Дискуссия и опрос
Для опытных «скриптовиков» и системных администраторов в PowerShell 5.0 есть и другие интересные возможности (например, классы по аналогии с языками объектно-ориентированного программирования). Полный список вы найдете на этой странице TechNet (ссылка ведет на английскую версию специально, поскольку русская пока не содержит сведений о 5.0).
Как вы устанавливаете программы после чистой установки системы?
- Вручную устанавливаю свежие версии (73%, голосов: 235)
- Моего варианта тут нет (6%, голосов: 18)
- Вручную устанавливаю старые версии с диска (5%, голосов: 17)
- Использую Ninite для установки свежих версий (4%, голосов: 14)
- Применяю другой способ установки (4%, голосов: 13)
- Пользуюсь только портативными программами, ничего не устанавливаю (4%, голосов: 12)
- Скриптом устанавливаю свежие версии (в т.ч. OneGet) (2%, голосов:
- Скриптом устанавливаю старые версии с диска (1%, голосов: 2)
- Обхожусь только встроенными программами, ничего не устанавливаю (1%, голосов: 2)
Проголосовало: 321
Загрузка …
Упражнение. Поиск связанных команд
Цель этого упражнения — получить дополнительные сведения о команде. В итоге вы также узнаете, с каким типом работает команда, и какие другие аналогичные команды работают с тем же типом.
-
Запустите оболочку PowerShell.
-
Выполните команду .
Результат будет примерно таким:
Вы получаете типы, возвращаемые командой . Теперь вы можете узнать, какая другая команда также работает с этими типами.
-
Выполните команду .
Результат будет примерно таким:
Поздравляем! Вы смогли найти другие команды, которые работают с одним и тем же типом .
Использование является хорошей отправной точкой, чтобы понять, какие другие команды следует изучить дальше.
Управление приложением
Windows 10 включает две технологии: управление приложениями в Защитнике Windows (WDAC) и AppLocker, которые можно использовать для управления приложениями. Они позволяют создать интерфейс блокировки в соответствии с конкретными сценариями и требованиями вашей организации.
Примечание
Когда речь идет о , клиентам обычно рекомендуется использовать управление приложениями с помощью WDAC, а не AppLocker. Платформа WDAC постоянно совершенствуется, и планируется добавить поддержку от платформ управления Microsoft.
Несмотря на то, что AppLocker будет по-прежнему принимать исправления безопасности, новые усовершенствования функций не планируются.
WDAC был впервые реализован в Windows 10, позволяя контролировать, какие драйверы и приложения можно запускать на устройствах Windows 10 организации. WDAC разрабатывался как функция безопасности в соответствии с критериями обслуживания, определенными Центром Microsoft по реагированию на угрозы (MSRC).
AppLocker создан на основе функций управления приложениями в рамках политики ограниченного использования программного обеспечения.
AppLocker содержит новые возможности и расширения, позволяющие создавать правила для разрешения или запрещения запуска приложений на основе уникальных удостоверений файлов, а также указывать, какие пользователи или группы могут запускать эти приложения.
Дополнительные сведения об AppLocker и управлении приложениями в Защитнике Windows (WDAC) см. в разделе Элементы управления приложениями для Windows и Доступность функций WDAC и AppLocker.
Изменения в PowerShell 7.2
-
В AppLocker вы могли столкнуться с тупиковой ситуацией, в которой были доступны только правила отклонения и невозможно было использовать ограниченный режим, чтобы принудительно применить политику, разрешающую обойти политику выполнения. Начиная с PowerShell 7.2, внесено изменение, благодаря которому правила AppLocker имеют приоритет над командой .
-
В PowerShell 7.2 теперь запрещено использовать командлет во время сеанса PowerShell в режиме NoLanguage на заблокированном компьютере.
-
В PowerShell 7.2 теперь скрипты не могут использовать COM-объекты в условиях системной блокировки AppLocker. Это изменение не коснулось командлетов, внутренне использующих COM или DCOM.
Изменения в PowerShell 7.3
Теперь PowerShell 7.3 поддерживает возможность блокировать или разрешать файлы сценариев PowerShell через API WDAC.
Критерии обслуживания безопасности
Для PowerShell действуют Критерии обслуживания безопасности Майкрософт для Windows.
В таблице ниже приведены функции, которые удовлетворяют или не удовлетворяют этим критериям.
Функция | Тип |
---|---|
Блокировка системы — с использованием Управления приложениями в Защитнике Windows | Функция безопасности |
Ограниченный языковой режим — с использованием управления приложениями в Защитнике Windows (WDAC) | Функция безопасности |
Блокировка системы — с использованием AppLocker | Углубленная защита |
Ограниченный языковой режим — с использованием AppLocker | Углубленная защита |
Политика выполнения | Углубленная защита |
Сценарии, функции и модули в Windows PowerShell
Если Вы написали некий алгоритм, скорей всего Вы захотите сохранить его, для того чтобы в дальнейшем им пользоваться. В Windows PowerShell для этих целей существует механизм использования сценариев.
Суть данного механизма следующая, Вы пишите нужный Вам набор команд и сохраняете его в качестве сценария — это простой текстовый файл с расширением .PS1.
Затем, для того чтобы выполнить этот сценарий, Вы просто запускаете его в оболочке PowerShell. При этом Вам необходимо либо указать полный путь к файлу сценария, либо перейти в каталог со сценарием и вызвать его по имени.
Важно!
По умолчанию выполнение сценариев в Windows запрещено! Для того чтобы посмотреть политику выполнения сценариев выполните командлет Get-ExecutionPolicy. В результате он вернет действующую политику, например:
- Restricted – блокируется выполнение любых сценариев (значение по умолчанию);
- AllSigned – разрешено выполнение сценариев, которые имеют цифровую подпись;
- RemoteSigned – разрешено выполнение локальных сценариев, все скачанные сценарии должны иметь цифровую подпись;
- Unrestricted — разрешено выполнение любых сценариев (не рекомендуется, так как небезопасно!).
Для разрешения выполнения сценариев необходимо использовать командлет Set-ExecutionPolicy с одним из вышеперечисленных параметров.
Например, для разрешения выполнения локальных сценариев выполним следующую команду, и согласимся с внесением изменений, нажав Y.
Set-ExecutionPolicy RemoteSigned
В сценарии можно передавать параметры, делать их обязательными или задавать значение по умолчанию.
В Windows PowerShell предусмотрен механизм создания собственных функций, которые также как и встроенные командлеты можно будет использовать в оболочке PowerShell.
Для этого необходимо указать ключевое слово Function и затем в фигурных скобках {} написать алгоритм работы этой функции, т.е. набор команд (например, какая-нибудь часто используемая процедура: создать пользователя с определенными правами, очистить определенные каталоги и так далее). Потом необходимо сохранить все это в сценарий, но только уже с расширением .psm1, так как этот файл будет являться уже модулем.
Это еще не все, этот файл необходимо поместить в каталог, в котором PowerShell ищет модули. Таких каталогов несколько (специальный каталог в профиле пользователя, каталог, где установлен PowerShell), их можно посмотреть в переменных окружения PowerShell. Для этого выполните следующую команду
Get-ChildItem Env:\PSModulePath | Format-Table -AutoSize
После того как Вы поместите написанный Вами модуль в специальный каталог, Вы сможете обращаться к своим функциям как к обычным командам PowerShell.
Команды безопасности
PowerShell использует класс System.Management.Automation.VerbsSecurity для определения действий, которые применяются к безопасности. В следующей таблице перечислено большинство определенных команд.
Команда (псевдоним) | Действие | Неподходящие синонимы |
---|---|---|
Block (bl) | Ограничивает доступ к ресурсу. Эта команда образует пару с командой . | Prevent, Limit, Deny |
Grant (gr) | Разрешает доступ к ресурсу. Эта команда образует пару с командой . | Allow, Enable |
Protect (pt) | Защищает ресурс от атак или потери. Эта команда образует пару с командой . | Encrypt, Safeguard, Seal |
Revoke (rk) | Указывает действие, которое не разрешает доступ к ресурсу. Эта команда образует пару с командой . | Remove, Disable |
Unblock (ul) | Удаляет ограничения для ресурса. Эта команда образует пару с командой . | Clear, Allow |
Unprotect (up) | Удаляет меры защиты для ресурса, которые были добавлены, чтобы предотвратить атаку или потерю. Эта команда образует пару с командой . | Decrypt, Unseal |
Другие особенности
Итак, мы рассмотрели все основные функции, и вот еще кое-что, о чем я хотел рассказать, прежде чем мы закончим.
Массивы с предварительно заданным размером
Я уже говорил, что вы не сможете изменить размер массива после того, как он создан. Можно создать массив с предварительно заданным размером, вызвав его с помощью конструктора .
Инициализация с нулевыми значениями
Один из распространенных сценариев предполагает создание массива, заполненного нулевыми значениями. Если планируется использовать только целые числа, строго типизированный массив целых чисел по умолчанию принимает все значения равными нулю.
Для этого также можно использовать умножение.
Особенно полезно в умножении то, что можно использовать любое значение. Поэтому если планируется по умолчанию использовать значение , это будет хорошим вариантом.
Вложенные массивы
Массив внутри массива называется вложенным массивом. Я не использую их в PowerShell, но часто использовал в других языках. Использовать массив массивов рекомендуется, если данные вписываются в шаблон типа сетки.
Существует два способа создания двумерного массива.
В этих примерах очень важно использовать запятую. Ранее я приводил пример обычного массива из нескольких строк, где использование запятой не было обязательным
В случае с многомерным массивом все иначе.
Для вложенного массива нотация индексов имеет некоторые изменения. Мы получаем значение 3, используя выше.
Добавьте набор скобок для каждого уровня вложенности массива. Первый набор квадратных скобок предназначен для внешнего массива, а после этого можно работать уже из него.
Write-Output -NoEnumerate
В PowerShell часто используется перечисление массивов и их разворачивание. Это ключевой момент в использовании конвейера в PowerShell, однако бывают случаи, когда это нежелательно.
Обычно я передаю объекты в , чтобы получить дополнительные сведения о них. Когда я передаю туда массив, выполняется его разворачивание, и Get-Member видит элементы массива, а не фактический массив.
Чтобы запретить разворачивание массива, можно использовать .
Есть еще один способ, который больше напоминает взлом (а я пытаюсь избежать таких взломов). Перед передачей массива можно поставить запятую в его начале.
Возврат массива
Такое разворачивание массивов также выполняется при выводе или возврате значений из функции. Для получения массива по-прежнему можно присвоить выходные данные переменной, что обычно не вызывает проблем.
Хитрость в том, что создается новый массив. Если это проблематично, можно решить проблему с помощью или .
Работа с объектами WMI
WMI (Windows Management Interface, интерфейс управления Windows) — набор интерфейсов для управления ОС Windows с помощью специальных компонентов. Возможно управление локальным компьютером, и находящимся в сети. WMI — разновидность Web-Based Enterprise Management (WBEM) и Common Information Model (CIM), разработанная Microsoft. Входит в состав Windows Vista, Windows Server 2003, Windows XP, Windows Me и Windows 2000. Для Windows 95 и Windows 98 доступна в виде отдельно устанавливаемого компонента. Поддерживает использование скриптовых языков, таких как VBScript или Windows PowerShell для управления персональными компьютерами и серверами, работающими под управлением Microsoft Windows.
Объекты WMI являются для PowerShell вполне «родными». Достаточно выполнить команду:
чтобы увидеть большое количество классов, обеспечивающих доступ к объектам WMI в оболочке. В случае подключения к WMI на удаленном компьютере, состав классов будет зависеть от ОС и установленных на нем расширений WMI. Для получения сведений о доступных классах на удаленной машине, необходимо указать его IP-адрес или имя в качестве параметра:
Для успешного подключения на удаленном компьютере должен быть запущен интерфейс WMI, а используемая учетная запись должна входить в группу локальных администраторов.
Если не использовать специальное указание, некоторые сведения не выводятся, видимо из соображений «не захламлять экран». Для получения более детальной информации можно воспользоваться командами форматирования и отбора данных.
А вот небольшой пример опроса всех компьютеров в локальной сети с адресом 192.168.1.0 и маской подсети 255.255.255.0:
В первом элементе конвейера генерируется массив чисел от 1 до 254. На втором этапе каждое число из массива подставляется в IP-адрес, который будет пинговаться при помощи средств WMI. Результаты будут выводиться в таблицу с тремя столбцами — адрес хоста, время отклика и статус ответа. В случае ответа хоста возвращается статус с кодом «0».
Рекомендации по именованию команд
Следующие рекомендации помогут выбрать подходящую команду для командлета, чтобы обеспечить согласованность между создаваемыми вами командлетами, командлетами, предоставляемыми PowerShell, и командлетами, разработанными другими пользователями.
- Используйте одно из стандартных имен команд, предоставленных PowerShell.
- Используйте команду, чтобы описать общую область действия, и параметры для уточнения действия командлета.
- Не используйте синоним утвержденной команды. Например, всегда используйте , а не или .
- Используйте команду только в той форме, которая указана в этом разделе. Например, используйте , но не или .
- Не используйте следующие зарезервированные команды или псевдонимы. Язык PowerShell и редкие несколько командлетов используют эти команды в исключительных обстоятельствах.
- ForEach (foreach)
- Ping (pi)
- Sort (sr)
- Tee (te)
- Where (wh)
Полный список команд можно получить с помощью командлета .
Работа с фоновыми заданиями
В Windows PowerShell есть возможность запускать задачи в фоновом режиме, для того чтобы, не дожидаясь окончания работы команды (для случаев, когда задача выполняется долго), продолжать работать в текущей сессии. Для работы с фоновыми заданиями в PowerShell есть следующие командлеты:
- Start-Job – запустить фоновую задачу;
- Stop-Job – остановить фоновую задачу
- Get-Job – посмотреть список фоновых задач;
- Receive-Job – посмотреть результат выполнения фоновой задачи;
- Remove-Job – удалить фоновую задачу;
- Wait-Job – перевести фоновую задачу на передний план, для того чтобы дожидаться ее окончания.
Команды для обмена данными
PowerShell использует класс System.Management.Automation.VerbsCommunications для определения действий, которые применяются к обмену данными. В следующей таблице перечислено большинство определенных команд.
Команда (псевдоним) | Действие | Неподходящие синонимы |
---|---|---|
Connect (cc) | Создает связь между источником и назначением. Эта команда образует пару с командой . | Join, Telnet |
Disconnect (dc) | Удаляет связь между источником и назначением. Эта команда образует пару с командой . | Break, Logoff |
Read (rd) | Получает сведения из источника. Эта команда образует пару с командой . | Acquire, Prompt, Get |
Receive (rc) | Принимает сведения, отправляемые из источника. Эта команда образует пару с командой . | Read, Accept, Peek |
Send (sd) | Доставляет сведения в место назначения. Эта команда образует пару с командой . | Put, Broadcast, Mail, Fax |
Write (wr) | Добавляет сведения в целевой объект. Эта команда образует пару с командой . | Put, Print |
Операторы
Операторы в PowerShell также эффективны для массивов. Некоторые из них работают несколько иначе.
-join
Оператор является самым очевидным примером, поэтому давайте рассмотрим его первым. Мне нравится оператор , я его часто использую. Он объединяет все элементы в массиве с помощью заданного символа или строки.
В операторе мне особенно нравится то, что он обрабатывает единичные элементы.
Я использую его для ведения журнала и подробных сообщений.
-join $array
Вот еще один полезный прием, о котором мне рассказал Ли Дейли. Если нужно объединить все без использования разделителя, вместо этого:
Можно использовать с массивом в качестве параметра без префикса. Этот пример наглядно демонстрирует то, о чем я говорил.
-replace и -split
Другие операторы, такие как и , выполняются для каждого элемента в массиве. Не скажу, что я их когда-нибудь таким образом использовал, но вот пример этого.
-in
Если одно значение, которое вам нужно проверить, совпадает с одним или несколькими значениями, можно использовать оператор . Значение должно быть в левой, а массив — в правой части оператора.
Такой способ может оказаться дорогостоящим, если список достаточно велик. Я часто использую шаблон регулярного выражения, если проверяется большое количество значений.
-eq и -ne
Равенство и массивы могут оказаться достаточно сложными. Если массив располагается в левой части, выполняется сравнение всех элементов. Вместо возврата возвращается совпадающий объект.
Если используется оператор , вы получаете все значения, которые не равны имеющемуся.
При использовании в операторе возвращается значение . Если значение не возвращается, то речь о значении . Оба этих оператора оцениваются как .
Я еще вернусь к этому вопросу позднее, когда мы будем говорить о тестировании .
-match
Оператор пытается сопоставить все элементы в коллекции.
При использовании с одним значением специальная переменная заполняется сведениями о соответствии. Этого не происходит, если массив обрабатывается таким образом.
Этот же подход можно использовать в случае с .
Я подробно расскажу о переменных , и в другой публикации под названием Множество способов использования регулярных выражений (Множество способов использования регулярных выражений).
$null или empty
Проверка на наличие или пустых массивов может быть непростой задачей. Далее описаны самые распространенные проблемы, связанные с массивами.
На первый взгляд этот оператор выглядит вполне работоспособным.
Однако я только что рассказал, как проверяет каждый элемент в массиве. Таким образом, у нас может быть массив из нескольких элементов с одним значением $null и результатом вычисления будет
Именно поэтому рекомендуется размещать в левой части оператора. Благодаря этому сценарий выполняется без проблем.
Массив не равен пустому массиву. Если вы уверены, что у вас есть массив, проверьте количество объектов в нем. Если это массив , число объектов равно .
Однако есть еще одна сложность, которую нужно учитывать в этом случае. Можно использовать даже при наличии одного объекта, если только этот объект не является . Эта ошибка исправлена в PowerShell 6.1.
Это хорошая новость, однако многие люди по-прежнему используют версию 5.1, так что им стоит иметь в виду указанную ошибку.
Если вы по-прежнему используете PowerShell 5.1, можно перенести объект в массив перед проверкой количества объектов, чтобы получить точное число.
Чтобы безопасно воспроизвести этот сценарий, проверьте , а затем проверьте число объектов.
Недавно кто-то спрашивал, как проверить, соответствует ли каждое значение в массиве заданному значению.
Пользователь Reddit /u/bis предложил это разумное решение, которое проверяет наличие некорректных значений, а затем инвертирует результат.
Где найти PowerShell?
Самый простой способ найти PowerShell в Windows 10 — ввести PowerShell в строке поиска, как показано на рис. 1-1.
Обратите внимание, что на рис. 1-1 показаны четыре разных ярлыка для PowerShell
Компьютер, используемый в демонстрационных целях в этой книге, работает под управлением 64-разрядной версии Windows 10, поэтому существует 64-разрядная версия консоли PowerShell и PowerShell ISE (интегрированной среды сценариев) и 32-разрядная версия каждой из них (обозначена суффиксом (x86) на ярлыках). Если вы работаете с 32-разрядной версией Windows 10, у вас будет только два ярлыка. У этих элементов нет суффикса (x86), но они являются 32-разрядными версиями. Если у вас установлена 64-разрядная операционная система, рекомендуется запускать 64-разрядную версию PowerShell, только если вас нет особой причины для запуска 32-разрядной версии.
Сведения о запуске PowerShell в других версиях Windows см. в статье Запуск Windows PowerShell.
Как запустить PowerShell?
В производственной среде предприятия, которую я поддерживаю, я работаю с тремя разными учетными записями пользователей Active Directory. В лабораторной среде в этой книге используются зеркальные экземпляры этих учетных записей. Я вошел на компьютер с Windows 10 в качестве пользователя домена, который не является администратором домена или локальным администратором.
Я запустил консоль PowerShell, щелкнув ярлык Windows PowerShell, как показано на рис. 1-1.
Обратите внимание, что в строке заголовка консоли PowerShell указано «Windows PowerShell», как показано на рис. 1-4
Некоторые команды выполняются нормально, но PowerShell не поддерживает управление доступом пользователей (UAC). Это означает, что оболочка не может запрашивать повышение прав для задач, требующих утверждения администратором.
Выдается следующее сообщение об ошибке.
Решение этой проблемы заключается в запуске PowerShell от имени пользователя домена, который является локальным администратором.
Именно так настроена моя вторая учетная запись пользователя домена. Используя принцип минимальных привилегий, эта учетная запись не должна быть администратором домена или иметь повышенные привилегии в домене.
Закройте PowerShell. Перезапустите консоль PowerShell, только на этот раз щелкните правой кнопкой мыши ярлык Windows PowerShell и выберите пункт Запуск от имени администратора, как показано на рис. 1-5.
Если вы выполнили вход в Windows в качестве обычного пользователя, вам будет предложено ввести учетные данные. Я буду вводить учетные данные учетной записи пользователя, которая является пользователем домена и локальным администратором, как показано на рис. 1-6.
После повторного запуска PowerShell с правами администратора в строке заголовка должно быть указано «Администратор: Windows PowerShell», как показано на рис. 1-7.
Теперь, когда PowerShell работает с повышенными привилегиями локального администратора, управление доступом пользователей больше не будет проблемой в случае запуска на локальном компьютере команды, для выполнения которой обычно требуется запрос на повышение прав. Следует иметь в виду, что любая команда, выполняемая из этого экземпляра консоли PowerShell с повышенными привилегиями, также запускается с повышенными привилегиями.
Чтобы упростить поиск PowerShell и запускать оболочку от имени администратора, рекомендуется закрепить ее на панели задач и настроить автоматический запуск от имени администратора при каждом запуске.
Еще раз выполните поиск PowerShell, только на этот раз щелкните ее правой кнопкой мыши и выберите пункт «Закрепить на панели задач», как показано на рис. 1-8.
Щелкните правой кнопкой мыши ярлык PowerShell, который теперь закреплен на панели задач, и выберите пункт «Свойства», как показано на рис. 1-9.
Щелкните «Дополнительно», как показано в первой части рис. 1-10, установите флажок «Запуск от имени администратора», как показано во второй части рис. 1-10, а затем дважды нажмите кнопку OK, чтобы принять изменения и выйти из обоих диалоговых окон.
Вам больше никогда не придется беспокоиться о поиске PowerShell или о том, запущена ли оболочка от имени администратора или нет.
Запуск PowerShell с повышенными привилегиями для предотвращения проблем, связанных с управлением доступом пользователей, влияет только на команды, выполняемые на локальном компьютере. Он не влияет на команды, предназначенные для запуска на удаленных компьютерах.
Изучение объектов с помощью Get-Member
Научившись находить нужный командлет, вы, возможно, захотите узнать больше о результате его выполнения, то есть о выходных данных. Выходные данные представляют интерес по нескольким причинам, в число которых входят следующие:
- Автономность. Можно выполнить всего одну команду и отобразить результаты в каком-либо отчете. Вопрос в том, какой результат выдает команда: подходящий или требующий изменений.
- Использование в конвейере. В PowerShell распространена возможность включения нескольких команд в конвейер для получения данных, фильтрации и преобразования. Чтобы команда подходила для использования в конвейере, необходимо иметь представление о ее входных и выходных данных. Суть в том, что выходные данные команды являются входными данными другой команды.
Командлет отображает тип, свойства и методы объекта результата. Передайте выходные данные, которые требуется изучить, в командлет .
В выходных данных отображается возвращаемый тип, а затем — все свойства и методы объекта. Вот фрагмент такого результата:
Как правило, объект обычно имеет множество свойств и методов, поэтому чтобы упростить поиск нужного компонента, можно отфильтровать результаты. С помощью параметра можно указать, к примеру, отображение всех методов, как показано в приведенном ниже примере.
При получении ответа PowerShell обычно выводит лишь несколько свойств. В приведенном выше ответе отображаются , и . Чтобы изменить эти выходные данные, можно воспользоваться командлетом . позволяет указать необходимые для отображения столбцы. В командлете можно указать имя столбца, список с разделителями-запятыми или подстановочный знак . Ниже приведен пример использования командлета используется для извлечения и .
Поиск по типу
Другой способ поиска нужной команды заключается в поиске команд, работающих с одним и тем же типом. При выполнении вы получили возвращаемый тип в виде первой строки ответа, как показано ниже:
Теперь вы можете использовать этот тип и искать команды следующим образом:
Результатом выполнения приведенной выше команды является список команд, которые работают исключительно с типом :
Как видите, зная тип команды, можно значительно сузить область поиска интересующих команд.
Что такое PowerShell и чем он хорош
Пользователи UNIX и Linux, а с какого-то момента и macOS привыкли к тому, что под рукой всегда есть Bash — немного старомодное, но универсальное и мощное средство, при помощи которого всего парой строк можно творить удивительные вещи. Прописываешь новый скрипт в cron — и готово, он уже крутится на твоем компьютере или на сервере и незаметно делает что-нибудь полезное.
Возвращаясь в Windows (а без этого иногда никак), понимаешь, что скрипты .bat хоть и хороши, но спасают не всегда: очень уж ограниченны их возможности. И если ты до сих пор считал, что PowerShell — это неведомая штуковина, ради которой нужно что-то там поднимать и настраивать, то не спеши с выводами — он, если разобраться, совсем неплох.
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. Это позволяет без подключения к оснастке сервера обращаться к ним через консоль и отдавать команды.
Если раньше ты не интересовался PowerShell, то, скорее всего, у тебя стоит вторая версия. Я рекомендую обновиться как минимум до третьей — она содержит куда больше возможностей и полезных фишек. Если не вдаваться в подробности, то в PowerShell 2.0 входит около десятка модулей и примерно 350 команд, а в PowerShell 3.0 уже около 2300 командлетов из более чем 70 модулей. «Хакер» также писал о том, чем отличается самый новый PowerShell пятой версии из Windows 10.
Шаг 7: анализ полезных команд PowerShell
К настоящему времени вы уже знаете достаточно много, чтобы суметь нанести урон компьютеру, так что будьте осторожны. Посмотрим, например, часто запрашиваемые команды PowerShell.
Эти команды работают только в Windows 10 и только при запуске PowerShell от лица администратора. Они предназначены для переустановки предустановленных приложений Windows 10 и могут пригодиться тем, кто сначала удалил эти программы, а затем решил вернуть их. Команды выглядит следующим образом:
Get-AppXPackage | Foreach {Add-AppxPackage -DisableDevelopmentMode -Register “$($_.InstallLocation)\AppXManifest.xml”}
Если запустить эту команду, игнорируйте обозначенные красным цветом предупреждения, и когда команда выполнена, перезагрузите компьютер; все предустановленные программы в Windows 10 появятся на своих местах.
Вот как работает данная команда. Get-AppXPackage проверяет все пакеты приложений в профиле пользователя. Даже если вы удалили приложение, оно остается в списке профиля пользователя.
Командлета Get-AppXPackage возвращает объект TypeName Microsoft.Windows.Appx.PackageManager.Commands.AppxPackage, который включает в себя полное имя пакета приложения и местонахождения соответствующего файла манифеста XML. Если запустить командлету get-appxpackage, вы увидите длинный список пакетов приложений. Скриншот показывает описание приложения Xbox.
Командлета Foreach посредством цикла проходит через каждый объект в AppXPackage, отправляя их командлету Add-AppxPackage. Согласно get-help для Add-AppxPackage, тут есть два ключевых переключателя:
- Переключатель -Register используется для регистрации существующих установок пакетов приложений, можно задать параметры DisableDevelopmentMode и Register
- Переключатель -DisableDevelopmentMode говорит Windows заново зарегистрировать существующий пакет приложения, который был отключён, не зарегистрирован или повреждён.
Строка «$($_.InstallLocation)\AppXManifest.xml» описывает, где расположен файл manifest.xml. Если посмотреть на файлы AppXManifest.xml, вы увидите сложный список идентификаторов приложений, исполняемых файлов и большое количество визуальных элементов, связанных с приложением.
После перезагрузки все добавленные пакеты приложений скачиваются и устанавливаются из магазина Windows Store.
- 5
- 4
- 3
- 2
- 1
(4 голоса, в среднем: 3 из 5)