2017-04-17 35 views
-3

我聲明所有變量var.ps1這樣的:

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

中,第二腳本check.ps1我試圖創建一個函數來檢查,如果傳遞的參數在var.ps1像存在這個:

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

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

您能否給我任何建議?

+0

這樣爲例,我需要有一個消息ERREUR ==> $ C不存在 –

+0

點源可以做到這一點,如果其他 –

+0

在該腳本中使用'get-Variable'。在函數內部傳遞變量名稱時也使用單引號,否則它們將展開它們的值。 – Vesper

回答

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