Перейти к содержанию

Небольшие заметки по использованию, чтобы не забывать.

Перед выполнение скриптового файла

set-executionpolicy remotesigned

Получить помощь

# помощь по команде Get-Process
get-help Get-Process

# пример использования команды Get-Process
get-help Get-Process -examples

# Получить методы возвращаемого объекта Get-Process
Get-Process| Get-Member

# Узнать тип объекта. В данном случае переменной с каталогом пользователя
$home.GetType()

Операции сравнения

Операция без учета регистра с учетом регистра C#
равно(equal) -eq -ceq ==
не равно (not equal) -ne -cne !=
больше чем (greater then) -gt -cgt >
меньше чем (less than) -lt -clt <
больше равно (greater or equal) -ge -cge >=
меньше равно (less than or equal) -le -cle

Операции со строками

Полная аналогия с C#. Разбить строку по пробелам

$string = "Test string"
$string.split(" ")

Ищем в $string первый пробел

$string.IndexOf(" ")

Предопределенные переменные

  • $home — каталог пользователя 
  • $NULL — пусто 
  • $true — истина 
  • $false — ложь
  • $DebugPreference (См. команду Write-Debug)
    • «Continue» выводить отладку
    • «SilentlyContinue» не выводить отладочную информацию. 

Работа с файлами

Дописать $string новой строкой в файл $file

$string | Out-File $file -Append

Получить в $string содержимое файла $file

$string = get-content -Path $file

Проверить существование файла

Test-Path "C:test.txt"

Найти все файлы с определенным расширением расширением в каталоге и подкаталогах. Затем скопировать эти файлы в другой каталог.

$flist = get-childitem e:doc* -include *.pdf -recurse
$flist | ForEach-Object{$_.CopyTo("e:docall_pdf" + $_.PSChildName)}

Текущий каталог

$local = Get-Location
$local.Path # Рабочий каталог
$local.Drive.Root # Корень
$local.Drive.Name # Буква диска
$local.Drive.Used # Использовано диска
$local.Drive.Free # Свободно на диске

Вывод текста на экран

# текст на который надо обратить внимание. Выделяется желтым.
Write-Warning("Текст требующий внимания")

# Просто выводит текст
Write-Host("Просто текст")

#включили вывод отладочной информации
$DebugPreference = "Continue"

# вывели отладочную информацию
Write-Debug "Cannot open file."

# отключили отладочную вывод отладочной информации
$DebugPreference = "SilentlyContinue"

Сделать паузу на несколько секунд

Start-Sleep -s 15 # Пауза на 15 секунд

Пауза в консоли, до нажатия Enter

Read-Host "Нажмите Enter"

Работа с процессами

Задача: убить все процессы с именем Notepad

# Способ №1
get-process Notepad | Stop-Process

# Способ №2 (Работает только с одним процессом)
$plist = get-process Notepad
$plist.Kill()

# Способ №3 (то же что и 2, но все процессы)
$plist = get-process Notepad
$plist | ForEach-Object {$_.Kill()}

Получить процессы и даты их запуска

Get-Process| Format-Table Name,StartTime -AutoSize

Список сессий RDP

$servers = "server1", "server2"

$ts = qwinsta /server:$server
$td = ($ts | where { $_ -notlike "*Подключено*" -and $_ -notlike "*services*" -and $_ -notlike "*Прием*"})
foreach ($server in $servers) {
    "Users: $server"
    $td
}