gpt4 book ai didi

powershell - 在 Powershell WHERE 子句中使用通配符数组

转载 作者:行者123 更新时间:2023-12-03 00:30:27 24 4
gpt4 key购买 nike

我正在尝试使以下 PowerShell 脚本更通用。我想传入一个排除数组而不是一个固定列表。除了下面的部分解决方案外,我无法弄清楚如何做到这一点:

原来的

这将获取路径中的所有文件,但通配 rune 件或文件夹列表除外:

        Get-ChildItem -Path  "$sitePath" -Recurse | `
where {!$_.PSIsContainer } | `
Select -ExpandProperty FullName | `
Where {$_ -notlike "$sitePath\Custom\*"} | `
Where {$_ -notlike "$sitePath\Download\*"} | `
Where {$_ -notlike "$sitePath\Temp\*"} | `
Where {$_ -notlike "$sitePath\Portal\*"} | `
Where {$_ -notlike "$sitePath\web.config*"} | `
SELECT $_

部分解决方案

这是我想出的最好的。它允许我创建一个名为 $excludeList 的通配符数组,但受到限制并且速度稍慢:
        $excludeList = @("$sitePath\Custom\*",
"$sitePath\Download\*",
"$sitePath\Portal\*",
"$sitePath\web.config*")

Get-ChildItem -Path "$sitePath" -Recurse | `
where {!$_.PSIsContainer } | `
Select -ExpandProperty FullName | `
Where {$_ -notlike $excludeList[0]} | `
Where {$_ -notlike $excludeList[1]} | `
Where {$_ -notlike $excludeList[2]} | `
Where {$_ -notlike $excludeList[3]} | `
Where {$_ -notlike $excludeList[4]} | `
Where {$_ -notlike $excludeList[5]} | `
Where {$_ -notlike $excludeList[6]} | `
Where {$_ -notlike $excludeList[7]} | `
Where {$_ -notlike $excludeList[8]} | `
Where {$_ -notlike $excludeList[9]} | `
Where {$_ -notlike $excludeList[10]} | `
SELECT $_

有没有更好的方法将数组传递给 where 子句?我发现的所有解决方案都只允许非通配符匹配。

希望有人能帮忙!

最佳答案

一种方法是遍历排除列表中的项目,并且仅在路径与任何排除项不匹配时才包含路径:

$excludeList = @("$sitePath\Custom\*",
"$sitePath\Download\*",
"$sitePath\Portal\*",
"$sitePath\web.config*")

Get-ChildItem -Path "$sitePath" -Recurse |
where { !$_.PSIsContainer } |
select -ExpandProperty FullName |
where { $path = $_; -not @($excludeList | ? { $path -like $_ }) }

如果您的所有排除项目都遵循相同的模式,您还可以通过将通用模式移动到 like 调用来简化排除列表:

$excludeList = @('Custom','Download','Portal','web.config')

Get-ChildItem -Path "$sitePath" -Recurse |
where { !$_.PSIsContainer } |
select -ExpandProperty FullName |
where { $path = $_; -not @($excludeList | ? { $path -like "$sitePath\$_*" }) }

关于powershell - 在 Powershell WHERE 子句中使用通配符数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17836170/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com