Директории в PowerShell

Проверить существование директории

$script_name = имя вашего скрипта $workdir = ваша рабочая директория $path = Join-Path $workdir $script_name if (Test-Path -Path $path) { Write-Output "$path exists" } else { Write-Output "$path does not exist" }

Проверить есть ли в текущей директории поддиректория swagger-ui

${SwaggerPath} = Join-Path ${pwd} "swagger-ui"; If (Test-Path -path ${SwaggerPath}) { Write-Host "swagger-ui dir exists" -f Green } Else { Write-Host "swagger-ui dir does not exist" -f Yellow }

Проверить и если такой директории нет - скачать архив

$SWAGGER_URL = "https://github.com/swagger-api/swagger-ui/archive/refs/tags/v5.11.10.zip"; ${SwaggerPath} = Join-Path ${pwd} "swagger-ui"; If (Test-Path -path ${SwaggerPath}) { Write-Host "swagger-ui dir exists" -f Green } Else { Write-Host "swagger-ui dir does not exist - starting download" -f Yellow Invoke-WebRequest $SWAGGER_URL -OutFile swagger-ui.zip }

Создать директорию

Для создания новой директории используется команда New-Item с ItemType directory

New-Item -Path "c:\" -Name "logfiles" -ItemType "directory"

Проверить наличие директории. Если её нет - создать.

If (Test-Path -path "test\mod\etc\") { Write-Host "test\mod\etc\ dir exists" -f Green } Else { Write-Host "test\mod\etc\ dir does not exist - creating" -f Yellow New-Item -Path "test\mod\" -Name "etc" -ItemType "directory" }

Пример в виде функции

function create_folder() { param ( [string] $parent_path, [string] $folder_name ) $time = (Get-Date -Format "yyyy-MM-dd HH:mm:ss") Write-Host ($time + " create_folder() ${path}") -f Magenta $path = Join-Path $parent_path $folder_name If (Test-Path -path $path) { Write-Host ($time + " ${path} dir already exists") -f Magenta } Else { Write-Host ($time + " ${path} dir does't exist creating") -f Magenta New-Item -Path $path -Name $folder_name -ItemType "directory" } } create_folder "S:\" "Shared"

.\create_folder.ps1

2026-11-07 19:38:19 create_folder() 2026-11-07 19:38:19 S:\Shared dir does't exist creating Directory: S:\Shared Mode LastWriteTime Length Name ---- ------------- ------ ---- d---- 07/11/2026 7:38 PM Shared

.\create_folder.ps1

2026-11-07 19:38:24 create_folder() 2026-11-07 19:38:24 S:\Shared dir already exists

Удалить директорию

Удалить директорию можно с помощью той же команды, которая удаляет файлы Remove-Item. Нужно передать аргументы -LiteralPath, -Force и -Recurse.

Пример удаления директории dirname из её родительской директории.

Remove-Item -LiteralPath "dirname" -Force -Recurse

Копировать директорию

Копировать директорию можно с помощью той же команды, которая копирует файлы Copy-Item. Нужно передать аргументы -Path и -Recurse. Для перезаписи существующих файлов нужно добавить -Force

Пример копирования директории "C:\SourceFolder" в директорию "D:\TargetFolder".

Copy-Item -Path "C:\SourceFolder" -Destination "D:\TargetFolder" -Recurse -Force

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

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

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

Переименовать директорию

Rename-Item -Path swagger-ui-5.11.10 -NewName swagger-ui

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

$PSScriptRoot

Получить путь до директории, в которой находится исполняемый скрипт

Write-Output $PSScriptRoot

Импортировать другой скрипт указав путь относительно текущего скрипта

. "$PSScriptRoot\settings.ps1"

В PowerShell 2.0 $PSScriptRoot не сработает, поэтому нужно использовать следующую альтернативу с применением Split-Path и Join-Path

$scriptPath = Split-Path -Parent $MyInvocation.MyCommand.Path $settingsPath = Join-Path $scriptPath "..\..\_settings.ps1" . $settingsPath

Родительская директория

Получить путь до родительской директории в современных версиях PowerShell

$parent = Split-Path -Parent $PSScriptRoot

В PowerShell 2.0 $PSScriptRoot не сработает, поэтому нужно использовать следующую альтернативу с применением Split-Path

$scriptDir = Split-Path -Parent $MyInvocation.MyCommand.Path $parentDir = Split-Path -Parent $scriptDir # Если нужно импортировать скрипт из родительской директории: $importPath = Join-Path $parentDir "YourScript.ps1" . $importPath

Join-Path

Объединить пути можно следующим образом

$TMP_PATH = "C:/tmp_python" $TMP_PYTHON_EXE = Join-Path -Path $TMP_PATH -ChildPath "python.exe"

Пример импорта скрипта относительно текущего с применением Join-Path в PowerShell 2.0.

$scriptPath = Split-Path -Parent $MyInvocation.MyCommand.Path $settingsPath = Join-Path $scriptPath "..\..\_settings.ps1" . $settingsPath

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