![](/img/trans.png)
[英]How to declare global variable using Set-Variable in PowerShell?
[英]Unable to set Description property of a variable using Set-Variable
我正在尝试编写一个函数,该函数可用来将变量标记为属于脚本,因此在创建它们时,可以标记它们以便以后进行标识(例如,用于调试)。
下面的代码不会失败或显示任何错误,但实际上也不会设置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变量,因为传入的参数名称已写入控制台。
但是,如果我检查变量,则说明属性仍未设置,例如
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}
看起来像一个范围界定问题。 您正在修改该函数本地的变量(外部变量的副本)。
如您所见,您可以使用-scope参数使用Set-Variable指定范围。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.