Основы PowerShell

Содержание
Set-ExecutionPolicy Unrestricted -Force
Из консоли запустить как администратор
Проверка версии
Поиск по истории команд
Сохранить вывод в файл
Похожие статьи

Set-ExecutionPolicy Unrestricted -Force

Подробнее про политики выполнения скриптов в PowerShell вы можете прочитать здесь

Рассмотрим конкретный пример:

Вы пробуете выполнить ваш скрипт

./your_script.ps1

И получаете

.\your_script.ps1 : File C:\Users\Andrei\your_script.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 + .\your_script.ps1 + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + CategoryInfo : SecurityError: (:) [], PSSecurityException + FullyQualifiedErrorId : UnauthorizedAccess

Нужно зайти в PowerShell в режиме администратора и выполнить

Set-ExecutionPolicy Unrestricted -Force

И выполните ещё раз

./your_script.ps1

Если Вы не можете запустить PowerShell в режиме администратора. Например, если Вы пользуетесь терминалом в Visual Studio Code

Выполните

Set-ExecutionPolicy -Scope CurrentUser Unrestricted -Force

Переключить PowerShell в режим Администратора прямо из обычной консоли PowerShell можно командой

start-process powershell -verb runas

Проверка версии

$PSVersionTable

Name Value ---- ----- PSVersion 5.1.19041.2364 PSEdition Desktop PSCompatibleVersions {1.0, 2.0, 3.0, 4.0...} BuildVersion 10.0.19041.2364 CLRVersion 4.0.30319.42000 WSManStackVersion 3.0 PSRemotingProtocolVersion 2.3 SerializationVersion 1.1.0.1

Установка PowerShell

Может пригодиться для обновления до более свежей версии.

С помощью winget. Сперва рекомендуется проверить доступные версии

winget search Microsoft.PowerShell

The `msstore` source requires that you view the following agreements before using. Terms of Transaction: https://aka.ms/microsoft-store-terms-of-transaction The source requires the current machine's 2-letter geographic region to be sent to the backend service to function properly (ex. "US"). Do you agree to all the source agreements terms? [Y] Yes [N] No: Y Name Id Version Source ------------------------------------------------------- PowerShell Microsoft.PowerShell 7.3.3.0 winget PowerShell Microsoft.PowerShell.Preview 7.4.1.0 winget

Непосредственно установка

winget install --id Microsoft.Powershell --source winget

Found PowerShell [Microsoft.PowerShell] Version 7.3.3.0 This application is licensed to you by its owner. Microsoft is not responsible for, nor does it grant any licenses to, third-party packages. Downloading https://github.com/PowerShell/PowerShell/releases/download/v7.3.3/PowerShell-7.3.3-win-x64.msi ██████████████████████████████ 101 MB / 101 MB Successfully verified installer hash Starting package install... Successfully installed

PowerShell 7 установится не на замену обычному Windows PowerShell, а как дополнительный софт.

Чтобы зайти в него нужно ввести в поиск PowerShell 7

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

$PSVersionTable

Name Value ---- ----- PSVersion 7.3.3 PSEdition Core GitCommitId 7.3.3 OS Microsoft Windows 10.0.19045 Platform Win32NT PSCompatibleVersions {1.0, 2.0, 3.0, 4.0…} PSRemotingProtocolVersion 2.3 SerializationVersion 1.1.0.1 WSManStackVersion 3.0

Узнать имя компьютера

$env:computername

DESKTOP-OP12345

Перезагрузить компьютер

Допустим, что имя компьютера, который вы хотите перезагрузить DESKTOP-OP12345

Restart-Computer -ComputerName DESKTOP-OP12345

Поиск по истории команд

Найти нужную команду в истории можно с помощью Select-String .

Например, мне нужно найти команду подключения к моему хостингу Beget по SSH

Select-String 'beget' (Get-PSReadlineOption).HistorySavePath

AppData\Roaming\Microsoft\Windows\PowerShell\PSReadLine\ConsoleHost_history.txt:2764:ssh user@user.beget.tech AppData\Roaming\Microsoft\Windows\PowerShell\PSReadLine\ConsoleHost_history.txt:3164:Select-String 'beget' (Get-PSReadlineOption).HistorySavePath

Get-WinUserLanguageList

Get-WinUserLanguageList: Cannot marshal 'parameter #2': Invalid managed/unmanaged type combination.

Import-Module -Name International -UseWindowsPowerShell -Verbose

Get-WinUserLanguageList

LanguageTag : en-US Autonym : English (United States) EnglishName : English LocalizedName : English (United States) ScriptName : Latin InputMethodTips : {0409:00000409} Spellchecking : True Handwriting : False LanguageTag : ru Autonym : русский EnglishName : Russian LocalizedName : Russian ScriptName : Cyrillic InputMethodTips : {0419:00000419} Spellchecking : True Handwriting : False

$LanguageList = Get-WinUserLanguageList $LanguageList.Add("qaa-latn") Set-WinUserLanguageList $LanguageList -Force

Удалить вручную из Language (Win + I) либо

$LanguageList = Get-WinUserLanguageList $Language = $LanguageList | where LanguageTag -eq "qaa-Latn" $LanguageList.Remove($Language) Set-WinUserLanguageList $LanguageList -Force

Сохранить вывод в файл

Пример сохранения вывода команды dir в файл dir.txt

dir | Out-File -FilePath "dir.txt"

Чтобы перенаправить и стандартный вывод и ошибки нужно добавить *>&1

Get-Process *>&1 | Out-File "C:\path\to\output.txt"

Если при этом нужно сохранить вывод на экран следует использовать команду tee или Tee-Object. Это аналог команды tee в Unix и Linux

Get-Process | Tee-Object -FilePath "C:\path\to\output.txt"

Get-Process *>&1 | tee -FilePath "get_process.txt"

Если вы уже запустили запись в файл с помощью Out-File а не с Tee-Object и только потом поняли, что нужно мониторить выдачу в реальном времени - можно применить к файлу команду Get-Content -Wait -Tail

Переименовать хост

Rename-Computer -NewName "NewHostName" -Force -Restart

PowerShell 2

В PowerShell 2 нет команды Rename-Computer, поэтому нужно использовать Get-WmiObject и Rename.

$computer = Get-WmiObject Win32_ComputerSystem $computer.Rename("A01") # Restart in 2 seconds shutdown.exe /r /t 2

pwd

$pwd возвращает объект PathInfo. Если из него нужно достать строку с путём, то нужно обратиться к атрибуту Path.

PowerShell способен на лету доставать атрибут Path там где нужно, но для надёжности есть смысл обращаться к нему явно.

# pwd_demo.ps1 $a = $pwd $a.GetType() Write-Host $a -ForegroundColor Green $b = $pwd.Path $b.GetType() Write-Host $b -ForegroundColor Magenta

.\pwd_demo.ps1

IsPublic IsSerial Name BaseType -------- -------- ---- -------- True False PathInfo System.Object C:\AutoTest True True String System.Object C:\AutoTest

Предотвратить автозакрытие

Чтобы консоль не закрывалась после выполнения скрипта можно добавить в конец что-то вроде

Read-Host "Press Enter to exit"

Это бывает нужно, например, для изучения вывода скрипта в случае ошибок.

Автор статьи: Андрей Олегович

Похожие статьи
Windows
PowerShell
Alias
Запросы к REST API
Пользователи
Сеть
Установка
Файлы
Функции
Циклы
ExecutionPolicy
if
GetType()
param
Write-Host

РЕКЛАМА от Яндекса. Может быть недоступна в вашем регионе

Конец рекламы. Если там пусто считайте это рекламой моей телеги

Поиск по сайту

Подпишитесь на Telegram канал @aofeed чтобы следить за выходом новых статей и обновлением старых

Перейти на канал

@aofeed

Задать вопрос в Телеграм-группе

@aofeedchat

Контакты и сотрудничество:
Рекомендую наш хостинг beget.ru
Пишите на info@urn.su если Вы:
1. Хотите написать статью для нашего сайта или перевести статью на свой родной язык.
2. Хотите разместить на сайте рекламу, подходящую по тематике.
3. Реклама на моём сайте имеет максимальный уровень цензуры. Если Вы увидели рекламный блок недопустимый для просмотра детьми школьного возраста, вызывающий шок или вводящий в заблуждение - пожалуйста свяжитесь с нами по электронной почте
4. Нашли на сайте ошибку, неточности, баг и т.д. ... .......
5. Статьи можно расшарить в соцсетях, нажав на иконку сети: