Файлы в PowerShell

New-Item

Пример создания файла config.toml с помощью New-Item

New-Item -Path . -Name "config.toml" -ItemType "file"

Пример создания файла с конфигурацией PowerShell

New-Item -Path $profile -Force -ItemType "file"

Создать файл с помощью echo

echo $null >> new_file.txt

Copy-Item

Чтобы скопировать файл из текущей директории во вложенную выполните

Copy-Item -Path "имя_файла" -Destination "имя_директории"

Например

Copy-Item -Path "requirements.txt" -Destination "autotest_distr"

Remove-Item

Удалить файл можно командой Remove-Item

Удалить все файлы из директории C:\Test у которых есть точка в имени

Remove-Item C:\Test\*.*

Скрипт, который удаляет Python .exe файлы из WinodwsApps

# DeletePythonFromWindowsApps.ps1 $CURRENT_USER = $Env:Username $PYPATH = 'C:\Users\' + $CURRENT_USER + '\AppData\Local\Microsoft\WindowsApps\python.exe' $PY3PATH = 'C:\Users\' + $CURRENT_USER + '\AppData\Local\Microsoft\WindowsApps\python3.exe' If (Test-Path -path ${PYPATH}) { Remove-Item $PYPATH } If (Test-Path -path ${PY3PATH}) { Remove-Item $PY3PATH }

Rename-Item

Переименовать файл можно командой Rename-Item

Rename-Item -Path "oldname.txt" -NewName "newname.txt"

Изображение баннера

Get-Content

Вам нужно посмотреть только конец файла по аналогии с tail в Linux можно использовать Get-Content флагом -Tail.

Например, чтобы получить последние 100 строк файла 2026-11-07.log

Get-Content -Path "C:\logs\2026-11-07.log" -Tail 100

Если лог нужно смотреть в реальном времени - используйте флаг -Wait

Get-Content -Path "C:\logs\2026-11-07.log" -Wait

Можно совместить -Wait и -Tail и мониторить только последние строки в реальном времени

Get-Content -Path "C:\logs\2026-11-07.log" -Wait -Tail

Get-FileHash

Чтобы проверить контрольную сумму файла в PowerShell достаточно выполнить

Get-FileHash путь_до_файла -Algorithm MD5

Это является аналогом Bash команды md5sum в Linux и md5 в OpenBSD

Проверить файл notes.txt в текущей директории

Get-FileHash notes.txt -Algorithm MD5

--------- ---- ---- MD5 14B17234E237534421B6492B8D757507 C:\Users\Andrei\Downlo…

Распаковать архив

.zip

В PowerShell 5+

Распаковать архив в текущую директорию

Expand-Archive -Path swagger-ui.zip -DestinationPath .

Проверено на 5.1.22621.6060 и 7.4.13

Распаковать архив в заданную директорию

Expand-Archive -Path .\log.zip -DestinationPath .\logs

В PowerShell 2

Из коробоки решения нет, как вариант можно написать свою функцию

function Expand-Archive { param( [Parameter(Mandatory=$true)][string]$Path, [Parameter(Mandatory=$true)][string]$DestinationPath ) if (-not (Test-Path $DestinationPath)) { New-Item -ItemType Directory -Path $DestinationPath | Out-Null } $shell = New-Object -ComObject Shell.Application $zip = $shell.NameSpace($Path) $dest = $shell.NameSpace($DestinationPath) if (-not $zip) { throw "ZIP not found or invalid: $Path" } if (-not $dest) { throw "Destination not accessible: $DestinationPath" } # 16: No progress dialog, 4: No UI on errors, 1024: No confirmation $flags = 16 + 4 + 1024 $dest.CopyHere($zip.Items(), $flags) # Simple wait until file count matches (best-effort for PS2) while ($dest.Items().Count -lt $zip.Items().Count) { Start-Sleep -Milliseconds 200 } } $guest_user = "Andrei" $guest_file = "demo.zip" $path = "C:\Users\$guest_user\Desktop\$guest_file" $dest = "C:\Users\$guest_user\Desktop\demo" Expand-Archive -Path $path -DestinationPath $dest

Распаковать .tar.gz

В PowerShell 7 tar встроен по умолчанию

tar -xvzf .\data\license.tar.gz -C .

В более старых версиях PowerShell придётся пользоваться сторонними инструментами.

Распаковать .gz арихив в PowerShell 5. Проверено на Windows 7 с .NET 4.8 и в PowerShell 7 на Windows 11.

function ungz() { param( [Parameter(Mandatory=$true)][string]$Path, [Parameter(Mandatory=$false)][string]$DestinationPath ) $file = Get-Item $Path if (-not $PSBoundParameters.ContainsKey('DestinationPath')) { $DestinationPath = [System.IO.Path]::Combine( ($file).DirectoryName, ($file).BaseName ) } Write-Host "Destination: $DestinationPath" -f Green $inStream = [System.IO.File]::OpenRead($Path) $outStream = [System.IO.File]::Create($DestinationPath) $gzipStream = New-Object System.IO.Compression.GzipStream( $inStream, [System.IO.Compression.CompressionMode]::Decompress ) $gzipStream.CopyTo($outStream) $gzipStream.Dispose() $outStream.Dispose() $inStream.Dispose() Write-Host "Decompressed $Path to $DestinationPath" -f Green }

Применить можно указывая или не указывая назначение

ungz -Path "C:\Users\A\arch.tar.gz" -DestinationPath "C:\Users\A\output\arch.tar"

ungz -Path "C:\Users\A\arch.tar.gz"

Destination: C:\Users\A\arch.tar Decompressed C:\Users\A\arch.tar.gz to C:\Users\A\arch.tar

Распаковать .tar арихив в PowerShell 5 с помощью 7zip. Проверено на Windows 7 с .NET 4.8 и в PowerShell 7 на Windows 11.

function untar() { param( [Parameter(Mandatory=$true)][string]$Path, [Parameter(Mandatory=$false)][string]$DestinationPath ) $file = Get-Item $Path if (-not $PSBoundParameters.ContainsKey('DestinationPath')) { $DestinationPath = [System.IO.Path]::Combine( ($file).DirectoryName, ($file).BaseName ) } Write-Host "Destination: $DestinationPath" -f Green & "C:\Program Files\7-Zip\7z.exe" x $Path "-o$DestinationPath" Write-Host "Decompressed $Path to $DestinationPath" }

Применить можно указывая или не указывая назначение

untar -Path "S:\pwsh\data\license.tar" -DestinationPath ".\license"

untar -Path "S:\pwsh\data\license.tar"

Destination: S:\pwsh\data\license 7-Zip 25.01 (x64) : Copyright (c) 1999-2025 Igor Pavlov : 2025-08-03 Scanning the drive for archives: 1 file, 829440 bytes (810 KiB) Extracting archive: S:\pwsh\data\license.tar -- Path = S:\pwsh\data\license.tar Type = tar Physical Size = 829440 Headers Size = 10752 Code Page = UTF-8 Characteristics = ASCII Everything is Ok Files: 7 Size: 817069 Compressed: 829440 Decompressed C:\pwsh\data\license.tar to S:\pwsh\data\license

Переиспользуем две предыдущие фукнции, для того чтобы сразу распаковывать .tar.gz архив.

function untargz() { param( [Parameter(Mandatory=$true)][string]$Path, [Parameter(Mandatory=$false)][string]$DestinationPath ) $file = Get-Item $Path $TarPath = [System.IO.Path]::Combine( ($file).DirectoryName, ($file).BaseName ) ungz -Path $Path -DestinationPath $TarPath if (-not $PSBoundParameters.ContainsKey('DestinationPath')) { $file = Get-Item $TarPath $DestinationPath = [System.IO.Path]::Combine( ($file).DirectoryName, ($file).BaseName ) } Write-Host "Destination: $DestinationPath" -f Green untar -Path $TarPath -DestinationPath $DestinationPath Write-Host "Decompressed $Path to $DestinationPath" Write-Host "Cleanup: removing $TarPath" -f Yellow Remove-Item $TarPath }

Здесь также сохранена возможность указывать или не указывать назначение

untargz -Path "C:\Users\NS\Desktop\license.tar.gz" -DestinationPath "C:\Users\NS\Desktop\license" untargz -Path "C:\Users\NS\Desktop\license.tar.gz"

Автор статьи: Андрей Олегович