我正在尝试构建一个Powershell脚本,可以过滤CSV文件中的信息。但是当我使用数组作为参数之一时,我遇到了问题。
当我导入CSV文件并手动输入时,此命令有效:
$data |
where-object {
(
$_.PackageAffected -eq "BslEqipWebPkg" -or
$_.PackageAffected -eq "BslIDealAdminPkg" -or
$_.PackageAffected -eq "ALL"
) -and (
$_.ENV -eq "PROD" -or $_.ENV -eq "ALL"
)
} |
select-object -property 'major step id','minor step id','PackageAffected',ENV,detail |
format-table -autosize
我正在尝试使用数组构建$_.PackageAffected
行。
到目前为止,这是代码(不起作用):
$packageList = "`$_.PackageAffected -eq `"" + $package[0] + "`" -or"
for ($element=1; $element -lt $package.count; $element++) {
$packageList = $packageList + " `$_.PackageAffected -eq `"" + $package[$element] + "`" -or"
}
$packageList = $packageList + " `$_.PackageAffected -eq `"ALL`""
$data |
where-object{($packageList) -and ($_.ENV -eq $environment -or $_.ENV -eq "ALL")} |
select-object -property 'major step id','minor step id','PackageAffected',ENV,detail |
format-table -autosize
$packageList
在我放置$packageList
的底部,它会在屏幕上显示我希望看到的字符串,即:
$_.PackageAffected -eq "pkgName1" -or $_.PackageAffected -eq "pkgName2" -or $_.PackageAffected -eq "ALL"
但是当我在运行表后查看该表时,PackageAffected
上没有过滤器。
我的怀疑是我将命令转换为字符串,当它运行时,Powershell不会将其识别为命令。
答案 0 :(得分:1)
您需要评估表达式。这可以使用Invoke-Expression来完成,例如
Invoke-Expression $packageList
在您的代码的上下文中,这将是:
$data |
where-object{(Invoke-Expression $packageList) -and ($_.ENV -eq $environment -or $_.ENV -eq "ALL")} |
select-object -property 'major step id','minor step id','PackageAffected',ENV,detail |
format-table -autosize