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 не похоже на коллекцию...

Другие вопросы по тегам