初学者在这里,我有一个脚本,连接到多个文件服务器,并递归通过目录,寻找超过90天的文件。一切都很好。
我使用get -include和-exclude来过滤我想要报告的文件,但是我也需要过滤某些目录,而且get项目不能过滤目录,所以我将结果传递到Where,然后将$_.FullName属性与我想要排除的字符串进行比较。
我的问题是,我必须定期调整我要过滤的目录名,这取决于客户端将其文件命名为什么,并且管理脚本有点失控,因为我必须继续向get-childitem项目行添加-and ($_.FullName -notMatch "BACKUPS")条件。
以下是我的相关代码:
$Exclusions = ('*M.vbk','*W.vbk','*Y.vbk') $Files = Get-ChildItem $TargetFolder -include ('*.vib','*.vbk','*.vbm','*.vrb') -Exclude $Exclusions -Recurse -File | Where {($_.LastWriteTime -le $LastWrite) -and ($_.FullName -notMatch "BACKUPS") -and ($_.FullName -notMatch "Justin") -and ($_.FullName -notMatch "Monthly") -and ($_.FullName -notMatch "Template") -and ($_.FullName -notMatch "JIMMY") -and ($_.FullName -notMatch "ISAAC")}
我将$Exclusions变量设置为在Get中使用,这样我就可以根据需要调整一个变量。是否有一种方法可以将所有个人($.FullName -notMatch "JIMMY")条目压缩为只使用一个变量(如.($.FullName -notMatch $DirectoryListVariable)?
基本上,如果可能的话,我只需要让它更容易管理和改变。如果没有,我可以继续添加新的行,但我希望有一个更好的方法。
耽误您时间,实在对不起!
发布于 2022-05-11 13:34:49
使用 regex alternation ( | )匹配多种模式中的任何一种:
|
# Array of name substrings to exclude. $namesToExclude = 'BACKUPS', 'Monthly', 'Justin', 'Template', 'JIMMY', 'ISAAC' # , ...