更新变量值

时间:2016-03-17 12:54:08

标签: powershell

我有一个变量(输出)女巫值是另一个变量(版本)。

$VERSION="10"
$OUTPUT=$VERSION
write-host $OUTPUT

如果我稍后在脚本上更新版本变量,则输出仍为旧值

$VERSION="20"
write-host $OUTPUT

更新---------

就我而言,我觉得它有点棘手

$TODAY=get-date -format "yyyymmd"
$VERSION="10"
$LOGERROR=-join([Ref]$VERSION,"_",$TODAY)
write-host $LOGERROR
write-host $LOGERROR.value
$VERSION="20"
write-host $LOGERROR
write-host $LOGERROR.value

这可能是连接问题,因为我可以使用消息System.Management.Automation.PSReference获取输出但是如果我使用.value

1 个答案:

答案 0 :(得分:3)

我正在复制此网站的答案:http://powershell.com/cs/blogs/tips/archive/2009/04/27/passing-byref-vs-byval.aspx

通常,当您将变量分配给另一个变量时,会复制其内容。这是一个例子:

$a = "Hello"
$b = $a
$a = "Hello World"
$b # "Hello"

如您所见,$ b实际上是$ a的副本,因此当您更改$ a时,$ b不会更改。如果你愿意,你也可以只传递一个指向变量的指针,实际上有两个变量使用相同的内存来存储它的值。要传递指针,请像这样强制转换为[Ref]

$a = "Hello"
$b = [Ref]$a
$a = "Hello World"
$b # "Hello World"

这一次,更改$ a也会影响$ b,因为两者都使用相同的存储空间。但仔细观察结果后,您会注意到$ b实际上不再是字符串变量。它现在是一个PSReference对象,并且此对象具有value属性,为您提供实际的对象内容:

$b.Value

同样,要将$ a变量更改为$ b,您应该为$ b中的value属性分配一个新值:

$b.Value = "New Text"
$a # "New Text"