我正在创建一个小的脚本,该脚本将列出计算机上的EXE文件。

$computername = get-content env:computername
get-childitem C: -recurse | ? {$_.fullname -notmatch 'C:\\Windows'} | where {$_.extension -eq ".exe"} | format-table fullname | Out-File "\\server\incomming\$computername.txt"

问题是-notmatch不接受更多语句。我可以复制粘贴? {$_.fullname -notmatch 'C:\\Windows'}并用于其他文件夹,例如Program Files(x86),Program Files等。但是我不想过多地夸大脚本。

有没有一种方法可以使用-notmatch语句排除大量文件夹?

最佳答案

您可以使用-and之类的逻辑运算符来处理更复杂的逻辑表达式。

Get-ChildItem C:\ -Recurse | Where-Object { ($_.FullName -notmatch "C:\\Windows") -and ($_.FullName -notmatch "C:\\Program Files") }

对于许多路径,我会在调用Get-ChildItem之前将它们添加到数组或哈希表中,并使用Where-Object检查数组或哈希表中是否存在管道文件对象路径。最终,您必须在某个位置列出路径,但不必在单个命令中列出。例如:
$excludedPaths = @("C:\Windows", "C:\Program Files");
Get-ChildItem C:\ -Recurse | Where-Object { $excludedPaths -notcontains $_.Directory }

08-26 23:29