Поделиться через


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, чтобы указать путь. Так как путь содержит пробел, путь заключен в кавычки. Звездочка в конце пути указывает содержимое каталога коммерческого здания. С длинными путями, такими как этот, введите первые несколько букв пути, а затем используйте клавишу 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, чтобы определить, является ли файл pwsh.exe на компьютере более новым, чем July 13, 2009.

Параметр NewerThan работает только на дисках файловой системы.

Test-Path $pshome\pwsh.exe -NewerThan "July 13, 2009"

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 как escape-последовательности, необходимо заключить путь в одну кавычку, чтобы они не интерпретировались.

Тип: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 — контейнер или лист.

Указывает, имеет ли конечный элемент в пути определенный тип.

Осторожность

До PowerShell версии 6.1.2, когда IsValid и параметры PathType указываются вместе, командлет Test-Path игнорирует параметр PathType и проверяет только синтаксический путь без проверки типа пути.

В соответствии с проблема #8607, исправление этого поведения может быть критическим изменением в будущей версии, где IsValid и PathType коммутаторы принадлежат отдельным наборам параметров, и, таким образом, нельзя использовать совместно, избегая этой путаницы.

Тип:TestPathType
Aliases:Type
Допустимые значения:Any, Container, Leaf
Position:Named
Default value:None
Обязательно:False
Принять входные данные конвейера:False
Принять подстановочные знаки:False

Входные данные

String

Можно передать строку, содержащую путь, но не литеральный путь к этому командлету.

Выходные данные

Boolean

Командлет возвращает логическое значение .

Примечания

Командлеты, содержащие путь существительное (командлеты пути пути) работают с путем и возвращают имена в кратком формате, который могут интерпретировать все поставщики PowerShell. Они предназначены для использования в программах и сценариях, где вы хотите отобразить все или часть пути в определенном формате. Используйте их так, как вы будете использовать Dirname, Нормпат, Realpath, Joinили другие манипуляторы пути.

Test-Path предназначен для работы с данными, предоставляемыми любым поставщиком. Чтобы вывести список поставщиков, доступных в сеансе, введите Get-PSProvider. Дополнительные сведения см. в разделе about_Providers.