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
PowerShell 使用.NetFramework的更多相关文章
- Import-Module ServerManager Import-Module : 未能加载指定的模块“ServerManager”,因为在任何模块目录中都没有找到有效模块文件...(通过Setup Factory调用PowerShell的脚本)
操作系统: Windows server 2008 R2(64位) C:\Windows\System32\WindowsPowerShell\v1.0\Modules 下有ServerManager ...
- PowerShell为什么强大
PowerShell为什么强大 本文索引 [隐藏] 5.1举例介绍 1破天荒的方便 2面向对象 3绑上.NET这棵大树 4强大的兼容性 5基于平台的可扩展性 微软是一个很”低调”的公司,取名为微软,感 ...
- 《powershell 的版本号所引起的载入 FSharp 编译器问题》基本解决
<powershell 的版本号所引起的载入 FSharp 编译器问题>基本解决 1.FSharp.Core.dll.不光要 Add-Type,还要在编译中引用.可是,在 VS2012 的 ...
- Windows + Jenkins + .NetFramework + SVN 持续部署
Windows + Jenkins + .NetFramework + SVN 持续部署 环境准备 服务端环境 安装 Windows 服务器 1.阿里云购买临时服务器 阿里云:https://www. ...
- 在PowerShell中使用curl(Invoke-WebRequest)
前言 习惯了windows的界面模式就很难转去命令行,甚至以命令行发家的git也涌现出各种界面tool.然而命令行真的会比界面快的多,如果你是一个码农. situation:接到需求分析bug,需要访 ...
- Windows 7上执行Cake 报错原因是Powershell 版本问题
在Windows 7 SP1 电脑上执行Cake的的例子 http://cakebuild.net/docs/tutorials/getting-started ,运行./Build.ps1 报下面的 ...
- <译>通过PowerShell工具跨多台服务器执行SQL脚本
有时候,当我们并没有合适的第三方工具(大部分需要付费)去管理多台数据库服务器,那么如何做最省力.省心呢?!Powershell一个强大的工具,可以很方便帮到我们处理日常的数据库维护工作 .简单的几步搞 ...
- 利用PowerShell复制SQLServer账户的所有权限
问题 对于DBA或者其他运维人员来说授权一个账户的相同权限给另一个账户是一个很普通的任务.但是随着服务器.数据库.应用.使用人员地增加就变得很枯燥乏味又耗时费力的工作.那么有什么容易的办法来实现这个任 ...
- PowerShell 数组以及XML操作
PowerShell基础 PowerShell数组操作 将字符串拆分成数据的操作 cls #原始字符串 $str = "abc,def,ghi,mon" #数据定义 #$StrAr ...
随机推荐
- 第24课 可变参数模板(5)_DllHelper和lambda链式调用
1. dll帮助类 (1)dll的动态链接 ①传统的调用方式:先调用LoadLibrary来加载dll,再定义函数指针类型,接着调用GetProcAddress获取函数地址.然后通过函数指针调用函数, ...
- Oracle导出表数据与导入表数据dmp,以及导入导出时候常见错误
使用DOS 操作界面导出表数据,导入表数据(需要在数据库所在的服务器上边执行) exp UserName/Password@192.168.0.141/orcl file=d:\xtables.d ...
- JAVA性能优化:35个小细节让你提升java代码的运行效率
代码优化,一个很重要的课题.可能有些人觉得没用,一些细小的地方有什么好修改的,改与不改对于代码的运行效率有什么影响呢?这个问题我是这么考虑的,就像大海里面的鲸鱼一样,它吃一条小虾米有用吗?没用,但是, ...
- Linux 实时查看tomcat 日志--less命令
查看tomcat日志通常用 tail -n 或者 tail -f 或者grep 或者 vi cat等命令去查看异常信息,但是日志是在不停地刷屏,tail是动态的在变的,我们往往期望从日志最后一行往前 ...
- postgres on linux red hat 7 配置问题
记录几个重点的东西吧,具体的步骤 不上了,网上有很多, 1. redhat subscripiton需要订阅,没钱的需要去更换yum 源,也很简单,就是把自带的yum给删掉,重装其他的,大家可以百度 ...
- C#面向对象架构总结
优秀的程序从命名开始,命名规则1.类名方法名需要见名知意.2.类的字段统统首字母小写并且封装仅供本类使用,并提供属性供外界使用,属性名开头大写,如果名字与类名冲突,那么在前面加下划线. 面向对象的7大 ...
- JS游戏控制时间代码
var canvas = new HGAME.canvas();var testBox=document.getElementById('boxRender');testBox.appendChild ...
- Linux权限赋予远程连接MySQL
1.mysql -u root -p (root)用户名 2.mysql>GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY 'r ...
- linux 查找java程序、杀死、重启
查看java进程 ps -ef|grep java杀死进程 kill -9 4834 (进程号)启动 java -jar xxx.jar & (后台会一直运行)
- message [Failed to convert property value of type [java.lang.String] to required type [java.util.Date] for property
springmvc前台字符串,后台Date类型字段.时间强转失败 数值:18年12月31日 15:43:21 解决方法,给时间字段加注释 @DateTimeFormat(pattern = " ...