我正在创建一个小的脚本,该脚本将列出计算机上的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 }