我正在尝试动态添加数组中的变量和字符串,但我没有获得预期的输出。
(1)我得到了env名字 (2)在数组中包含字符串和变量
代码如下。
$env = $env:COMPUTERNAME.Substring(0,2)
$servers = { $env+"server1.test.com",$env+"server2.test.com" }
$serverCount = $servers -split(",") | measure | % { $_.Count }
For ($i=0; $i -lt $serverCount; $i++)
{
$ServerName = $servers -split(',') -replace '\[\d+\]'
$server = $ServerName[$i]
Write-Host $server
}
输出我正在
$ ENV + “server1.test.com” $ ENV + “server2.test.com”
值未正确连接,并且未显示变量值。任何帮助。
答案 0 :(得分:1)
$servers = { $env+"server1.test.com",$env+"server2.test.com" }
这是一个scriptblock,而不是一个数组。 {}
就像一个函数,你必须运行它才能执行任何操作(例如评估$env
)。
当您使用-split(",")
将其强制转换为字符串时,您获得的是scriptblock中源代码的文本表示,包括变量名称。
作为@Olaf评论,创建名称数组的正确方法是
$servers = ($env + "server1.test.com"), ($env + "server2.test.com")
这可能是我写的方式:
$env = $env:COMPUTERNAME.Substring(0,2)
"server1.test.com", "server2.test.com" | foreach-object {
"$env$_" -replace '\d+'
}