将第三方c#转换为PowerShell

本文关键字:PowerShell 转换 第三方 | 更新日期: 2023-09-27 18:01:23

使用最近从我们的硬件供应商那里获得的dll(用于在。net sdk中工作)。他们为所有的类、方法等提供了体面的文档。但是他们所有的例子都是用c#编写的。我不精通c#,正在努力将所有内容翻译成PowerShell。我取得了一些进展,但是遇到了瓶颈,正在寻求帮助。

下面是他们在c#中的例子:

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    namespace Vendor.Components.Flashlight.Sdk.Examples
    {
        class MyApp
        {
            public void Execute()
            {
                var device = new FlashlightController();
                device.Light(FlashlightColor.Green);
            }
        }
    }

到目前为止,我在PowerShell中是这样的(如果有更有说服力的方法,请随时告诉我):

    ## Vendor DLL path
    $assemblyFlashlight = 'C:'FlashlightDLL'Flashlight.Sdk.dll'
    ## Adding new assembly as a Type and listing members
    $typeFlashLight = Add-Type -Path $assemblyFlashlight -PassThru
    $typeFlashlight
    IsPublic IsSerial Name                                     BaseType
    -------- -------- ----                                     --------
    True     False    DotfuscatorAttribute                     System.Attribute
    True     False    BusylightController                      System.Object
    True     True     BusylightSoundClip                       System.Enum
    True     True     BusylightVolume                          System.Enum
    True     False    BusylightColor                           System.Object
    False    False    b                                        System.Object
    False    False    c                                        System.Object
    False    False    e                                        System.Object
    False    False    f                                        System.Object
    False    False    d                                        System.Object
    False    False    i                                        System.ValueType
    False    False    a                                        System.ValueType
    False    False    g                                        System.Object
    False    False    h                                        System.ValueType
    False    True     d                                        System.MulticastDelegate
    False    False    b                                        System.ValueType
    False    False    e                                        System.Object
    False    False    c                                        System.Object
    False    False    f                                        System.Object
    False    False    a                                        d
    False    False    a                                        System.Object

    ## Creating objects
    $objController = New-Object $typeFlashLight[1]
    $objSoundClip = New-Object $typeFlashLight[2]
    $objVolume = New-Object $typeFlashLight[3]
    $objColor = New-Object $typeFlashLight[4]

上面的PowerShell代码运行没有错误,我所有的$obj变量包含预期的成员:

    $objColor|Get-Member
    Name          MemberType Definition
    ----          ---------- ----------
    Equals        Method     bool Equals(System.Object obj)
    GetHashCode   Method     int GetHashCode()
    GetType       Method     type GetType()
    ToString      Method     string ToString()
    BlueRgbValue  Property   int BlueRgbValue {get;set;}
    GreenRgbValue Property   int GreenRgbValue {get;set;}
    RedRgbValue   Property   int RedRgbValue {get;set;}

所以我认为我在正确的轨道上。但我不知道如何翻译某些东西,比如"IsPublic"、"IsSerial",我对"Dotfuscator"的研究也没有给我任何我能消化的东西。

将第三方c#转换为PowerShell

IsPublic和IsSerial不是你想要实现的属性。它们是系统的属性。RuntimeType,其中有一个与。net中的每个类型相关联。试试这个:

$objColor.GetType()

至于将c#转换为PowerShell,请记住,并不总是有100%的映射。也就是说,在PowerShell中,您不能创建一个类或接口,更不用说从另一个类型派生的类型了。用CLI的话说,PowerShell更像是一种消费者语言,而不是生产者语言。大多数情况下,对于基本实用程序库来说,这不是问题。但是如果这个库是一个需要你继承基类或接口的框架,你就不能使用PowerShell了。