我在var.ps1
中声明所有变量,如下所示:
$a = "aa"
$b = "bb"
在第二个脚本check.ps1
中,我尝试创建一个函数来检查传递的参数是否存在于var.ps1
这样的内容中:
check "$a" "$b" "$c"
我需要在我的函数中使用args。
你可以给我任何建议吗?答案 0 :(得分:1)
目前还不清楚你为什么要这样,我可能会以另一种方式解决它,但要回答你的问题,你可以试试下面的样本。
请记住对具有前导$
的值使用文字字符串(单引号),以避免将它们视为变量。如果没有,PowerShell将尝试用它的值替换变量(如果没有定义则没有任何内容),这意味着Check-Variables
将不会获得变量名称。以下解决方案同时接受'a'
和'$a'
。
Var.ps1
$a = "aa"
$b = "bb"
Check.ps1
#Dot-sourcing var.ps1 which is located in the same folder as Check.ps1
#Loads variables into the current scope so every function in Check.ps1 can access them
. "$PSScriptRoot\var.ps1"
function Check-Variables {
foreach ($name in $args) {
#Remove leading $
$trimmedname = $name -replace '^\$'
if(-not (Get-Variable -Name $trimmedname -ErrorAction SilentlyContinue)) {
Write-Host "ERROR: Variable `$$trimmedname is not defined"
}
}
}
Check-Variables '$a' "b" '$c'
演示:
PS> C:\Users\frode\Desktop\Check.ps1
ERROR: Variable $c is not defined