2016-11-24 1 views
2

Я пишу сценарий с использованием PowerShell, который использует настраиваемый объект. Но сложной частью является то, что этот пользовательский объект использует другой пользовательский объект как свойство. Я пытаюсь сделать это с синтаксисом C#.Ошибка добавления второго типа, который зависит от первого

Когда я пытаюсь запустить скрипт я получаю эту ошибку:

The type or namespace name 'Disk' could not be found (are you missing a using directive or an assembly reference?) 
c:\Users\trumpe\AppData\Local\Temp\orydsmyw.0.cs(1) : public class VirtualMachine{ 
c:\Users\trumpe\AppData\Local\Temp\orydsmyw.0.cs(2) : >>>  public Disk Disks; 
c:\Users\trumpe\AppData\Local\Temp\orydsmyw.0.cs(3) :  public string IPAddress; 

Есть ли способ сделать это вообще в PowerShell? Вот мой код класса в одном файле:

Add-Type -Language CSharp @" 
public class Disk{ 
public string VirtualMachineDiskID; 
public string StorageID; 
public string StorageIdentifier; 
public string DiskFileName; 
public string StorageProfileID; 
public int CapacityKB; 
public int ControllerKey; 
public int DeviceKey; 
public int DiskMode; 
public int UnitNumber; 
} 
"@; 



Add-Type -Language CSharp @" 
public class VirtualMachine{ 
public Disk Disks; #<=== This part stops working because it cannot find the type Disk 
public string IPAddress; 
public string Name; 
public string OSFullName; 
public string PowerState; 
public string ResourcePoolID; 
public string TenantID; 
public string UniqueId; 
public string VirtualMachineID; 
public int NumCPU; 
public int NumNic; 
public int StorageCapacityAllocatedMB; 
public int RamAllocatedMB; 
public bool IsRemoved; 
public bool IsTemplate; 
} 
"@; 

Я не ограничен синтаксисом C#, поэтому все решения приветствуются.

+0

FYI Я удалил тег в теле вопроса, которые были добавлены позже. http://meta.stackoverflow.com/questions/280315/tags-in-question-bodies – Matt

+0

@Matt Хорошо, я больше их не добавлю. –

+1

Я _think_ Я нашел то, что вы ищете, и это объясняет, почему вы не работали. Ответ на занятия здесь также поможет вам. – Matt

ответ

2

вводит классы:

Class Disk{ 

    [string] $VirtualMachineDiskID; 
    [string] $StorageID; 
    [string] $StorageIdentifier; 
    [string] $DiskFileName; 
    [string] $StorageProfileID; 
    [int] $CapacityKB; 
    [int] $ControllerKey; 
    [int] $DeviceKey; 
    [int] $DiskMode; 
    [int] $UnitNumber; 

} 

Class VirtualMachine { 
    [Disk] $Disks; 
    [string] $IPAddress; 
    [string] $Name; 
    [string] $OSFullName; 
    [string] $PowerState; 
    [string] $ResourcePoolID; 
    [string] $TenantID; 
    [string] $UniqueId; 
    [string] $VirtualMachineID; 
    [int] $NumCPU; 
    [int] $NumNic; 
    [int] $StorageCapacityAllocatedMB; 
    [int] $RamAllocatedMB; 
    [bool] $IsRemoved; 
    [bool] $IsTemplate; 
} 

$disk = New-Object Disk 
$disk.StorageID = 4711 

$vm = New-Object VirtualMachine 
$vm.Disks = $disk