可能是周五下午 5 点左右,但我在学习如何在 PowerShell 中使用
[ref]
类型变量时遇到了困难。
以下打印“NotTest”
[ref]$refString = 'Test'
$string = $refString
$refString.Value = 'NotTest'
$string
令我困惑的是,以下内容不会打印 $a、$b 或 $c 的新值:
[ref]$a = 'test'
[ref]$b = 'foo'
[ref]$c = 'bar'
$arguments= "?arg1=" + $a.value + "&arg2=" + $b.value + "&arg3=" + $c.value
$a.Value = 'no'
$b.Value = 'change'
$c.Value = 'Happens'
$arguments
有没有办法正确引用新值?
在第一个示例中
$string
与 $refString
(可变类型)持有相同的引用,而在第二个示例中,您通过将字符串与 values (也是不可变字符串)连接来构造字符串(不可变类型)您的 PSReference
,这意味着 $arguments
是不可变的。更新 PSReference
的值不会影响构造的字符串。
UriBuilder
和 HttpUtility.ParseQueryString
就是您所追求的:
if (-not $IsCoreCLR) {
Add-Type -AssemblyName System.Web
}
$builder = [System.UriBuilder]::new('myurlhere')
$query = [System.Web.HttpUtility]::ParseQueryString('')
$query['args1'] = 'test'
$query['args2'] = 'foo'
$query['args3'] = 'bar'
$builder.Query = $query.ToString()
$builder.Uri.ToString()
# Outputs: http://myurlhere/?args1=test&args2=foo&args3=bar
$query['args1'] = 'changes'
$query['args2'] = 'happen'
$query['args3'] = 'here'
$builder.Query = $query.ToString()
$builder.Uri.ToString()
# Outputs: http://myurlhere/?args1=changes&args2=happen&args3=here