在PowerShell / PowerCLI中为字符串附加前缀

时间:2017-05-17 15:50:59

标签: regex powershell powercli

我正在尝试使用PowerCLI将特定后缀附加到VM列表,问题是我无法匹配字符串的开头并仅替换它,而是我得到的是追加我的该名称的每个字母都有前缀。

以下是代码:

$vApp="some-vapp"
$prefix = "SA-"

$VMlist = Get-VApp -Name $vApp | Get-VM

for ($i=0; $i -lt $VMlist.length; $i++) {
    $destVMName = $VMlist[$i].Name -replace $^.Name, $prefix
    $VMlist[$i] | set-vm -Name $destVMName -Confirm:$false -RunAsync:$true
}

问题在于正则表达式

$VMlist[$i].Name -replace $^.Name, $prefix

以下是输出的示例:

PS > $VMlist[0].Name
Shared_AD_W2012
PS > $VMlist[0].Name -replace $^.Name, $prefix
SA-SSA-hSA-aSA-rSA-eSA-dSA-_SA-ASA-DSA-_SA-WSA-2SA-0SA-1SA-2SA-

期望的结果将是:SA-Shared_AD_W2012

2 个答案:

答案 0 :(得分:1)

必须在这里使用正则表达式,只需使用格式字符串

"{0}{1}" -f $prefix, $VMlist[0].Name

答案 1 :(得分:1)

使用可扩展字符串:

$prefixedString = "$prefix$($VMlist[0].Name)"

或常规字符串连接:

$prefixedString = $prefix + $VMlist[0].Name