我正在尝试编写一个可用于将变量标记为属于我的脚本的函数,因此我创建它们时可以标记它们以便以后更容易识别(例如,用于调试)。
以下代码不会失败或显示任何错误,但实际上也没有设置Description属性:
Function Tagit([string[]]$params){foreach($param in $params){Set-Variable -name $param -Description "Script"}}
$filein="\\blah\blah"
[string[]]$RepsToRun = "IAM","OPS","ADMIN"
Tagit('filein','RepsToRun')
运行时,我知道它正确处理了params变量,因为传入的参数名称被写入控制台。
但是,如果我检查变量,仍然没有设置description属性,例如
get-variable filein|select *
PSPath : Microsoft.PowerShell.Core\Variable::filein
PSDrive : Variable
PSProvider : Microsoft.PowerShell.Core\Variable
PSIsContainer : False
Name : filein
Description :
Value : \\blah\blah
Visibility : Public
Module :
ModuleName :
Options : None
Attributes : {}
我在这里缺少/做错了什么想法?
修改 Mike Shepard指出了明显的......范围!
以下代码有效:
Function Tagit([string[]]$params){$params|foreach{Set-Variable -name $_ -Description "Script" -scope 1}}
$filein="\\blah\blah"
[string[]]$RepsToRun = "IAM","OPS","ADMIN"
Tagit('filein','RepsToRun')
Get-Variable filein|select Name,Description,Value
Get-Variable RepsToRun|select Name,Description,Value
并返回:
filein
RepsToRun
Name Description Value
---- ----------- -----
filein Script \\blah\blah
RepsToRun Script {IAM, OPS, ADMIN}
答案 0 :(得分:2)
看起来像是一个范围问题。您正在修改函数本地的变量(外部变量的副本)。
如您所见,您可以使用-scope参数使用Set-Variable指定范围。