PowerShell: Полезные функции

PowerShell: Полезные функции

Полезные функции #PowerShell, которые я пишу сам или нахожу в интернете. Очень помогает в работе и в скриптах.

Найти файлы старше X дней с момента создания

Функция позволяет найти и вывести элементы старше X дней по свойству CreationTime.

Параметры

  • -P - путь к директории, в которой необходимо найти файлы.
  • -T - время, прошедшее с момента создания файла (в секундах).
pwsh.find.ct.ps1
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
Param(
  [Alias('P')][string]$Path,
  [Alias('T')][long]$Time
)

function Find-CreationTime() {
  Get-ChildItem -Path "${Path}" -Recurse -File
    | Sort-Object -Property 'LastAccessTime'
    | Where-Object { (($_.CreationTime) -lt ((Get-Date).AddSeconds(-$Time))) }
}

Find-CreationTime

Найти файлы старше X дней с момента изменения

Функция позволяет найти и вывести элементы старше X дней по свойству LastWriteTime.

Параметры

  • -P - путь к директории, в которой необходимо найти файлы.
  • -T - время, прошедшее с момента изменения файла (в секундах).
pwsh.find.lwt.ps1
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
Param(
  [Alias('P')][string]$Path,
  [Alias('T')][long]$Time
)

function Find-LastWriteTime() {
  Get-ChildItem -Path "${Path}" -Recurse -File
    | Sort-Object -Property 'LastAccessTime'
    | Where-Object { (($_.LastWriteTime) -lt ((Get-Date).AddSeconds(-$Time))) }
}

Find-LastWriteTime

Создать новый элемент

Функция позволяет создавать элементы. Ничего экстраординарного здесь нет, просто функция, укорачивающая стандартный cmdlet New-Item.

Параметры

  • -T - тип элемента.
    • 'D' - директория.
    • 'F' - файл.
  • -P - путь к директории, в которой необходимо создать элемент.
  • -N - название элемента.
pwsh.new.item.ps1
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
param (
  [Alias('T')][string]$Type,
  [Alias('P')][string]$Path,
  [Alias('N')][string]$Name,
  [Alias('A')][string]$Action = 'SilentlyContinue'
)

function New-Data() {
  switch ($Type) {
    'D' { $Type = 'Directory' }
    'F' { $Type = 'File' }
  }

  New-Item -Path "${Path}" -Name "${Name}" -ItemType "${Type}" -ErrorAction "${Action}"
}

New-Data

Проверить существование элемента

Функция позволяет “безопасно” проверить существование элемента. Применяется параметр -LiteralPath, который интерпретирует путь без какой-либо обработки.

Параметры

  • -T - тип элемента.
  • -P - путь к директории, в которой необходимо проверить элемент.
pwsh.test.item.ps1
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
param (
  [Alias('T')][string]$Type,
  [Alias('P')][string]$Path
)

function Test-Data() {
  switch ($Type) {
    'D' { $Type = 'Container' }
    'F' { $Type = 'Leaf' }
  }

  Test-Path -LiteralPath "${Path}" -PathType "${Type}"
}

Test-Data

Проверить существование модуля

Функция позволяет проверить существование модуля PowerShell в памяти компьютера.

Параметры

  • -N - название модуля.
pwsh.test.module.ps1
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
Param(
  [Alias('N')][string[]]$Names,
  [Alias('A')][string]$Action = 'Stop'
)

function Test-Module() {
  ForEach ($Name in $Names) {
    if (-not (Get-Module -ListAvailable -Name "${Name}")) {
      Write-Error -Message "Module '${Name}' not installed!" -ErrorAction "${Action}"
    }
  }
}

Test-Module

Вывести сообщение в терминал

Функция выводит информацию в терминал по типу сообщений.

Параметры

  • -T - тип сообщения.
    • 'HL' - заголовок.
    • 'I' - информационное сообщение.
    • 'W' - предупреждение (warning).
    • 'E' - ошибка (error).
  • -M - текст сообщения.
  • -A - действие, которое необходимо выполнить при выводе сообщения в терминал.
pwsh.write.msg.ps1
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
param (
  [Alias('T')][string]$Type,
  [Alias('M')][string]$Message,
  [Alias('A')][string]$Action = 'Continue'
)

function Write-Msg() {
  switch ($Type) {
    'HL'    { Write-Host "${NL}--- ${Message}".ToUpper() -ForegroundColor Blue }
    'I'     { Write-Information -MessageData "${Message}" -InformationAction "${Action}" }
    'W'     { Write-Warning -Message "${Message}" -WarningAction "${Action}" }
    'E'     { Write-Error -Message "${Message}" -ErrorAction "${Action}" }
    default { Write-Host "${Message}" }
  }
}

Write-Msg

Найти свободную букву диска

Небольшая функция, которая возвращает не занятую букву диска. Используется в PowerShell: Стирание диска.

pwsh.find.adl.ps1
1
2
3
function Find-AvailableDriveLetter() {
  (68..90 | ForEach-Object { $L=[char]$_; if ((Get-PSDrive).Name -notContains $L) { $L } })[0]
}

Получить размер файла

Функция позволяет получить размер файла в различных единицах измерения.

Параметры

  • -F - название файла.
pwsh.get.filesize.ps1
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
Param(
  [Alias('F')][string]$File
)

function Get-FileSize() {
  (Get-Item "${File}").Length      # Size in bytes.
  (Get-Item "${File}").Length/1KB  # Size in KB.
  (Get-Item "${File}").Length/1MB  # Size in MB.
  (Get-Item "${File}").Length/1GB  # Size in GB.
  (Get-Item "${File}").Length/1TB  # Size in TB.
}

Get-FileSize

Работа с архивами 7-Zip

Функции по работе с архивами 7-Zip.

Параметры

  • -F - путь к файлу.

Упаковка

pwsh.compress.7z.ps1
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
Param(
  [Alias('F')][string]$File
)

function Compress-A7z() {
  Get-ChildItem "${File}" | ForEach-Object {
    & "$($Env:ProgramFiles)\7-Zip\7z.exe" a "$($_.FullName + '.7z')" "$($_.FullName)"
  }
}

Compress-A7z

Распаковка

pwsh.expand.7z.ps1
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
Param(
  [Alias('F')][string]$File
)

function Expand-A7z() {
  Get-ChildItem "${File}" | ForEach-Object {
    & "$($Env:ProgramFiles)\7-Zip\7z.exe" x "$($_.FullName)"
  }
}

Expand-A7z

Работа с архивами WinRAR

Функции по работе с архивами WinRAR.

Параметры

  • -F - путь к файлу.

Упаковка

pwsh.compress.rar.ps1
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
Param(
  [Alias('F')][string]$File
)

function Compress-RAR() {
  Get-ChildItem "${File}" | ForEach-Object {
    & "$($Env:ProgramFiles)\WinRAR\Rar.exe" a "$($_.FullName + '.rar')" "$($_.FullName)"
  }
}

Compress-RAR

Распаковка

pwsh.expand.rar.ps1
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
Param(
  [Alias('F')][string]$File
)

function Expand-RAR() {
  Get-ChildItem "${File}" | ForEach-Object {
    & "$($Env:ProgramFiles)\WinRAR\Rar.exe" x "$($_.FullName)"
  }
}

Expand-RAR