在目录中搜索特定的文件类型,如果PowerShell中存在,则返回true或false

在目录中搜索特定的文件类型,如果PowerShell中存在,则返回true或false,powershell,filter,get-childitem,Powershell,Filter,Get Childitem,现在,这可能是一个非常简单的修复,但我似乎无法得到它。我试图搜索一个目录及其子文件夹中的特定文件类型。如果文件存在,我的代码当前将返回true,但我也试图让它在终端上返回false。下面是我的代码 Get-ChildItem "$ScriptPath\$kit" -recurse -include "*.pem"| ForEach-Object {Test-Path $_} 现在,对于包含PEM文件的文件夹,在终端上将返回为true。但是我想让它在终端上以false的形式返回没有该文件的文件夹

现在,这可能是一个非常简单的修复,但我似乎无法得到它。我试图搜索一个目录及其子文件夹中的特定文件类型。如果文件存在,我的代码当前将返回true,但我也试图让它在终端上返回false。下面是我的代码

Get-ChildItem "$ScriptPath\$kit" -recurse -include "*.pem"| ForEach-Object {Test-Path $_}
现在,对于包含PEM文件的文件夹,在终端上将返回为
true
。但是我想让它在终端上以
false
的形式返回没有该文件的文件夹,因为我计划使用
true
false
来执行不同的代码集

$s = 'C:\Users\user\Desktop\Source'

foreach ($d in (Get-ChildItem -Recurse $s -Directory:$true)) {
    if ($d.GetFiles('*.pem')) { 
        $true 
    } else { 
        $false 
    }
}
这应该让你开始。。。我真希望PowerShell有一个内置的三元结构


这应该让你开始。。。我真希望PowerShell有一个内置的三元结构…

这个很简单。如果$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方法,这里有一个更快、更短的实现方法$根据文件是否存在,结果将返回true或false

$target_files = Get-ChildItem "$ScriptPath\$kit" -recurse -include "*.pem"
$result = (${true}, ${false})[-NOT $target_files]

这个很简单。如果$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方法,这里有一个更快、更短的实现方法$根据文件是否存在,结果将返回true或false

$target_files = Get-ChildItem "$ScriptPath\$kit" -recurse -include "*.pem"
$result = (${true}, ${false})[-NOT $target_files]


等待这应该已经返回$false了。。。它从不返回false的原因是,您已经通过返回一个对象列表隐式测试了存在性,通过Get ChildItem,Windows提供了一个始终存在的对象列表。。。因此,您永远不会得到false,因为您传递它的所有对象都已知存在。对,我想我主要遇到的问题是,我可以让它返回
$true
$false
,但它会检查每个文件夹中的每个文件,并返回1个true和8个false。我更想知道文件夹中是否存在特定的文件扩展名,返回
$true
,如果不存在,返回
$false
。因此,最终它将显示1
$true
和1
$false
,因此为了澄清,您需要的是更多地了解哪些目录包含.PEM文件,并且您希望报告哪些目录中包含多少PEM文件?对,我想知道一个目录是否包含PEM文件。我最终要做的是;如果它有一个PEM文件,它将执行Y,如果它没有PEM文件,它将执行步骤X,然后执行Y。这应该让你开始。等等。。。这应该已经返回$false了。。。它从不返回false的原因是,您已经通过返回一个对象列表隐式测试了存在性,通过Get ChildItem,Windows提供了一个始终存在的对象列表。。。因此,您永远不会得到false,因为您传递它的所有对象都已知存在。对,我想我主要遇到的问题是,我可以让它返回
$true
$false
,但它会检查每个文件夹中的每个文件,并返回1个true和8个false。我更想知道文件夹中是否存在特定的文件扩展名,返回
$true
,如果不存在,返回
$false
。因此,最终它将显示1
$true
和1
$false
,因此为了澄清,您需要的是更多地了解哪些目录包含.PEM文件,并且您希望报告哪些目录中包含多少PEM文件?对,我想知道一个目录是否包含PEM文件。我最终要做的是;如果它有一个PEM文件,它将执行Y,如果它没有PEM文件,它将执行步骤X,然后执行Y。这应该让您开始。PowerShell 7有一个三元运算符:我有PS 7,所以我将研究三元运算符。我不太确定我是否会使用它,因为我仍然需要支持5.1。但是谢谢你的开始,我想我可以让它满足我的需要!三元实现:
@($($True),$($False))[!$False]
或由@shadow2020显示$()子表达式运算符可以包含任何表达式。我认为三元实现不值得。简单的
if..else
code没有问题。它可读性强,易于理解。与其说我想在这个例子中使用它,不如说我为自己的使用而感到惋惜。。。但值得注意的是,PowerShell 7有一个三元运算符:我有PS7,所以我将研究三元运算符。我不太确定我是否会使用它,因为我仍然需要支持5.1。但是谢谢你的开始,我想我可以让它满足我的需要!三元实现:
@($($True),$($False))[!$False]
或由@shadow2020显示$()子表达式运算符可以包含任何表达式。我认为三元实现不值得。简单的
if..else
code没有问题。它可读性强,易于理解。与其说我想在这个例子中使用它,不如说我为自己的使用而感到惋惜。。。但这是公平的。