Test-Path
Определяет, существуют ли все элементы пути.
Синтаксис
Test-Path
[-Path] <String[]>
[-Filter <String>]
[-Include <String[]>]
[-Exclude <String[]>]
[-PathType <TestPathType>]
[-IsValid]
[-Credential <PSCredential>]
[-OlderThan <DateTime>]
[-NewerThan <DateTime>]
[<CommonParameters>]
Test-Path
-LiteralPath <String[]>
[-Filter <String>]
[-Include <String[]>]
[-Exclude <String[]>]
[-PathType <TestPathType>]
[-IsValid]
[-Credential <PSCredential>]
[-OlderThan <DateTime>]
[-NewerThan <DateTime>]
[<CommonParameters>]
Test-Path
[-Path] <string[]>
[-Filter <string>]
[-Include <string[]>]
[-Exclude <string[]>]
[-PathType <TestPathType>]
[-IsValid]
[-Credential <pscredential>]
[<CommonParameters>]
Test-Path
-LiteralPath <string[]>
[-Filter <string>]
[-Include <string[]>]
[-Exclude <string[]>]
[-PathType <TestPathType>]
[-IsValid]
[-Credential <pscredential>]
[<CommonParameters>]
Описание
Командлет Test-Path
определяет, существуют ли все элементы пути. Он возвращает $true
, если все элементы существуют и $false
, если отсутствуют. Он также может определить, является ли синтаксис пути допустимым, а путь приводит к контейнеру, или к терминалу, или к конечному элементу. Если путь является пробелом или пустым элементом, командлет возвращает $false
. Если пути$null
, массив $null
или пустой массив, командлет возвращает ошибку без конца.
Примеры
Пример 1. Проверка пути
Test-Path -Path "C:\Documents and Settings\DavidC"
True
Эта команда проверяет, существуют ли все элементы пути, включая каталог C:
, каталог Documents and Settings
и каталог DavidC
. Если какие-либо отсутствуют, командлет возвращает $false
. В противном случае функция возвращает $true
.
Пример 2. Проверка пути профиля
Test-Path -Path $PROFILE
False
Test-Path -Path $PROFILE -IsValid
True
Эти команды проверяют путь к профилю PowerShell.
Первая команда определяет, существуют ли все элементы в пути. Вторая команда определяет правильность синтаксиса пути. В этом случае путь — $false
, но синтаксис правильный — $true
. Эти команды используют $PROFILE
, автоматическую переменную, указывающую на расположение профиля, даже если профиль не существует.
Дополнительные сведения об автоматических переменных см. в about_Automatic_Variables.
Пример 3. Проверьте наличие файлов, кроме указанного типа
Test-Path -Path "C:\CAD\Commercial Buildings\*" -Exclude *.dwg
False
Эта команда проверяет наличие файлов в каталоге коммерческих зданий, отличных от .dwg файлов.
Команда использует параметр Path, чтобы указать путь. Поскольку путь содержит пробел, он заключен в кавычки. Звездочка в конце пути указывает содержимое каталога 'Commercial Building'. С длинными путями, такими как этот, введите первые несколько букв пути, а затем используйте клавишу TAB для завершения пути.
Команда указывает параметр исключить, чтобы указать файлы, которые будут пропущены из оценки.
В этом случае, так как каталог содержит только .dwg файлы, результатом является $false
.
Пример 4. Проверка наличия файла
Test-Path -Path $PROFILE -PathType Leaf
True
Эта команда проверяет, ведет ли путь, хранящийся в переменной $PROFILE
, к файлу. В этом случае, так как профиль PowerShell является файлом .ps1
, командлет возвращает $true
.
Пример 5. Проверка путей в реестре
Эти команды используют Test-Path
с поставщиком реестра PowerShell.
Первая команда проверяет, правильный ли путь реестра для ключа реестра Microsoft.PowerShell в системе. Если PowerShell установлен правильно, командлет возвращает $true
.
Важный
Test-Path
не работает правильно со всеми поставщиками PowerShell. Например, можно использовать Test-Path
для проверки пути раздела реестра, но если вы примените его для проверки пути записи реестра, он всегда вернет $false
, даже если запись реестра присутствует.
Test-Path -Path "HKLM:\Software\Microsoft\PowerShell\1\ShellIds\Microsoft.PowerShell"
True
Test-Path -Path "HKLM:\Software\Microsoft\PowerShell\1\ShellIds\Microsoft.PowerShell\ExecutionPolicy"
False
Пример 6. Проверка наличия файла в диапазоне дат
Эта команда использует динамические параметры NewerThan и OlderThan, чтобы определить, является ли файл pwsh.exe
на компьютере новее July 13, 2009
и старше, чем на прошлой неделе.
Параметры NewerThan и OlderThan работают только на дисках файловой системы.
Get-Command pwsh |
Select-Object -ExpandProperty Path |
Test-Path -NewerThan "July 13, 2009" -OlderThan (Get-Date).AddDays(-7)
True
Пример 7. Проверка пути с значением NULL
Ошибка, возвращаемая для null
, а также для массива null
или пустого массива, является ошибкой, не приводящей к завершению. Его можно отключить с помощью -ErrorAction SilentlyContinue
. В следующем примере показаны все случаи, возвращающие ошибку NullPathNotPermitted
.
Test-Path $null
Test-Path $null, $null
Test-Path @()
Test-Path : Cannot bind argument to parameter 'Path' because it is null.
At line:1 char:11
+ Test-Path $null
+ ~~~~~
+ CategoryInfo : InvalidData: (:) [Test-Path], ParameterBindingValidationException
+ FullyQualifiedErrorId : ParameterArgumentValidationErrorNullNotAllowed,Microsoft.PowerShell.Commands.TestPathCommand
Пример 8. Тестирование пути с пробелами в качестве значения
Если строка, состоящая из пробелов, предоставляется для параметра Path, возвращается $false
. Это изменение из Windows PowerShell 5.1. Если указана пустая строка, Test-Path
возвращает ошибку.
В следующем примере показаны пробелы и пустая строка.
Test-Path ' '
Test-Path ''
False
False
Пример 9. Проверка пути, который может иметь недопустимый диск
При тестировании пути, включающего спецификацию диска, проверка допустимости пути завершается ошибкой, если диск не существует. Диск можно префиксировать с именем поставщика, чтобы обойти эту проблему.
Test-Path -IsValid Z:\abc.txt
Test-Path -IsValid FileSystem::Z:\abc.txt
False
True
Параметры
-Credential
Заметка
Этот параметр не поддерживается поставщиками, установленными с помощью PowerShell. Чтобы олицетворить другого пользователя или повысить свои учетные данные при выполнении этого командлета, используйте Invoke-Command.
Тип: | PSCredential |
Position: | Named |
Default value: | None |
Обязательно: | False |
Принять входные данные конвейера: | True |
Принять подстановочные знаки: | False |
-Exclude
Указывает элементы, которые этот командлет пропускает. Значение этого параметра квалифифициирует параметр Path. Введите элемент пути или шаблон, например *.txt
. Разрешены подстановочные знаки.
Тип: | String[] |
Position: | Named |
Default value: | None |
Обязательно: | False |
Принять входные данные конвейера: | False |
Принять подстановочные знаки: | True |
-Filter
Задает фильтр в формате или языке поставщика. Значение этого параметра квалифифициирует параметр Path. Синтаксис фильтра, включая использование подстановочных знаков, зависит от поставщика. Фильтры более эффективны, чем другие параметры, так как поставщик применяет их при извлечении объектов, а не фильтрует объекты после их получения.
Тип: | String |
Position: | Named |
Default value: | None |
Обязательно: | False |
Принять входные данные конвейера: | False |
Принять подстановочные знаки: | True |
-Include
Этот командлет проверяет указанные пути. Значение этого параметра квалифифициирует параметр Path. Введите элемент пути или шаблон, например *.txt
. Разрешены подстановочные знаки.
Тип: | String[] |
Position: | Named |
Default value: | None |
Обязательно: | False |
Принять входные данные конвейера: | False |
Принять подстановочные знаки: | True |
-IsValid
Указывает, что этот командлет проверяет синтаксис пути независимо от того, существуют ли элементы пути. Этот командлет возвращает $true
, если синтаксис пути правильный, и $false
, если он неправильный. Если тестируемый путь содержит спецификацию диска, командлет возвращает значение false, если диск не существует. PowerShell возвращает значение false, так как он не знает, какой поставщик дисков необходимо протестировать.
Заметка
В .NET 2.1 было введено существенное изменение в API для работы с путями. Эти методы больше не проверяют наличие недопустимых символов пути. Это изменение вызвало регрессию в PowerShell, где IsValid больше не проверяет наличие недопустимых символов. Регрессия будет устранена в будущем выпуске. Дополнительные сведения см. в разделе Критические изменения в .NET Core 2.1.
Тип: | SwitchParameter |
Position: | Named |
Default value: | None |
Обязательно: | False |
Принять входные данные конвейера: | False |
Принять подстановочные знаки: | False |
-LiteralPath
Указывает путь для тестирования. В отличие от пути, значение параметра LiteralPath используется в точности так, как введено. Символы не интерпретируются как подстановочные знаки. Если путь содержит символы, которые могут интерпретироваться PowerShell как управляющие последовательности, необходимо заключить путь в одиночные кавычки, чтобы они не интерпретировались.
Тип: | String[] |
Aliases: | PSPath, LP |
Position: | Named |
Default value: | None |
Обязательно: | True |
Принять входные данные конвейера: | True |
Принять подстановочные знаки: | False |
-NewerThan
Это динамический параметр, доступный поставщиком файловой системы.
Укажите время в качестве объекта DateTime.
Перед PowerShell 7.5 командлет игнорирует:
- Этот параметр, если вы указываете PathType как значение, отличающееся от
Any
. - Параметр OlderThan при использовании с этим параметром.
- Этот параметр, когда путь указывает на каталог.
Начиная с PowerShell 7.5, этот параметр можно использовать с любым значением параметра PathType, для тестирования диапазона дат с помощью параметра OlderThan, а также для тестирования возраста каталогов.
Дополнительные сведения см. в about_FileSystem_Provider.
Тип: | Nullable<T>[[DateTime]] |
Position: | Named |
Default value: | None |
Обязательно: | False |
Принять входные данные конвейера: | False |
Принять подстановочные знаки: | False |
-OlderThan
Это динамический параметр, доступный поставщиком файловой системы.
Укажите время в качестве объекта DateTime.
Перед PowerShell 7.5 командлет игнорирует:
- Этот параметр, если вы указываете PathType как значение, отличающееся от
Any
. - Этот параметр используется с параметром NewerThan.
- Этот параметр, когда путь указывает на каталог.
Начиная с PowerShell 7.5 этот параметр можно использовать с любым значением для параметра PathType, для тестирования диапазона дат с помощью параметра NewerThan и тестирования возраста каталогов.
Дополнительные сведения см. в about_FileSystem_Provider.
Тип: | Nullable<T>[[DateTime]] |
Position: | Named |
Default value: | None |
Обязательно: | False |
Принять входные данные конвейера: | False |
Принять подстановочные знаки: | False |
-Path
Указывает путь для тестирования. Разрешены подстановочные знаки. Если путь содержит пробелы, заключите его в кавычки.
Тип: | String[] |
Position: | 0 |
Default value: | None |
Обязательно: | True |
Принять входные данные конвейера: | True |
Принять подстановочные знаки: | True |
-PathType
Указывает тип конечного элемента в пути. Этот командлет возвращает $true
, если элемент имеет указанный тип и $false
, если это не так. Допустимые значения для этого параметра:
-
Container
— элемент, содержащий другие элементы, такие как каталог или раздел реестра. -
Leaf
— элемент, который не содержит другие элементы, например файл. -
Any
— контейнер или лист.
Указывает, имеет ли конечный элемент в пути определенный тип.
Осторожность
До версии 6.1.2 PowerShell, когда указаны переключатели IsValid и PathType вместе, командлет Test-Path
игнорирует переключатель PathType и проверяет только синтаксис пути без проверки типа пути.
В соответствии с вопрос #8607, исправление этого поведения может стать критическим изменением в будущей версии, где переключатели IsValid и PathType принадлежат отдельным наборам параметров, и, таким образом, не могут быть использованы вместе, чтобы избежать этой путаницы.
Тип: | TestPathType |
Aliases: | Type |
Допустимые значения: | Any, Container, Leaf |
Position: | Named |
Default value: | None |
Обязательно: | False |
Принять входные данные конвейера: | False |
Принять подстановочные знаки: | False |
Входные данные
Можно направить строку, содержащую путь, но не буквальный путь, к этому командлету.
Выходные данные
Командлет возвращает логическое значение .
Примечания
Командлеты, содержащие существительное Путь (командлеты Путь), работают с путем и возвращают имена в кратком формате, который могут интерпретировать все провайдеры PowerShell. Они предназначены для использования в программах и сценариях, где вы хотите отобразить все или часть пути в определенном формате. Используйте их так, как вы используете Dirname, Normpath, Realpath, Joinили другие манипуляторы пути.
Test-Path
предназначен для работы с данными, предоставляемыми любым поставщиком. Чтобы вывести список поставщиков, доступных в сеансе, введите Get-PSProvider
. Дополнительные сведения см. в разделе about_Providers.