Глава 1. Начало работы с PowerShell
В этой главе основное внимание уделяется поиску и запуску PowerShell и решению начальных точек боли, которые новые пользователи испытывают с Помощью PowerShell. Следуйте инструкциям и ознакомьтесь с примерами в этой главе на компьютере среды лаборатории.
Что такое PowerShell?
Windows PowerShell — это простая оболочка командной строки и среда сценариев для автоматизации административных задач систем под управлением Windows. Windows PowerShell предварительно установлен во всех современных версиях операционной системы Windows.
Где найти PowerShell
Самый простой способ найти PowerShell в Windows 11 — ввести PowerShell
в строку поиска, как показано на рис. 1-1. Обратите внимание, что для Windows 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.
Некоторые команды выполняются нормально при запуске 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.
Windows запрашивает учетные данные, так как вы вошли в Windows как обычный пользователь. Введите учетные данные пользователя домена, который является локальным администратором, как показано на рис. 1-4.
Обратите внимание, что заголовок окна консоли с повышенными привилегиями говорит администратор: Windows PowerShell, как показано на рис. 1-5.
Теперь, когда вы используете PowerShell с повышенными привилегиями от имени администратора, UAC больше не является проблемой при выполнении команды, требующей повышения прав.
Внимание
Вы должны запускать PowerShell только с повышенными привилегиями от имени администратора, если это необходимо.
При выборе удаленных компьютеров не требуется запускать PowerShell с повышенными привилегиями. Выполнение PowerShell с повышенными привилегиями влияет только на команды, выполняемые на локальном компьютере.
Вы можете упростить поиск и запуск PowerShell. Закрепление ярлыка PowerShell или Терминал Windows на панели задач. Найдите PowerShell еще раз, за исключением того, что на этот раз щелкните его правой кнопкой мыши и выберите закрепить на панели задач, как показано на рис. 1-6.
Внимание
Исходная версия этой книги, опубликованная в 2017 году, рекомендуется закрепить ярлык на панели задач для автоматического запуска экземпляра с повышенными привилегиями при каждом запуске PowerShell. Однако из-за потенциальных проблем безопасности я больше не рекомендую его. Все приложения, запускаемые из экземпляра PowerShell с повышенными привилегиями, также обходят UAC и выполняются с повышенными привилегиями. Например, при запуске веб-браузера с повышенными привилегиями экземпляра PowerShell любой веб-сайт, который вы посещаете, содержащий вредоносный код, также запускается с повышенными привилегиями.
Если вам нужно запустить PowerShell с повышенными разрешениями, щелкните правой кнопкой мыши ярлык PowerShell, закрепленный на панели задач при нажатии клавиши SHIFT. Выберите "Запуск от имени администратора", как показано на рис. 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 и назначение политик выполнения.
Отзыв
- Как определить версию PowerShell, установленную на компьютере?
- Когда необходимо запустить PowerShell с повышенными привилегиями от имени администратора?
- Что такое политика выполнения по умолчанию на клиентских компьютерах Windows и что не позволяет делать?
- Как определить текущий параметр политики выполнения PowerShell?
- Как изменить политику выполнения PowerShell?
Ссылки
Дополнительные сведения о концепциях, описанных в этой главе, см. в следующих статьях справки PowerShell.
Следующие шаги
В следующей главе вы узнаете о возможности обнаружения команд в PowerShell. Вы также узнаете, как скачать файлы справки PowerShell, чтобы просмотреть справку в сеансе PowerShell.
PowerShell