Глава 1. Начало работы с PowerShell

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

Что такое PowerShell?

Windows PowerShell — это простая оболочка командной строки и среда сценариев для автоматизации административных задач систем под управлением Windows. Windows PowerShell предварительно установлен во всех современных версиях операционной системы Windows.

Где найти PowerShell

Самый простой способ найти PowerShell в Windows 11 — ввести PowerShell в строку поиска, как показано на рис. 1-1. Обратите внимание, что для Windows PowerShell существует четыре разных сочетания клавиш.

Рис. 1-1. Поиск powerShell.

Сочетания клавиш Windows PowerShell в 64-разрядной версии Windows:

  • Windows PowerShell
  • Windows PowerShell ISE
  • Windows PowerShell (x86)
  • Среда сценариев Windows PowerShell (x86)

В 64-разрядной версии Windows у вас есть 64-разрядная версия консоли Windows PowerShell и интегрированной среды сценариев Windows PowerShell (ISE) и 32-разрядная версия каждого из них, как указано суффиксом (x86) в сочетаниях клавиш.

Примечание.

Windows 11 поставляется только в виде 64-разрядной операционной системы. 32-разрядная версия Windows 11 отсутствует. Однако Windows 11 включает 32-разрядные версии Windows PowerShell и среды сценариев Windows PowerShell.

У вас есть только два сочетания клавиш, если вы используете старую 32-разрядную версию Windows. Эти сочетания клавиш не имеют суффикса (x86), но имеют 32-разрядные версии.

Я рекомендую использовать 64-разрядную версию Windows PowerShell, если вы используете 64-разрядную операционную систему, если у вас нет определенной причины использования 32-разрядной версии.

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

Корпорация Майкрософт больше не обновляет isE PowerShell. IsE работает только с Windows PowerShell 5.1. Visual Studio Code (VS Code) с расширением PowerShell работает с обеими версиями PowerShell. VS Code и расширение PowerShell не поставляются в Windows. Установите VS Code и расширение на компьютере, на котором создаются скрипты PowerShell. Их не нужно устанавливать на всех компьютерах, на которых выполняется PowerShell.

Запуск PowerShell

Я использую три разных учетных записей пользователей Active Directory в рабочих средах, которые я поддерживаю. Я зеркально отражал эти учетные записи в лабораторной среде, используемой в этой книге. Войдите на компьютер Windows 11 в качестве пользователя домена без прав локального администратора или домена.

Запустите консоль PowerShell, щелкнув ярлык Windows PowerShell , как показано на рис. 1-1. Обратите внимание, что заголовок консоли означает Windows PowerShell, как показано на рис. 1-2.

Рис. 1-2. Заголовок окна PowerShell.

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

Примечание.

UAC — это функция безопасности Windows, которая помогает предотвратить запуск вредоносного кода с повышенными привилегиями.

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

Stop-Service -Name W32Time
Stop-Service : Service 'Windows Time (W32Time)' cannot be stopped due to
the following error: Cannot open W32Time service on computer '.'.
At line:1 char:1
+ Stop-Service -Name W32Time
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : CloseError: (System.ServiceProcess.ServiceCon
   troller:ServiceController) [Stop-Service], ServiceCommandException
    + FullyQualifiedErrorId : CouldNotStopService,Microsoft.PowerShell.Comm
   ands.StopServiceCommand

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

Чтобы запустить PowerShell с повышенными правами, щелкните правой кнопкой мыши ярлык Windows PowerShell и выберите команду "Запуск от имени администратора", как показано на рисунке 1-3.

Рис. 1-3. Контекстное меню — запуск от имени администратора.

Windows запрашивает учетные данные, так как вы вошли в Windows как обычный пользователь. Введите учетные данные пользователя домена, который является локальным администратором, как показано на рис. 1-4.

Рис. 1-4. Контроль учетных записей пользователей — ввод учетных данных.

Обратите внимание, что заголовок окна консоли с повышенными привилегиями говорит администратор: Windows PowerShell, как показано на рис. 1-5.

Рис. 1-5. Заголовок окна PowerShell с повышенными привилегиями.

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

Внимание

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

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

Вы можете упростить поиск и запуск PowerShell. Закрепление ярлыка PowerShell или Терминал Windows на панели задач. Найдите PowerShell еще раз, за исключением того, что на этот раз щелкните его правой кнопкой мыши и выберите закрепить на панели задач, как показано на рис. 1-6.

Рис. 1-6. Контекстное меню — закрепление на панели задач.

Внимание

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

Если вам нужно запустить PowerShell с повышенными разрешениями, щелкните правой кнопкой мыши ярлык PowerShell, закрепленный на панели задач при нажатии клавиши SHIFT. Выберите "Запуск от имени администратора", как показано на рис. 1-7.

Рис. 1-7. Контекстное меню — запуск от имени администратора.

Определение версии PowerShell

В PowerShell есть автоматические переменные, которые хранят сведения о состоянии. Одна из этих переменных — это $PSVersionTableсведения о версии сеанса PowerShell.

$PSVersionTable
Name                           Value
----                           -----
PSVersion                      5.1.22621.2428
PSEdition                      Desktop
PSCompatibleVersions           {1.0, 2.0, 3.0, 4.0...}
BuildVersion                   10.0.22621.2428
CLRVersion                     4.0.30319.42000
WSManStackVersion              3.0
PSRemotingProtocolVersion      2.3
SerializationVersion           1.1.0.1

Если вы используете версию Windows PowerShell старше 5.1, следует обновить версию Windows. Windows PowerShell 5.1 предварительно установлен в текущих поддерживаемых версиях Windows.

PowerShell версии 7 не является заменой для Windows PowerShell 5.1; он устанавливает параллельно с Windows PowerShell. Windows PowerShell версии 5.1 и PowerShell версии 7 являются двумя различными продуктами. Дополнительные сведения о различиях между Windows PowerShell версии 5.1 и PowerShell версии 7 см. в статье "Миграция с Windows PowerShell 5.1 на PowerShell 7".

Совет

PowerShell версии 6, ранее известной как PowerShell Core, больше не поддерживается.

Политика выполнения

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

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

В следующей таблице показана политика выполнения по умолчанию для текущих операционных систем Windows.

Версия операционной системы Windows Политика выполнения по умолчанию
Windows Server 2022 Удаленно подписанная
Windows Server 2019 Удаленно подписанная
Windows Server 2016 Удаленно подписанная
Windows 11 С ограниченным доступом
Windows 10 С ограниченным доступом

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

Проверьте параметр политики выполнения на компьютере.

Get-ExecutionPolicy
Restricted

Список параметров политики выполнения для всех областей.

Get-ExecutionPolicy -List
        Scope ExecutionPolicy
        ----- ---------------
MachinePolicy       Undefined
   UserPolicy       Undefined
      Process       Undefined
  CurrentUser       Undefined
 LocalMachine       Undefined

Все клиентские операционные системы Windows имеют параметр Restrictedполитики выполнения по умолчанию. Скрипты PowerShell нельзя запускать с помощью Restricted параметра политики выполнения. Чтобы проверить политику выполнения, сохраните следующий код в виде .ps1 файла с именем Get-TimeService.ps1.

Совет

Скрипт PowerShell — это файл с открытым текстом, содержащий команды, которые требуется выполнить. Файлы скриптов PowerShell используют .ps1 расширение файла. Чтобы создать скрипт PowerShell, используйте редактор кода, например Visual Studio Code (VS Code) или любой текстовый редактор, например Блокнот.

При интерактивном выполнении следующей команды он завершается без ошибок.

Get-Service -Name W32Time

Однако PowerShell возвращает ошибку при выполнении той же команды из скрипта.

.\Get-TimeService.ps1
.\Get-TimeService.ps1 : File C:\tmp\Get-TimeService.ps1 cannot be loaded
because running scripts is disabled on this system. For more information,
see about_Execution_Policies at
https:/go.microsoft.com/fwlink/?LinkID=135170.
At line:1 char:1
+ .\Get-TimeService.ps1
+ ~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : SecurityError: (:) [], PSSecurityException
    + FullyQualifiedErrorId : UnauthorizedAccess

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

... Запущенные скрипты отключены в этой системе.

Чтобы включить выполнение скриптов, измените политику выполнения с помощью командлета Set-ExecutionPolicy . LocalMachine— это область по умолчанию, если параметр Scope не указан. Чтобы изменить политику выполнения локального компьютера, необходимо запустить PowerShell с повышенными привилегиями. Если вы не подписываете скрипты, рекомендуется использовать RemoteSigned политику выполнения. RemoteSigned Запрещает запуск скачанных скриптов, которые не подписаны доверенным издателем.

Перед изменением политики выполнения ознакомьтесь с about_Execution_Policies статьей, чтобы понять последствия безопасности.

Измените параметр политики выполнения на компьютере RemoteSigned.

Set-ExecutionPolicy -ExecutionPolicy RemoteSigned

Если политика выполнения была успешно изменена, PowerShell отобразит следующее предупреждение:

Execution Policy Change
The execution policy helps protect you from scripts that you do not trust.
Changing the execution policy might expose you to the security risks
described in the about_Execution_Policies help topic at
https:/go.microsoft.com/fwlink/?LinkID=135170. Do you want to change the
execution policy?
[Y] Yes  [A] Yes to All  [N] No  [L] No to All  [S] Suspend  [?] Help
(default is "N"):y

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

Set-ExecutionPolicy : Access to the registry key 'HKEY_LOCAL_MACHINE\SOFTWAR
E\Microsoft\PowerShell\1\ShellIds\Microsoft.PowerShell' is denied. To
change the execution policy for the default (LocalMachine) scope, start
Windows PowerShell with the "Run as administrator" option. To change the
execution policy for the current user, run "Set-ExecutionPolicy -Scope
CurrentUser".
At line:1 char:1
+ Set-ExecutionPolicy -ExecutionPolicy RemoteSigned
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : PermissionDenied: (:) [Set-ExecutionPolicy],
   UnauthorizedAccessException
    + FullyQualifiedErrorId : System.UnauthorizedAccessException,Microsoft.
   PowerShell.Commands.SetExecutionPolicyCommand

Кроме того, можно изменить политику выполнения для текущего пользователя, не требуя запуска PowerShell с повышенными привилегиями от имени администратора. Этот шаг не требуется, если политика выполнения для локального компьютера RemoteSignedуспешно задана.

Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope CurrentUser

Если задано RemoteSignedзначение политики выполнения, Get-TimeService.ps1 скрипт успешно выполняется.

.\Get-TimeService.ps1
Status   Name               DisplayName
------   ----               -----------
Running  W32Time            Windows Time

Итоги

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

Отзыв

  1. Как определить версию PowerShell, установленную на компьютере?
  2. Когда необходимо запустить PowerShell с повышенными привилегиями от имени администратора?
  3. Что такое политика выполнения по умолчанию на клиентских компьютерах Windows и что не позволяет делать?
  4. Как определить текущий параметр политики выполнения PowerShell?
  5. Как изменить политику выполнения PowerShell?

Ссылки

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

Следующие шаги

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