Найдите в каталоге каталог по указанному типу c и верните true или false, если он существует в PowerShell - PullRequest
1 голос
/ 24 марта 2020

Теперь, возможно, это очень простое исправление, но я не могу его получить. Я пытаюсь найти каталог и его подпапки для определенного типа файла c. Мой код в настоящее время возвращает значение true, если файл существует, но я пытаюсь также вернуть значение false на терминале. Ниже мой код

Get-ChildItem "$ScriptPath\$kit" -recurse -include "*.pem"| ForEach-Object {Test-Path $_}

Теперь он вернется как true на терминале для папки, в которой есть файл PEM. Но я бы хотел, чтобы он также возвращался как false на терминале для папки, в которой нет файла, так как я планирую использовать true и false для выполнения различных наборов кода.

Ответы [ 2 ]

3 голосов
/ 24 марта 2020

Это легко. Если $ target_files имеет значение, оно возвращает true, если не возвращает false.

$target_files = Get-ChildItem "$ScriptPath\$kit" -recurse -include "*.pem"

if($target_files){
    write-host "This returns true if there are files."
}
else{
    write-host "This returns false if there are no files."
}

Если у вас есть powershell 7, вы можете использовать тернарный оператор, однако не у всех нас есть powershell 7, поэтому здесь быстрее способ достичь этого также, если вы не в методе IF / ELSE. $ result вернет true или false в зависимости от того, есть файлы или нет.

$target_files = Get-ChildItem "$ScriptPath\$kit" -recurse -include "*.pem"
$result = (${true}, ${false})[-NOT $target_files]
1 голос
/ 24 марта 2020
$s = 'C:\Users\user\Desktop\Source'

foreach ($d in (Get-ChildItem -Recurse $s -Directory:$true)) {
    if ($d.GetFiles('*.pem')) { 
        $true 
    } else { 
        $false 
    }
}

Это должно помочь вам начать ... Я действительно sh В PowerShell была встроенная троичная конструкция ...

...