如何使用PowerShell使用C#DLL中存在的类的New-Object

Sha*_*haj 13 c# powershell

例如,我在C#中有一个班级

public class MyComputer : PSObject
{
    public string UserName
    {
        get { return userName; }
        set { userName = value; }
    }
    private string userName;

    public string DeviceName
    {
        get { return deviceName; }
        set { deviceName = value; }
    }
    public string deviceName;
}
Run Code Online (Sandbox Code Playgroud)

它来自PSObject.我正在使用import-module在powershell中加载具有此代码的DLL.然后我尝试在PowerShell中创建MyComputer类的新对象.

PS C:> $ MyCompObj = New-Object MyComputer

但它会抛出一个错误,说明确保加载包含此类型的程序集.注意:我能够成功调用DLL中存在的Cmdlet.

我不确定这是继续创建新对象的正确方法.请更正我做这项工作.

dev*_*vio 20

首先,确保使用加载程序集

[System.Reflection.Assembly]::LoadFrom("C:\path-to\my\assembly.dll")
Run Code Online (Sandbox Code Playgroud)

接下来,使用完全限定的类名

$MyCompObj = New-Object My.Assembly.MyComputer
Run Code Online (Sandbox Code Playgroud)

  • 您还可以使用 Add-Type -path "c:\path-to\my\ assembly.dll" (2认同)

ste*_*tej 5

你不需要PSObject作为基础.简单地宣布没有基础的课程.

Add-Type -typedef @"
public class MyComputer
{
    public string UserName
    {
        get { return _userName; }
        set { _userName = value; }
    }
    string _userName;

    public string DeviceName
    {
        get { return _deviceName; }
        set { _deviceName = value; }
    }
    string _deviceName;
}
"@

New-Object MyComputer | fl *
Run Code Online (Sandbox Code Playgroud)

稍后当您使用该对象时,PowerShell会自动将其包装到PsObject实例中.

[3]: $a = New-Object MyComputer
[4]: $a -is [psobject]
True
Run Code Online (Sandbox Code Playgroud)


Sha*_*haj 5

这是它的工作原理。

public class MyComputer
{
    public string UserName
    {
        get { return userName; }
        set { userName = value; }
    }
    private string userName;

    public string DeviceName
    {
        get { return deviceName; }
        set { deviceName = value; }
    }

    public string deviceName;
}

//PS C:\> $object = New-Object Namespace.ClassName
PS C:\> $object = New-Object Namespace.MyComputer
PS C:\> $object.UserName = "Shaj"
PS C:\> $object.DeviceName = "PowerShell"
Run Code Online (Sandbox Code Playgroud)