例如,我在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)
你不需要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)
这是它的工作原理。
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)