Начало работы с PowerShell

PowerShell — это командная оболочка + среда для написания сценариев, созданная Microsoft для систем Windows и в первую очередь используемая для задач системного администрирования и автоматизации.

ВWindows 11Там просто выполните поиск прямо в меню «Пуск»PowerShellи всё.

Распространённые ярлыки включают (для 64-битных систем):

Имя ярлыка Описание
Windows PowerShell 64-битная версия командной строки
Windows PowerShell ISE 64-битный графический редактор сценариев
Windows PowerShell (x86) 32-битная версия командной строки
Windows PowerShell ISE (x86) 32-битный графический редактор сценариев

⚠️ Примечание: сама Windows 11 не поддерживает 32-битные системы, но всё ещё включает x86-версию PowerShell для совместимости с устаревшими программами.


Способы запуска PowerShell

Обычный способ запуска

Щёлкните ярлык Windows PowerShell, чтобы запустить консоль PowerShell.

В строке заголовка консоли PowerShell будет отображаться "Windows PowerShell".

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

Пояснение по контролю учётных записей пользователей (UAC)

Что делает UAC:Функция безопасности Windows, которая предотвращает запуск вредоносного кода с повышенными привилегиями.

Ограничения прав обычного пользователя: при запуске от имени обычного пользователя попытка выполнения команд, требующих прав администратора, приведёт к ошибке.

Например, остановка службы 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 от имени пользователя с правами локального администратора.

Настроена вторая учётная запись пользователя домена, в соответствии с принципом наименьших привилегий; она не является администратором домена и не имеет повышенных привилегий в домене.

Шаги:

  • Щёлкните правой кнопкой мыши ярлык Windows PowerShell
  • Выберите "Запуск от имени администратора"

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

Подтверждение повышения прав:В заголовке окна PowerShell с повышенными правами отображается "Администратор: Windows PowerShell".

Результат:Выполнение команд, требующих прав администратора, в PowerShell с повышенными правами больше не будет вызывать ошибок UAC.

Принцип повышения прав: Повышайте права PowerShell до администратора только при крайней необходимости.

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

Закрепление ярлыков:Вы можете закрепить ярлык PowerShell или Windows Terminal на панели задач для быстрого запуска:

Безопасный запуск PowerShell с повышенными правами:Если вам нужно запустить PowerShell с повышенными правами, удерживайте клавишу Shift, щелкая правой кнопкой мыши по закрепленному значку PowerShell на панели задач, и выберите "Запуск от имени администратора"


Руководство по определению версии PowerShell и политики выполнения

1. Проверка версии 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 и является рекомендуемой версией для использования.
  • PowerShell 7 (кроссплатформенная версия) не является заменой Windows PowerShell 5.1, а представляет собой отдельный продукт, устанавливаемый параллельно с ним.
  • PowerShell 6 (также известный как PowerShell Core) больше не поддерживается.

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

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

Примечание. Политика выполнения не является границей безопасности; опытные пользователи могут её обойти.

Область действия политики выполнения

  • Её можно задать для локального компьютера (LocalMachine), текущего пользователя (CurrentUser) или текущего сеанса (Process).
  • Ею также можно управлять для пользователей и компьютеров через групповую политику.

Стандартные политики выполнения по умолчанию в Windows

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

RestrictedУказывает, что по умолчанию выполнение сценариев запрещено.

3. Запрос текущей политики выполнения

Запросите текущую политику:

Get-ExecutionPolicy

Вывод будет выглядеть примерно так:

Restricted 

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

Get-ExecutionPolicy -List

Вывод будет выглядеть примерно так:

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

4. Примеры того, как политика выполнения влияет на выполнение сценариев

Предположим, есть файл сценарияGet-TimeService.ps1; запуск команды непосредственно в интерактивной командной строке работает нормально:

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

5. Изменение политики выполнения

1. Установите RemoteSigned (рекомендуется)

Позволяет запускать локальные скрипты и удалённые скрипты, подписанные доверенными издателями.

Set-ExecutionPolicy -ExecutionPolicy RemoteSigned
  • Чтобы изменить политику выполнения для локального компьютера (LocalMachine), необходимо запустить PowerShell от имени администратора.
  • При изменении появится запрос на подтверждение:
Do you want to change the execution policy? [Y] Yes  [A] Yes to All  ...

2. Изменить политику выполнения только для текущего пользователя (права администратора не требуются)

Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope CurrentUser

6. Распространённые сообщения об ошибках и решения

Ошибка при изменении политики LocalMachine без повышенных прав администратора:

Access to the registry key 'HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\PowerShell\1\ShellIds\Microsoft.PowerShell' is denied.

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

7. Проверка после изменения

После изменения политики выполнения наRemoteSigned, запустите скрипт:

.\Get-TimeService.ps1

Вывод:

Status   Name    DisplayName
------   ----    -----------
Running  W32Time Windows Time

8. Примечания
  • Скрипты — это обычные текстовые файлы с расширением.ps1。
  • Для написания скриптов рекомендуется использоватьVisual Studio Codeили текстовый редактор.
  • Перед изменением политики выполнения обязательно ознакомьтесь с официальной документациейabout_Execution_Policiesчтобы понять связанные риски безопасности.
Другие расширения