这是为清晰起见而进行的主要编辑。看来我需要努力形成思想。以下是我遇到的确切代码。简要说明:我正在尝试设置一个Powershell类,该类将容纳不同类型的对象以便于访问。我在C#中已经做过很多次了,所以我认为这很简单。所需的类型是[System.Printing]和WMI对象。
最初,我曾尝试将类直接写入Powershell配置文件以方便使用,但是当我必须在其中对代码进行分类时,我的配置文件无法加载。说它找不到类型名称“ System.Printing.PrintServer”或任何其他明确列出的类型。失败之后,我将其移至它自己的特定模块,然后设置我的配置文件以在打开时导入该模块。但是,即使存储在其自己的模块中,如果我为任何属性明确列出.Net类型,整个模块也无法加载。不管我是否添加或导入了类型/ dll。特定的问题区域是这样的:[string] $ Name [System.Printing.PrintServer] $ Server [System.Printing.PrintQueue] $ Queue [System.Printing.PrintTicket] $ Ticket [System.Management.ManagementObject] $ Unit [bool ] $ IsDefault
将其设置为此时,所有“种类”都可以使用,但是然后我的所有属性都具有_Object类型,这没有帮助。[string] $ Name $ Server $ Queue $ Ticket $ Unit $ IsDefault
Add-Type -AssemblyName System.Printing
Add-Type -AssemblyName ReachFramework
Class PrinterObject
{
[string]$Name
[System.Printing.PrintServer]$Server
[System.Printing.PrintQueue]$Queue
[System.Printing.PrintTicket]$Ticket
[System.Management.ManagementObject]$Unit
[bool]$IsDefault
PrinterObject([string]$Name)
{
#Add-Type -AssemblyName System.Printing
#Add-Type -AssemblyName ReachFramework
$this.Server = New-Object System.Printing.PrintServer -ArgumentList [System.Printing.PrintSystemDesiredAccess]::AdministrateServer
$this.Queue = New-Object System.Printing.PrintQueue (($this.Server), ($this.Server.GetPrintQueues() |
Where-Object {$_.Name -match $Name} | Select-Object -ExpandProperty Name))
$this.Ticket = $this.Queue.UserPrintTicket
$this.Unit = Get-WmiObject -Query "SELECT * FROM Win32_Printer WHERE Name LIKE `"%$Name%`""
}
PrinterObject([string]$Name, [bool]$IsNetwork)
{
#Add-Type -AssemblyName System.Printing
#Add-Type -AssemblyName ReachFramework
if($IsNetwork -eq $true) {
$this.Server = New-Object System.Printing.PrintServer ("\\Server")
$this.Queue = New-Object System.Printing.PrintQueue (($this.Server), ($this.Server.GetPrintQueues() |
斯蒂芬大帝