Назад | Перейти на главную страницу

Invoke-Command не может создать новые виртуальные машины

Я создал этот сценарий для удаленного создания нескольких виртуальных машин на сервере Hyper-V, однако, похоже, он не создает виртуальные машины. Я могу создать его непосредственно на сервере Hyper-V, используя указанные параметры при использовании Enter-PSSession, но не с помощью команды 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

Вы можете применить модификатор $ using. Это выглядело бы так$using:newvmcount что позволяет вам использовать переменную, определенную вне команды вызова

Подать заявление Как передавать аргументы для удаленных команд:

Либо объявите параметр (ы) в начале вашего блока сценария:

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