无法使用Set-Variable设置变量的Description属性

时间:2018-04-19 14:23:27

标签: powershell variables

我正在尝试编写一个可用于将变量标记为属于我的脚本的函数,因此我创建它们时可以标记它们以便以后更容易识别(例如,用于调试)。

以下代码不会失败或显示任何错误,但实际上也没有设置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}

1 个答案:

答案 0 :(得分:2)

看起来像是一个范围问题。您正在修改函数本地的变量(外部变量的副本)。

如您所见,您可以使用-scope参数使用Set-Variable指定范围。