首页 > 解决方案 > PowerShell:如何将黑名单作为 Get-ChildItem -Exclude 标志的命令参数传递

问题描述

我正在尝试获取文件夹中的文件列表,同时使用脚本 files.ps1 排除某些文件:

Param(
    [string]$blacklist,
    [string]$build_path
 )

$filesToBuild = Get-ChildItem $build_path -Recurse -Exclude $blacklist

foreach ($file in $filesToBuild) {
    Write-Verbose -Verbose "File: $file"
}

如果我使用命令调用脚本

.\files.ps1 -build_path "C:\SomeFolder" -blacklist 'Dev*'

它将排除文件,Dev*但如果我传入文件列表,-blacklist 'Dev*, Microsoft*'它将不会忽略任何文件。我试过不带引号和不带引号。

但是,将其硬编码到脚本中是可行的:

$filesToBuild = Get-ChildItem $build_path -Recurse -Exclude Dev*, Microsoft*

-Exclude通过命令行为标志传递字符串列表的正确格式是什么?

标签: powershell

解决方案


从看Get-Help Get-ChildItem我看到-Exclude参数接受一个字符串数组,所以'Dev*, Microsoft*'你应该传递它而不是传递它'Dev*','Microsoft*'。您还必须更新参数以接受字符串数组。

Param(
    [string[]]$blacklist,
    [string]$build_path
 )

$filesToBuild = Get-ChildItem $build_path -Recurse -Exclude $blacklist

foreach ($file in $filesToBuild) {
    Write-Verbose -Verbose "File: $file"
}

.\files.ps1 -build_path "C:\SomeFolder" -blacklist 'Dev*','Microsoft*'

推荐阅读