Документация
https://docs.microsoft.com/ru-ru/powershell/?view=powershell-7.1
Примеры скриптов для системного администрирования
https://docs.microsoft.com/ru-ru/powershell/scripting/samples/sample-scripts-for-administration?view=powershell-7.1
Статьи:
https://habr.com/ru/post/242445/
Запуск сценария PowerShell
./Script.ps1
Если сценарий не запускается из файла и система ругается: Scrip.ps1 cannot be loaded because running scripts is disabled on this system. For more information, see about_Execution_Policies at http://go.microsoft.com/fwlink/?LinkID=135170, то следует проверить политику выполенения: Get-ExecutionPolicy
Изменим политику выполнения скриптов PowerShell(PS)
Set-ExecutionPolicy -ExecutionPolicy RemoteSigned
Кодировка
Кодировка сценариев - UTF-8-BOM. Без BOM текстовый вывод сценария будет идти в виде кракозябров.
Комментарии в PS
#-однострочный
<#многострочный
комментарий #>
Справочная информация
Запускаем PS с правами администратора и выполняем команду: Get-Help
Get-Help Get-Process - справка по командлету Get-Process
Get-Help Get-Process -Examples - справка по командлету Get-Process с примерами
Пример команды
Get-Process -Name w* -выдаст перечень всех процессов на ПК, начинающихся с w
Алиасы для командлетов
Они есть, к примеру можно вместо Get-Help вводить более короткое man
Некоторый перечень алиасов можно посмотреть здесь https://ru.wikipedia.org/wiki/PowerShell
Get-Alias - получить алиасы для командлета
Удаленное подключение
(Get-PSSessionConfiguration -Name Microsoft.PowerShell).Permission - посмотреть пользователей, которым разрешено удаленное подключение, если пользователь не входит в указанные группы, то подключиться удаленно к другому ПК он не сможет.
NT AUTHORITY\ИНТЕРАКТИВНЫЕ AccessAllowed, BUILTIN\Администраторы AccessAllowed, BUILTIN\Пользователи удаленного управления AccessAllowedNT
или
AUTHORITY\INTERACTIVE AccessAllowed, BUILTIN\Administrators AccessAllowed, BUILTIN\Remote Management Users AccessAllowed
Enter-PSSession -ComputerName host -Credential user
или
Enter-PSSession host -Credential user
или
etsn host -Credential user
Чтобы мы могли подключиться удаленно к host, user должен входить в группы Administrators или Remote Management Users на ПК, которому мы подключаемся. Включить нужного пользователя в указанные группы можно на все ПК в домене, используя механизм GPO.
Exit-PSSession или exsn - завершить сессию PowerShell
Get-PSSession - посмотреть открытые сессии
Remove-PSSession - закрыть все сессии
Кракозябры в PowerShell
[Console]::OutputEncoding - посмотреть настройки кодировок в консоли PowerShell
не все так просто, как должно быть на первый взгляд: https://habr.com/ru/post/321076/
Проблема: при подключении к удаленным ПК с русскоязычной ОС запуск консольных команд (ipconfig, ping итп.) приводит к отображению символов в неверной кодировке. Консольные команды выдают символы в кодировке cp866, а PowerShell отображает эти данные в кодировке windows1251. Причем, при локальном запуске PowerShell данной проблемы не наблюдается.
Решение:
1) Объявляем такую функцию в PS
function ConvertTo-Encoding ([string]$From, [string]$To){
Begin{
$encFrom = [System.Text.Encoding]::GetEncoding($from)
$encTo = [System.Text.Encoding]::GetEncoding($to)
}
Process{
$bytes = $encTo.GetBytes($_)
$bytes = [System.Text.Encoding]::Convert($encFrom, $encTo, $bytes)
$encTo.GetString($bytes)
}
}
2) Подаем на вход этой функции строковый вывод:
ipconfig /all | ConvertTo-Encoding cp866 windows-1251
Т.е. нам необходимо каждую команду, дающую вывод в кодировке cp866, вводимую на удаленном хосте, снабжать вызовом функции перекодировки: ConvertTo-Encoding cp866 windows-1251
Перезагрузка компьютера
Restart-Computer
Проверка жестких дисков
Прочтение SMART-статуса диска
Get-PhysicalDisk | Sort Size | FT FriendlyName, Size, MediaType,SpindleSpeed, HealthStatus, OperationalStatus -AutoSize
https://winitpro.ru/index.php/2015/10/27/rezultaty-proverki-chkdsk-v-windows-10/
https://social.technet.microsoft.com/wiki/contents/articles/7803.powershell-deep-dive-and-best-practice.aspx https://social.technet.microsoft.com/wiki/contents/articles/7703.powershell-running-executables.aspx
Проверка доступности порта YYYY у ПК XXXX
Test-NetConnection -ComputerName XXX -Port YYYY