20 сентября 2021 г.
4695

Команды PowerShell

Особенности

Включение выполнения скриптов в системе

Если при запуске скрипта PowerShell появляется ошибка Выполнение сценариев отключено в этой системе нужно разрешить выполнение сценариев командой PowerShell для текущего пользователя
Set-ExecutionPolicy Unrestricted -Scope CurrentUser
Или для всех пользователей компьютера
Set-ExecutionPolicy Unrestricted -Scope LocalMachine
Обратно отключить выполнение сценариев
Set-ExecutionPolicyRestricted -Scope CurrentUser

Не печатаются заглавные буквы в консоли PowerShell

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

Для этого сначала нужно удалить модуль
Remove-Module PSReadLine
удалить папку
C:\Program Files\WindowsPowerShell\Modules\PSReadLine
затем установить модуль командой
Install-Module PSReadLine

Запуск скрипта через планировщик задач

Скрипт PowerShell не запускается напрямую из планировщика задач, если указать напрямую путь к скрипту, он откроется в блокноте. Для того, чтобы он запустился из планировщика в строке Программа или сценарий нужно указать powershell.exe, а в строке Добавить аргументы указать путь к скрипту следующим образом -File "C:\script.ps1".

Запуск скрипта по двойному нажатию ЛКМ

По умолчанию при двойном нажатии ЛКМ по файлу скрипта, он открывается для изменения в блокноте, а не запускается.
Для того, чтобы скрипт запускался по двойному нажатию ЛКМ нужно открыть контекстное меню файла с расширением ps1 нажатием ПКМ, нажать на строку Открыть с помощьюВыбрать другое приложение, поставить галочку Всегда использовать это приложение для открытия .ps1 файлов, затем нажать Еще приложенияНайти другое приложение на этом компьютере и выбрать exe файл запускающий PowerShell по пути
C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe
после этого все файлы с расширением .ps1 будут запускаться по двойному нажатию ЛКМ.
Или же можно создать bat файл и в нем прописать
PowerShell.exe -executionpolicy bypass -file 'c:\example.ps1'
тогда скрипт PowerShell запуститься по двойному нажатию ЛКМ на этом bat файле.

Запуск PowerShell через адресную строку проводника

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

Сеть

  • Test-NetConnection -ComputerName HOSTNAME -Port NUMPORT проверка состояния порта (Win8.1 и выше, PS4.0)
    • Test-NetConnection -ComputerName HOSTNAME -Port 25 проверка порта по номеру
    • Test-NetConnection -ComputerName HOSTNAME -CommonTCPPort RDP проверка порта по названию использующей порт службы
  • Изменить профиль сети с Public на Private
    • Get-NetConnectionProfile вывести список сетевых интерфейсов и применённые к ним профили сети
    • Set-NetConnectionProfile -InterfaceIndex 10 -NetworkCategory Private изменение профиля для 10 сетевого подключения, индекс которого отображается в выводе предыдущей команды

Разное

  • start <программа или скрипт> запуск программы или скрипта
  • start <example.bat> -Wait запуск скрипта и ожидание пока он выполниться
  • sleep 5 ожидание 5 секунд
  • get-service вывод списка служб
  • findstr аналог grep из linux, например get-service | findstr /i "xbox" выведет список служб которые в названии содержат xbox
  • Set-Alias -Name kubectl -Value C:\Kubectl\kubectl создание алиаса
  • cat (Get-PSReadlineOption).HistorySavePath вывод истории команд в консоль
  • notepad (Get-PSReadlineOption).HistorySavePath открытие истории команд в блокноте
  • Get-ScheduledTask получение списка задач
  • Start-ScheduledTask <task-path>\<task-name> запуск задачи
  • Stop-ScheduledTask <task-path>\<task-name> остановка запущенной задачи
  • Disable-ScheduledTask -TaskName <task-path>\<task-name> отключение задачи
  • Enable-ScheduledTask -TaskName <task-path>\<task-name> включение задачи

Скрипты

Нажатие клавиши
$key = New-Object -ComObject WScript.Shell 
$key.SendKeys("{F11}")
В данном случае осуществляется нажатие на клавишу F11, коды клавиш можно посмотреть по ссылке.
Удаление папок и файлов старше указанного количества дней
$path="C:\dir"
$dateDel = (Get-Date).AddDays(-14)
Get-ChildItem -Recurse -Path $path | Where-Object -Property CreationTime -lt $dateDel | Remove-Item -Recurse
в данном случае удаляются файлы и папки старше 14 дней.