我创建了这个脚本来在 Hyper-V 服务器上远程创建多个 VM,但是,它似乎无法创建 VM。我可以使用 Enter-PSSession 时使用给定的参数直接在 Hyper-V 服务器上创建一个,但不能通过invoke-command 来创建?(没有错误消息,它只是打印一个空白行并返回到提示符)
[CmdletBinding()]
param(
[Parameter(Mandatory=$true)][int]$newvmcount #require number of temp vm's to create
)
Invoke-Command -ScriptBlock {foreach ($vmnumber in $newvmcount){New-VM -Name "Windows10TMP$vmnumber" -BootDevice NetworkAdapter -Generation 2 -SwitchName LAN -MemoryStartupBytes 1gb -NewVHDPath "F:\hypervvirtualmachines\Windows10TMP$vmnumber.vhdx" -NewVHDSizeBytes 127gb -verbose}} -ComputerName hypervserver -ArgumentList $newvmcount
答案1
您可以应用 $using 范围修饰符。它看起来像这样,$using:newvmcount
它允许您使用在invoke命令之外定义的变量
答案2
申请如何传递远程命令的参数:
在脚本块的开头声明参数:
Invoke-Command -ScriptBlock {
param($newvmcount)
foreach ($vmnumber in $newvmcount) {
New-VM -Name "Windows10TMP$vmnumber" `
-BootDevice NetworkAdapter -Generation 2 `
-SwitchName LAN -MemoryStartupBytes 1gb `
-NewVHDPath "F:\hypervvirtualmachines\Windows10TMP$vmnumber.vhdx" `
-NewVHDSizeBytes 127gb -verbose
}
} -ComputerName hypervserver -ArgumentList $newvmcount
或使用自动变量 $args
。
顺便说一句,我无法理解这个foreach
循环,因为[int]$newvmcount
它似乎不是一个集合……