Powershell Test-Path проверяет весь путь на наличие папки или файла. Если хотя бы один элемент пути не существует, то команда вернет False при этом нельзя исключать корректность синтаксиса.
В этом варианте команда вернет True:
Test-Path -Path 'C:\Program Files\'
А в этом ошибку т.к. мы не экранировали путь в кавычки:
Test-Path -Path C:\Program Files\
Test-Path : A positional parameter cannot be found that accepts argument 'Files\'.
Test-Path : Не удается найти позиционный параметр, принимающий аргумент "Files\".
У нас есть ключ PathType проверяющий существование отдельного элемента пути. Написав:
- Container - проверяет существование папки будь то обычный каталог или реестр.
- Leaf - файл или любой другой элемент, который не содержит в себе другие элементы.
- Any - либо контейнер, либо лист (leaf).
Т.е. такая команда вернет False, т.к. конечный элемент это файл, а не директория:
Test-Path -PathType Container -Path 'C:\Program File1s\desktop.ini'
По умолчанию команда проверяет путь и файл.
Фильтрация в Powershell Test-Path
Мы можем предполагать, что в папке находиться файл с неизвестным именем и хотим проверить это. В самом ключе Path возможно использовать простые маски. Выполнив следующую команду у нас вернется True, если в папке находится хотя бы один файл заканчивающийся на .txt:
#file exists
Test-Path -PathType Leaf -Path "C:\*.txt"
Аналогично, если мы проверяем путь, причем промежуточный:
Test-Path -Path 'C:\Wind*\System32\'
Доступен ключ IsValid и он должен валидировать путь на корректное написание. Если мы его установим, то вместо того что бы проверять существование пути будет проверяться корректность написания:
Test-Path -IsValid -Path "C:\Windows\System32\@AppHelpToast.png"
Достаточно странный ключ и похоже он проверяет только эти символы в пути: " * : < > ? | , хотя при создании запрещен еще и другой слэш.
Есть еще два интересных ключа:
- Include - включает проверку объекта
- Exclude - исключает проверку объекта
С помощью этих ключей мы можем проверить, например, существует ли в папке документы *.txt и *.docx одновременно или узнать есть ли что-то кроме *.jpg. Для работы с этими параметрами нужно указать * в конце пути как на примере:
Test-Path -Include "*.log" -Path "C:\Windows\*"
Похожие маски мы можем делать и для ключа Filter, но он принимает только одно значение:
Test-Path -Path "C:\Windows\*" -Filter "*.log"
Установка MS SQL Server за 15 минут
Проверка в Powershell наличия сетевой папки и файла
Можно проверять сетевой путь через эту команду, но многие отписываются о багах (у меня их не было):
Test-Path -Path "\\192.168.3.100\Folder2\*" -Include "*.txt"
#check share folder
Test-Path "X:\*" -Include "*.txt"
Папку, как видно, я подключал через команду New-SmbMapping описанной раннее.
Если испытаете сложности с проверкой сетевых папок, и файлов попробуйте вариант с классом .Net, но он не может использовать маски:
[System.IO.Directory]::Exists("C:\")
Второй вариант, где AD1 имя сервера, а Folder2 папка:
Test-Path $('filesystem::\\AD1\Folder2\')
...
Подписывайтесь на наш Telegram канал
Теги: #powershell