使用PowerShell将没有空格的变量和字符串文字连接到数组

时间:2018-03-21 00:45:51

标签: powershell

我正在尝试动态添加数组中的变量和字符串,但我没有获得预期的输出。

(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”

值未正确连接,并且未显示变量值。任何帮助。

1 个答案:

答案 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+'
}