Я пишу скрипт, в котором в одной части я хочу экспортировать некоторые настройки виртуальной машины 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. Это мой первый вопрос здесь. Надеюсь, что форматирование правильно и проблема описана понятно. Если нет, спросите.