如何使用$ args创建函数检查

时间:2017-04-17 08:45:21

标签: powershell

我在var.ps1中声明所有变量,如下所示:

$a = "aa"
$b = "bb"

在第二个脚本check.ps1中,我尝试创建一个函数来检查传递的参数是否存在于var.ps1这样的内容中:

check "$a" "$b" "$c"

我需要在我的函数中使用args。

你可以给我任何建议吗?

1 个答案:

答案 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