標籤:frame app 資料 directory mda pac services console ionic
我們都知道,由於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]}mscorlibpowershell_iseSystem.Windows.FormsSystemSystem.DrawingSystem.Management.AutomationSystem.CoreMicrosoft.PowerShell.ISECommonMicrosoft.PowerShell.GPowerShellSystem.ComponentModel.CompositionMicrosoft.PowerShell.EditorWindowsBasePresentationFrameworkPresentationCoreSystem.XamlSystem.ConfigurationSystem.XmlSystem.Runtime.SerializationUIAutomationProviderAccessibilityMetadataViewProxies_b9dd7b79-8b1d-4f12-827c-e0f7bb8f29dbSystem.ManagementSystem.DirectoryServicesMicrosoft.Management.InfrastructurePresentationFramework.Aero2PresentationFramework-SystemXmlSystem.DataAnonymously Hosted DynamicMethods AssemblyMicrosoft.PowerShell.SecuritySystem.TransactionsSystem.NumericsMicrosoft.CSharpMicrosoft.PowerShell.GraphicalHostUIAutomationTypesMicrosoft.GeneratedCodePresentationFramework-SystemDataPresentationFramework-SystemCoreWindows.UISystem.Runtime.InteropServices.WindowsRuntimeMicrosoft.PowerShell.Commands.UtilitySystem.Configuration.InstallMicrosoft.PowerShell.ActivitiesSystem.ActivitiesMicrosoft.PowerShell.Workflow.ServiceCoreSystem.Activities.PresentationMicrosoft.PowerShell.Core.ActivitiesMicrosoft.PowerShell.Diagnostics.ActivitiesMicrosoft.PowerShell.Management.ActivitiesMicrosoft.PowerShell.Security.ActivitiesMicrosoft.PowerShell.Utility.ActivitiesMicrosoft.WSMan.Management.ActivitiesSystem.Runtime.DurableInstancingSystem.ServiceModel.InternalsMicrosoft.PowerShell.Commands.ManagementSystem.Xml.LinqPresentationFramework-SystemXmlLinqMicrosoft.PowerShell.Commands.DiagnosticsMicrosoft.PowerShell.ConsoleHostMicrosoft.WSMan.ManagementSystem.EnterpriseServicesSMDiagnosticsMicrosoft.PowerShell.ScheduledJobCarbonSystem.SecurityIonic.ZipSystem.WebMicrosoft.Web.AdministrationCarbon.IisSystem.ServiceProcessSystem.MessagingSystem.DirectoryServices.AccountManagementMicrosoft.Management.Infrastructure.NativeMicrosoft.Management.Infrastructure.UserFilteredExceptionHandlingMicrosoft.CertificateServices.PKIClient.CmdletsSystem.DynamicMicrosoft.VisualBasic.Activities.CompilerMicrosoft.VisualBasicMicrosoft.PowerShell.Cmdletization.GeneratedTypes?C??Windows?system32?WindowsPowerShell?v1.0?Modules?Storage?StorageScripts.psm1Microsoft.PowerShell.PackageManagementMicrosoft.PackageManagementornhs0lkMicrosoft.PackageManagement.MetaProvider.PowerShellMicrosoft.PackageManagement.MsuProviderMicrosoft.PackageManagement.CoreProvidersMicrosoft.PackageManagement.MsiProviderMicrosoft.PackageManagement.ArchiverProvidersMicrosoft.PackageManagement.NuGetProviderSystem.Net.HttpDynamicClassesPSEventHandler
PowerShell 使用.NetFramework