我有一个变量(输出)女巫值是另一个变量(版本)。
$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
答案 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"