Полезные функции #PowerShell, которые я пишу сам или нахожу в интернете. Очень помогает в работе и в скриптах.
Функция позволяет найти и вывести элементы старше X дней по свойству CreationTime
.
-P
- путь к директории, в которой необходимо найти файлы.-T
- время, прошедшее с момента создания файла (в секундах).
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
|
.AddSeconds
можно заменить на .AddDays
, чтобы отсчитывать дату не в секундах, а в днях.
Функция позволяет найти и вывести элементы старше X дней по свойству LastWriteTime
.
-P
- путь к директории, в которой необходимо найти файлы.-T
- время, прошедшее с момента изменения файла (в секундах).
.AddSeconds
можно заменить на .AddDays
, чтобы отсчитывать дату не в секундах, а в днях.
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
- название элемента.
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
- путь к директории, в которой необходимо проверить элемент.
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 в памяти компьютера.
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
- действие, которое необходимо выполнить при выводе сообщения в терминал.
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: Стирание диска.
1
2
3
| function Find-AvailableDriveLetter() {
(68..90 | ForEach-Object { $L=[char]$_; if ((Get-PSDrive).Name -notContains $L) { $L } })[0]
}
|
Функция позволяет получить размер файла в различных единицах измерения.
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.
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
|
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.
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
|
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
|