Invoke-Command не может создать новые виртуальные машины
Я создал этот сценарий для удаленного создания нескольких виртуальных машин на сервере Hyper-V, однако, похоже, он не создает виртуальные машины. Я могу создать его непосредственно на сервере Hyper-V, используя заданные параметры при использовании Enter-PSSession, но не с помощью команды invoke? (сообщений об ошибках нет, он просто печатает пустую строку и возвращается к приглашению)
[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
2 ответа
Вы можете применить $ используя модификатор области видимости. Это будет выглядеть так$using:newvmcount
что позволит вам использовать переменную, определенную вне команды invoke
Применить Как передать аргументы для удаленных команд:
Либо объявите параметр (ы) в начале вашего скриптового блока:
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
не похоже на коллекцию...