尝试使用单个调用Get-ChildItem
并查找文件。然后在 Where-Object
子句中,使用 DirectoryName 进行过滤以排除输出中不想要的文件夹。
此外,您可以简化正则表达式并对其进行不区分大小写的使用。
尝试:
$include = '*.keystore', '*.cer', '*.crt', '*.pfx', '*.jks', '*.ks'
$exclude = '^C:\\(Windows|Program Files|Documents and Settings|Users)|\bBackup\b|\breleases?\b'
$trace = 'trace.txt'
Get-ChildItem -Path 'C:\','D:\' -File -Include $include -Recurse -Force -ErrorAction SilentlyContinue |
Where-Object { $_.DirectoryName -notmatch $exclude } |
Select-Object -ExpandProperty FullName |
Set-Content -Path $trace -PassThru
开关-PassThru
使结果也显示在屏幕上。
C:\
驱动器包含系统定义的联接点,即使作为管理员运行,您也无法访问。
根据这个答案,您可以更改代码:
$include = '*.keystore', '*.cer', '*.crt', '*.pfx', '*.jks', '*.ks'
$exclude = '^C:\\(Windows|Program Files|Documents and Settings|Users)|\bBackup\b|\breleases?\b'
$trace = 'trace.txt'
Get-ChildItem -Path 'C:\','D:\' -File -Include $include -Force -Recurse -Attributes !Hidden, !System, !ReparsePoint -ErrorAction SilentlyContinue |
Where-Object { $_.DirectoryName -notmatch $exclude } |
Select-Object -ExpandProperty FullName |
Set-Content -Path $trace -PassThru
根据您的评论,这里有一个关于如何在远程计算机上执行此操作并将结果文件保存在您的计算机上的示例。
为了演示,我已删除了
-Force
开关,因为您已经说明您不需要捕获隐藏或系统文件。
$remoteComputers = 'PC01', 'PC01'
$trace = 'trace.csv'
$result = Invoke-Command -ComputerName $remoteComputers -ScriptBlock {
$include = '*.keystore', '*.cer', '*.crt', '*.pfx', '*.jks', '*.ks'
$exclude = '^C:\\(Windows|Program Files|Documents and Settings|Users)|\bBackup\b|\breleases?\b'
Get-ChildItem -Path 'C:\','D:\' -File -Include $include -Recurse -ErrorAction SilentlyContinue |
Where-Object { $_.DirectoryName -notmatch $exclude } |
Select-Object @{Name = 'ComputerName'; Expression = {$env:COMPUTERNAME}}, FullName
}
$result | Set-Content -Path $trace -PassThru
您可能需要在Invoke-Command
命令中追加参数-Credential
并提供远程计算机的管理员凭据。
'D:\something\Backup' -match $exclude
返回$true
,就像预期的那样。 - mklement0[regex]
实例 - 而不是将 字符串 传递给-notmatch
- 您将创建一个区分大小写的正则表达式实例。相比之下,隐式使用字符串创建一个不区分大小写的实例,与 PowerShell 的基本不区分大小写行为一致;例如,'foo' -match 'FOO'
返回$true
。 - mklement0Get-ChildItem
调用中也添加-Recurse
,这样像backup
这样的文件夹就会在目录层次结构的每个级别上被排除。然而,Theo 的解决方案更简单、更高效。 - mklement0