Директории в 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-02-09 02:27:01 create_folder() 2026-02-09 02:27:01 S:\Shared dir does't exist creating Directory: S:\Shared Mode LastWriteTime Length Name ---- ------------- ------ ---- d---- 09/02/2026 2:27 AM Shared
.\create_folder.ps1
2026-02-09 02:27:06 create_folder() 2026-02-09 02:27:06 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
Автор статьи: Андрей Олегович
| PowerShell | |
| Alias | |
| Основы | |
| Запросы к REST API | |
| Пользователи | |
| Сеть | |
| Установка | |
| Файлы | |
| Функции | |
| Циклы | |
| Ошибки PowerShell |