Основы 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 |
РЕКЛАМА от Яндекса. Может быть недоступна в вашем регионе
Конец рекламы. Если там пусто считайте это рекламой моей телеги