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
时间: 2024-12-18 03:28:43

PowerShell 使用.NetFramework的相关文章

Share Point 2013使用Windows PowerShell 获取,删除UserProFile

在SharePoint 2013(2010)中我们对于用户配置文件的操作仅限于管理中心其中查看,新建,删除用户配置文件. 虽然我们可以通过如上方式查看,删除用户配置文件,但是这一对一的传统方式显得非常蹩脚虽然SharePoint 2013(2010)提供了非常全面的PowerShell命令但是对于UPS 服务提供命令 相当有限,远不能满足我们的使用需求我们今天带来 SharePoint 2013 的第三方Snapin 扩展其 原有功能其中包括两个命令Get-SPUserProfile该命令将通过

Import-Module ServerManager Import-Module : 未能加载指定的模块“ServerManager”,因为在任何模块目录中都没有找到有效模块文件...(通过Setup Factory调用PowerShell的脚本)

操作系统: Windows server 2008 R2(64位) C:\Windows\System32\WindowsPowerShell\v1.0\Modules 下有ServerManager的东东,可是还是找不到. 解决这个问题,需要2步: 1.Powershell中的执行策略(Execution Policy) 原因一个是因为Powershell默认的执行策略是Restricted,即可以运行单条命令,但不能运行脚本,包括格式和配置文件 (.ps1xml).模块脚本文件 (.psm1

《powershell 的版本所引起的加载 FSharp 编译器问题》基本解决

1.FSharp.Core.dll,不光要 Add-Type,还要在编译中引用.但是,在 VS2012 的环境下,就不需要引用,百思不得其解: 2.理顺了大部分系统引用的地址. Function Compiler-FSharp([string] $fSharpCode,[Array]$References) { # 判断 Powershell 的版本 $isAMD64= ($env:PROCESSOR_ARCHITECTURE).Contains( "AMD64" ) $is32= $

PowerShell 扩展工具第四波!

本次扩展我们带来命令用于管理您的文件/文件夹权限,以及帮助您迁移您的文件服务器 Get-FileAccessRules该命令将获取目标路径上的访问权限如下图 当然如果你需要获取该路径的文件/文件夹所有者 可以使用Get-ACL(该命令为系统命令) Remove-FileAccessRules该命令将删除指定位置的访问权限  我们通过 Get-FileAccessRules 获取特定的访问权限,通过管道将其传入进行删除 注意 当目标存在权限继承的时候 若要删除的访问权限 处于继承状态那么将无法删除

初步解决《powershell 的版本所引起的加载 FSharp 编译器问题》

首先,我们定义一个函数 Compiler-FSharp,有两个参数,一个是 F#  源代码,当然是必须的:另一个是必须的引用,这是可选的. 然后,调用这个函数. Function Compiler-FSharp  ([string] $fSharpCode,[Array]$References) { # 判断 Powershell 的版本 $is32= $PSHOME.Contains("SysWOW64") $isAMD64= ($env:PROCESSOR_ARCHITECTURE

PowerShell为什么强大

windows 操作系统 和office办公软件,如此之优秀,微软也没敢命名为PowerOS 和 PowerOffice,但是在Monad(PowerShell的前身)发布后的第二年(2006年),微软就直接就发布了Windows PowerShell 1.0,并且”大言不惭“地命名为PowerShell,这也有点太不淡定了. 今天我根据自己的体验来稍微总结一下为什么PowerShell如此之强大. 破天荒的方便 诸如存储计算中GB,MB,KB单位等:数组声明中的1..n和下标为-1的处理:还有

powershell入门

PowerShell中使用Get-Date获取日期时间并格式化输出 https://www.jb51.net/article/53282.htm 其他深入学习链接 https://www.jb51.net/article/63887.htmhttps://www.jb51.net/list/list_234_1.htm ## 在PowerShell中有一个Get-Date的cmdlet,使用它可以直接返回当前的日期和时间.使用-Format参数可以返回当前的年.月.日.时.分.秒等. yyyy

【Windows10 IoT开发系列】PowerShell的相关配置

原文:[Windows10 IoT开发系列]PowerShell的相关配置 可使用 Windows PowerShell 远程配置和管理任何 Windows 10 IoT 核心版设备.PowerShell 是基于任务的命令行 Shell 和脚本语言,专为进行系统管理而设计. 1.​启动 PowerShell (PS) 会话 注:若要使用装有Windows10 IoT Core设备启动PS会话,首先需要在主机电脑与设备之间创建信任关系. ​启动 Windows IoT 核心版设备后,与该设备相连的

【Windows10 IoT开发系列】Powershell命令行实用程序

原文:[Windows10 IoT开发系列]Powershell命令行实用程序 更新帐户密码: 强烈建议你更新默认的管理员帐户密码.若要更新帐户密码,你可以发出以下命令: net user Administrator [new password]​ (其中 [new password] 表示你选择的强密码). 创建本地用户帐户: 如果你想要授予其他人访问你的 Windows IoT Core 设备的权限,你可以通过在 net user [username] [password] /add​ 中键