在Powershell(V5)类中使用.Net对象

这是为清晰起见而进行的主要编辑。看来我需要努力形成思想。以下是我遇到的确切代码。简要说明:我正在尝试设置一个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() | 

天涯尽头无女友
浏览 502回答 3
3回答

斯蒂芬大帝

为了补充 PetSerAl的有用答案:using assembly 应该是正确的解决方案,但是从Windows PowerShell v5.1 / PowerShell Core v6.1开始,尚未在解析时使用它,因为它需要额外的工作来避免在汇编时可能会不希望地执行任意代码已加载。该问题的实现已在本GitHub问题中得到了开绿灯,并且作为此问题的一部分正在跟踪必要的工作。
打开App,查看更多内容
随时随地看视频慕课网APP