2017-07-03 2 views
0

Momentan habe ich ein seltsames Problem mit der PowerCLI Api von VMware. Ich schrieb eine Funktion, die ein VMware.VimAutomation.Vds.Impl.V1.VmwareVDPortgroupImpl Object als Parameter benötigt, aber jedes Mal, wenn ich ein solches Objekt zur Verfügung stelle, ist es fehlerhaft. Beim Debugging habe ich festgestellt, dass dieses Objekt nicht einmal einer anderen Variablen desselben Typs zugewiesen wurde.PowerShell kann den Typ nicht finden [VMware.VimAutomation.Vds.Impl.V1.VmwareVDPortgroupImpl]

PS vi:\IX-eShelter> [VMware.VimAutomation.Vds.Impl.V1.VmwareVDPortgroupImpl]$t = Get-VDPortgroup -Name "dv-test-vlan" | Get-Member 
Unable to find type [VMware.VimAutomation.Vds.Impl.V1.VmwareVDPortgroupImpl]. 
At line:1 char:1 
+ [VMware.VimAutomation.Vds.Impl.V1.VmwareVDPortgroupImpl]$t = Get-VDPo ... 
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 
    + CategoryInfo   : InvalidOperation: (VMware.VimAutom...VDPortgroupImpl:TypeName) [], RuntimeExc 
    eption 
    + FullyQualifiedErrorId : TypeNotFound 

Ich habe bereits versucht, die folgenden:

[System.Reflection.Assembly]::LoadWithPartialName("VMware.VimAutomation.Vds.Impl.V1.VmwareVDPortgroupImpl") 
Add-Type -AssemblyName "VMware.VimAutomation.Vds.Impl" 

Edit: Meine Funktion:

function New-VMDeployment {Param([Parameter(Mandatory=$true,ValueFromPipeline=$false,ValueFromPipelineByPropertyName=$true)][VMware.VimAutomation.Vds.Impl.V1.VmwareVDPortgroupImpl]$port) 
Write-Host $port; 
}; 

ich es so, dass ich anrufen:

$deployment = [PSCustomObject]@{ "port" = Get-VDPortgroup -Name "dv-test-vlan";}; 
$deployment | New-VMDeployment; 
+0

Bearbeiten Sie Ihre Frage Ihre Funktion enthalten und wie Sie es verwenden. –

Antwort

0

Sieht aus wie die Implementierungen on (Impl) type ist für verteilte Portgruppen unterbrochen. Sie sollten in der Lage sein, auf den Typ "Typ" umzuschalten und ihn betriebsbereit zu finden.

Ich würde vorschlagen, um die Funktion zu modifizieren, wie zu lesen:

function New-VMDeployment { 
    param(
     [Parameter(
      Position=0, 
      Mandatory=$true, 
      ValueFromPipeline=$false, 
      ValueFromPipelineByPropertyName=$true) 
     ] 
     [VMware.VimAutomation.Vds.Types.V1.VmwareVDPortgroup]$port 
    ) 

    Write-Host $port 
} 

Zusätzliche Informationen: https://blogs.vmware.com/PowerCLI/2016/04/powercli-best-practice-correct-use-strong-typing.html

+0

Ich verstehe nicht, warum VMware es so gemacht hat, aber danke. Das würde das Rätsel lösen. Normalerweise in Powershell, wenn Sie den genauen Typ nicht kennen, tun Sie einfach eine ".GetType(). FullName", aber hier ... –

Verwandte Themen