• PowerShell 使用.NetFramework


    我们都知道,由于PowerShell是基于.NETFramework建立的所以它能够具备访问.NET的能力,因为.NET提供了庞大的数据类库,所以我们可以很好的使用PowerShell去完成一些PowerShell本身还不能完成的功能。 

    首先在介绍如何调用.NET 类库前,我们先简单的说下.NET 的一些概念,Class,instances以及members是我们这里着重要说的。 

    你一定使用过Get-Process来查看进程的信息,其实这个命令所产生的对象类型就是System.Diagnostics.Process,也就是我们所说的Class类。 

    而instances实例就是这个类一些实际运行和发生的说创建的个体,比如我们有20个进程,这20个进程就是我们的实例。 

    关于member对象,就是某个类的成员,包含了一些属性,方法,以及它所支持的事件等等。 

    那么在PowerShell中是如何调用.NET类库的呢?我们以Get-Process为例,它的类其实就是System.Diagnostics.Process,我们在MSDN中搜索到System.Diagnostics.Process的相关信息如下:

     

     

    我们找到了一个方法GetProcess(),首先看下图,它是属于静态方法。

     

    既然是静态方法,我们就要以静态方法的方式在PowerShell中调用,在PowerShell中调用静态方法可以以这种形式执行[Class]::Method(),执行结果如下

     

    PS C:windowssystem32> [System.Diagnostics.Process]::GetProcesses() 
     
     
    Handles  NPM(K)    PM(K)      WS(K) VM(M)   CPU(s)     Id ProcessName 
    -------  ------    -----      ----- -----   ------     -- ----------- 
        106      11      980       4356    24     0.02   1156 svchost 
        669      25     9900      22044   141     0.78   1600 vmms 
         27       4     1464       2368    16     0.00   3492 cmd 
        430      23     4220      11820    93     0.58   1132 spoolsv 
        630      26    29844      37728   147    40.22   1912 svchost 
        212      15     6860       9560   108     0.17   1356 IpOverUsbSvc 
        397      15     2916       6788    36     1.66    700 svchost 
        272      32    63016     127188   244    29.88    788 dwm 
       1109     106    98952     166600   454   419.34   2968 BingDict 
        216      10     1572       6880    82     1.66   2204 rdpclip 
        400      34   109080     119712   647    13.06   3804 powershell 
        588      57    54416      54248   777     9.22   2892 mmc 
        208      11     1596       3864    64     0.53    420 csrss 
        106      10     3136       7448    41     0.05   1220 svchost 
        116       8     1212       5600    73     0.00   2732 ChsIME 
        981      19     4328      11212    40     1.48    592 lsass 
        393      46    98440     122912   789    15.84   3348 powershell_ise 
        422      37    12800      33856   205    11.05   3880 iexplore 
        484      34     8592      11484    59     0.56    764 svchost 
         80       8      768       3724    45     0.13    496 wininit 
        220       9     2336       6616    25     1.28    584 services 
         60       7     1324       5464    71     0.13   3500 conhost 
        159      12     2496       6792    41     0.19    840 msdtc 
       1528      50    18136      32384   167    21.89    936 svchost 
       1376      44    36876      66204   491     1.73   2576 lync 
        265      18     2020      40028   203    11.06    488 csrss 
        107       8     1260       5336    56     0.14   1196 Fuel.Service 
         57       7     3952      10268    63     5.70   2900 conhost 
         97       9     1360       5692    40     0.03   1460 sqlwriter 
        301      15     4336      13764   149     0.39    836 msseces

     

    调用静态方法十分简单,那么如果我们需要创建一个类的实例我们又应该怎么做呢?我们这次拿System.Diagnostics.Eventlog类为例,我们查看下这个类下的构造方法,这个方法接受2个参数,log名以及Machine机器名

    知道方法所需要调用的参数后,我们就可以用New-Object命令来创建一个.NET类以及实例了。

     

    New-Object -TypeName System.Diagnostics.EventLog -ArgumentList 'Security','Server1'

     

     

    于ArgumentList参数,它能够帮你传递参数给类的构造器,而.NET可以自动识别你所传递给构造器的参数数量和对应数据。

     

    最后,如果你想查看当前PowerShell支持加载的.NET集合可以使用如下代码:

     

    PS C:Windowssystem32> [appdomain]::CurrentDomain.GetAssemblies()|%{$_.fullname.split(",")[0]}
    mscorlib
    powershell_ise
    System.Windows.Forms
    System
    System.Drawing
    System.Management.Automation
    System.Core
    Microsoft.PowerShell.ISECommon
    Microsoft.PowerShell.GPowerShell
    System.ComponentModel.Composition
    Microsoft.PowerShell.Editor
    WindowsBase
    PresentationFramework
    PresentationCore
    System.Xaml
    System.Configuration
    System.Xml
    System.Runtime.Serialization
    UIAutomationProvider
    Accessibility
    MetadataViewProxies_b9dd7b79-8b1d-4f12-827c-e0f7bb8f29db
    System.Management
    System.DirectoryServices
    Microsoft.Management.Infrastructure
    PresentationFramework.Aero2
    PresentationFramework-SystemXml
    System.Data
    Anonymously Hosted DynamicMethods Assembly
    Microsoft.PowerShell.Security
    System.Transactions
    System.Numerics
    Microsoft.CSharp
    Microsoft.PowerShell.GraphicalHost
    UIAutomationTypes
    Microsoft.GeneratedCode
    PresentationFramework-SystemData
    PresentationFramework-SystemCore
    Windows.UI
    System.Runtime.InteropServices.WindowsRuntime
    Microsoft.PowerShell.Commands.Utility
    System.Configuration.Install
    Microsoft.PowerShell.Activities
    System.Activities
    Microsoft.PowerShell.Workflow.ServiceCore
    System.Activities.Presentation
    Microsoft.PowerShell.Core.Activities
    Microsoft.PowerShell.Diagnostics.Activities
    Microsoft.PowerShell.Management.Activities
    Microsoft.PowerShell.Security.Activities
    Microsoft.PowerShell.Utility.Activities
    Microsoft.WSMan.Management.Activities
    System.Runtime.DurableInstancing
    System.ServiceModel.Internals
    Microsoft.PowerShell.Commands.Management
    System.Xml.Linq
    PresentationFramework-SystemXmlLinq
    Microsoft.PowerShell.Commands.Diagnostics
    Microsoft.PowerShell.ConsoleHost
    Microsoft.WSMan.Management
    System.EnterpriseServices
    SMDiagnostics
    Microsoft.PowerShell.ScheduledJob
    Carbon
    System.Security
    Ionic.Zip
    System.Web
    Microsoft.Web.Administration
    Carbon.Iis
    System.ServiceProcess
    System.Messaging
    System.DirectoryServices.AccountManagement
    Microsoft.Management.Infrastructure.Native
    Microsoft.Management.Infrastructure.UserFilteredExceptionHandling
    Microsoft.CertificateServices.PKIClient.Cmdlets
    System.Dynamic
    Microsoft.VisualBasic.Activities.Compiler
    Microsoft.VisualBasic
    Microsoft.PowerShell.Cmdletization.GeneratedTypes
    ⧹C։⧹Windows⧹system32⧹WindowsPowerShell⧹v1.0⧹Modules⧹Storage⧹StorageScripts.psm1
    Microsoft.PowerShell.PackageManagement
    Microsoft.PackageManagement
    ornhs0lk
    Microsoft.PackageManagement.MetaProvider.PowerShell
    Microsoft.PackageManagement.MsuProvider
    Microsoft.PackageManagement.CoreProviders
    Microsoft.PackageManagement.MsiProvider
    Microsoft.PackageManagement.ArchiverProviders
    Microsoft.PackageManagement.NuGetProvider
    System.Net.Http
    DynamicClasses
    PSEventHandler

     

     

     

     

  • 相关阅读:
    第五次作业
    第四次作业
    软件工程(第二次作业)
    读软件工程这本书的感悟(第一次作业)
    第五次作业
    软件工程第四次作业
    软件工程第二次作业
    软件工程第二次作业
    什么样的书叫做好书,大学的教育到底培养的是什么?
    软件工程学习的问题:
  • 原文地址:https://www.cnblogs.com/lixiaonuohao/p/6956219.html
Copyright © 2020-2023  润新知