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:\windows\system32> [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:\Windows\system32> [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

 

 

 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM