Переменная Powershell неправильно передается в Invoke-Command - PullRequest
1 голос
/ 08 марта 2019

Я пишу скрипт, в котором в одной части я хочу экспортировать некоторые настройки виртуальной машины SCVMM, а в другой - установить. Я должен запустить его с другой машины, на которой не установлен SCVMM, поэтому мне нужно вызвать наш VMM с Invoke-Command.

К сожалению, переменные, которые я использую в коде, ведут себя неожиданно (не хочу сказать неправильно, я предполагаю, что это по замыслу). Когда они используются в параметре, они не передают весь объект, который находится в них, а только Name.

$vm01 = Get-VM -Name VM01
$vm02 = Get-VM -Name VM02
$vm01name =$vm01.Name
$vm02name =$vm02.Name

$VMMparam = Invoke-Command –Computername VMM01 –ScriptBlock {
    $VMMvm01=Get-SCVirtualMachine -VMMServer "VMM01.pandora.corp" -Name $using:vm01name
    $vmcloud = $VMMvm01.Cloud
    $vmos = $VMMvm01.OperatingSystem
    $vmuserrole = $VMMvm01.UserRole
    $vmowner = $VMMvm01.Owner
    return $vmcloud,$vmos,$vmuserrole,$vmowner
    }

$VMMcloud = $VMMparam[0]
$VMMos = $VMMparam[1]
$VMMuserrole = $VMMparam[2]
$VMMowner = $VMMparam[3]

Invoke-Command -ComputerName VMM01 -ScriptBlock {
    if ($using:VMMcloud -eq $null){
    Set-SCVirtualMachine -vm $using:vm02name -OperatingSystem $using:VMMos.Name
    }
    else{
    Set-SCVirtualMachine -vm $using:vm02name -Cloud $using:VMMcloud -OperatingSystem $using:VMMos.Name -UserRole $using:VMMuserrole -Owner $using:VMMowner
    }
}

Это работает хорошо, пока не предполагается ввести объект Cloud в параметр -cloud. Это заканчивается по ошибке:

Cannot bind parameter 'Cloud'. Cannot convert the "CLOUD01" value of type "Deserialized.Microsoft.SystemCenter.VirtualMachineManager.Cloud" to type "Microsoft.SystemCenter.VirtualMachineManager.Cloud".
    + CategoryInfo          : InvalidArgument: (:) [Set-SCVirtualMachine], ParameterBindingException
    + FullyQualifiedErrorId : CannotConvertArgumentNoMessage,Microsoft.SystemCenter.VirtualMachineManager.Cmdlets.SetV
    MCmdlet
    + PSComputerName        : VMM01

Если я вызову только переменную $using:VMMcloud внутри Invoke-Command, она вернется правильно. Но когда он находится в параметре, возвращается только значение Name. Я попробовал это с аргументами вместо префиксных переменных, но с тем же выводом.

Вы можете мне помочь?

P.S. Это мой первый вопрос здесь. Надеюсь, что форматирование правильно и проблема описана понятно. Если нет, спросите.

...