Основные команды
Вспомогательные команды
Powershell использует формат “глагол-существительное” для своих команд.
Некоторые распространенные глаголы:
Verb | Description |
---|---|
Получить | Get |
Установить | Используется для настройки или изменения параметров. |
New | |
Remove | |
Invoke | |
Start | Используется для запуска процесса или операции. |
Stop | Приостановить или завершить процесс или операцию. |
Enable | Используется для активации или включения функции. |
Отключить | Используется для деактивации или отключения функции. |
Test | Используется для выполнения тестов или проверок. |
Обновить | Используется для обновления данных или конфигураций. |
Список доступных модулей ``powershell Get-Module –ListAvailable
Перечисляет доступные команды и функции.
``powershell
Get-Command -Module ActiveDirectory
Получает справку ``powershell Get-Help Get-Help -Examples Get-Help -Name Get-Process -Parameter Id
Перечисляет псевдонимы и соответствующие им имена команд.
``powershell
Get-Alias | Select-Object Name, Definition
Get-Member: Отображает свойства и методы объектов. ``powershell Get-Process | Get-Member
### Манипулирование объектами {.col-span-2}
**Select-Object:** Выбирает определенные свойства объектов или настраивает их отображение.
``powershell
Get-Process | Select-Object Name, CPU
Where-Object: Фильтрует объекты на основе заданных условий. ``powershell Get-Service | Where-Object { $PSItem.Status -eq ‘Running’ } #OR Get-Service | ? { $_.Status -eq ‘Running’ }
**Measure-Object:** Вычисляет статистику, такую как сумма, среднее и количество, для свойств объекта.
``powershell
Get-Process | Measure-Object -Property WorkingSet -Sum
ForEach-Object: Выполняет операцию над каждым объектом в коллекции. (ОСТОРОЖНО: нижеприведенная команда создаст префикс файлов/папок в текущем каталоге) ``powershell Get-ChildItem | ForEach-Object { Rename-Item $_ -NewName “Prefix_$_” }
**Sort-Object:** Сортировка объектов по заданным свойствам.
``powershell
Get-ChildItem | Sort-Object Length -Descending
Format-Table: Форматирует вывод в виде таблицы с указанными столбцами.
Get-Service | Format-Table -AutoSize # ft alias
Format-List: Форматирует вывод в виде списка свойств и значений. ``powershell Get-Process | Format-List -Property Name, CPU # fl alias
### FileSystem {.col-span-2}
``powershell
New-Item -path file.txt -type 'file' -value 'contents'
New-Item -path file.txt -type 'dir'
Copy-Item <src> -destination <dest>
Move-Item -path <src> -destination <dest>
Remove-Item <file>
Test-Path <путь>
Rename-Item -path <path> -newname <newname>
# использование библиотеки базовых классов .NET
[System.IO.File]::WriteAllText('test.txt', '')
[System.IO.File]::Delete('test.txt')
Get-Content -Path "test.txt"
Get-Process | Out-File -FilePath "processes.txt "# Вывод в файл
Get-Process | Export-Csv -Path "processes.csv" # Вывод в csv
$data = Import-Csv -Path "data.csv" # Импорт из csv
Управление системой
Windows Management Instrumentation
``powershell
Получение информации о BIOS
Get-CimInstance -ClassName Win32_BIOS
Получение информации о локально подключенных физических дисковых устройствах
Get-CimInstance -ClassName Win32_DiskDrive
Получение информации об установленной физической памяти (RAM)
Get-CimInstance -ClassName Win32_PhysicalMemory
Получение информации об установленных сетевых адаптерах (физических + виртуальных)
Get-CimInstance -ClassName Win32_NetworkAdapter
Получение информации об установленной графической / видеокарте (GPU)
Get-CimInstance -ClassName Win32_VideoController
Перечислить все имена классов
Get-CimClass | Select-Object -ExpandProperty CimClassName
Исследовать различные WMI-классы, доступные в пространстве имен root\cimv2
Get-CimClass -Namespace root\cimv2
Исследование дочерних пространств имен WMI, расположенных под пространством имен root\cimv2
Get-CimInstance -Namespace root -ClassName __NAMESPACE
### Управление сетью
``powershell
# Тестирование сетевого подключения к удаленному узлу
Test-Connection -ComputerName google.com
# Получить информацию о сетевом адаптере
Get-NetAdapter
# Получение информации об IP-адресе
Get-NetIPAddress
# Получение информации о таблице маршрутизации
Get-NetRoute
# Проверить, открыт ли порт на удаленном хосте
Test-NetConnection google.com -Port 80
Управление пользователями и группами
``powershell
Получение информации об учетной записи локального пользователя
Get-LocalUser
Создать новую учетную запись локального пользователя
New-LocalUser -Name NewUser -Password (ConvertTo-SecureString “Password123” -AsPlainText -Force)
Удалить учетную запись локального пользователя
Remove-LocalUser -Name UserToRemove
Получить информацию о локальной группе
Get-LocalGroup
Добавить члена в локальную группу
Add-LocalGroupMember -Group Administrators -Member UserToAdd
### Безопасность и разрешения
``powershell
# Получение списков контроля доступа для файла/директории
Get-Acl C:\Path\To\File.txt
# Установить списки контроля доступа для файла/директории
Set-Acl -Path C:\Path\To\File.txt -AclObject $aclObject
Управление реестром
``powershell
Получение значений ключей реестра
Get-ItemProperty -Path “HKLM:\Software\Microsoft\Windows\CurrentVersion\Uninstall*” | Select DisplayName, DisplayVersion
Установить значения ключей реестра
Set-ItemProperty -Path “HKLM:\Software\MyApp” -Name “SettingName” -Value “NewValue”
Создать новое значение ключа реестра
New-ItemProperty -Path “HKCU:\Software\MyApp” -Name “NewSetting” -Value “NewValue” -PropertyType String
Удалить значение ключа реестра
Remove-ItemProperty -Path “HKCU:\Software\MyApp” -Name “SettingToRemove”
Проверить, существует ли ключ реестра
Test-Path “HKLM:\Software\MyApp”
Сценарии
---------------
### Переменные {.col-span-2}
Инициализация переменной с/без заданного типа:
``powershell
$var = 0
[int] $var = 'Trevor' # (выбрасывает исключение)
[string] $var = 'Trevor' # (не выбрасывает исключение)
$var.GetType()
# Множественное присваивание
$a,$b,$c = 'a','b','c'
# Создание массива
$arrayvar = @('va1','va2')
# Создать дикту
$dict = @{k1 = 'test'; k2 = 'best'}
Команды переменных ``Powershell New-Variable -Name FirstName -Value Trevor New-Variable FirstName -Value Trevor -Option <ReadOnly/Constant>
Get-Variable Get-Variable | ? { $PSItem.Options -contains ‘constant’ } Get-Variable | ? { $PSItem.Options -contains ‘readonly’ }
Remove-Variable -Name firstname
Удаляет переменную, доступную только для чтения
Remove-Variable -Name firstname -Force
Типы переменных
int32, int64, string, bool
### Операторы
``powershell
# операторы
# (a <op> b)
= , += / -= , ++ / --
-eq / -ne , -lt / -gt , -le / -ge
$FirstName = 'Trevor'
$FirstName -like 'T*'
$true; $false #bool true/false
# тернарный оператор
$FoodToEat = $BaconIsYummy ? 'бекон' : 'свекла'
# -notin или -in
'Сельдерей' -in @('Бекон', 'Колбаса', 'Стейк')
# output: True
5 -is [int32]
# совпадение с регексом, можно использовать массив
'Trevor' -match '^T\w*'
# Поиск множественных совпадений.
$regex = [regex]'(\w*)'
$regex.Matches('this is test').Value
Структура
Операция ввода-вывода
"Выводится строка"
Write-Host "color" -ForegroundColor Red
$age = Read-host "Введите возраст"
$pwd = Read-host "password" -asSecureString
Clear-Host
Flow Controls
``powershell IF(<#Condition#>){ <#Команды#>}ELSEIF(){}ELSE{}
Switch($var){ “val1”{<#Commands#>; break} “val2”{<#Commands#>; break} }
For($ct=0;$ct -le 3;$ct++){}
ForEach($var in $arr){}
while($var -ne 0){}
Do{}While()
### Функция / Модули {.row-span-2}
#### Пример 1
``powershell
function funcname{
[CmdletBinding()].
param(
[Parameter(Mandatory)]
[String]$user
)
Write-Host "welcome " $user
return "value"
}
$var = funcname -user pcb
Пример 2
``powershell
function Get-EvenNumbers {
[CmdletBinding()].
param (
[Parameter(ValueFromPipeline = $true)]
[int] $Number
)
begin {<#команда#>}
процесс {
if ($Number % 2 -eq 0) {
Write-Output $Number
}
}
end {<#команда#>}
}
1..10 | Get-EvenNumbers
#### Модули
``powershell
# powershell ищет модуль по пути
$env:PSModulePath
# выводит список всех модулей, установленных в системе
Get-Module -ListAvailable
# модули, импортированные в текущую сессию
Get-Module
Import-Module <moduleName>
Remove-Module <moduleName>
Find-Module -Tag cloud
Find-Module -Name ps*
# Создать модуль PowerShell в памяти
New-Module -Name trevor -ScriptBlock {
function Add($a,$b) { $a + $b } }
Советы
- В большинстве языков управляющим символом является обратный слеш **\**, тогда как в powershell - обратный тик `. ``powershell
## Также смотрите {.cols-1}
* [Microsoft Powershell](https://learn.microsoft.com/en-us/powershell/scripting/samples/sample-scripts-for-administration?view=powershell-7.3) _(learn.microsoft.com)_.