Powershell调用静态方法

Powershell将信息存储在对象中,每个对象都会有一个具体的类型,简单的文本会以System.String类型存储,日期会以System.DateTime类型存储。任何.NET对象都可以通过GetType()方法返回它的类型,该类型中有一个FullName属性,可以查看类型的完整名称。

PS C:Powershell> $date=get-date
PS C:Powershell> $date

2012年1月11日 15:19:49

PS C:Powershell> $date.GetType().FullName
System.DateTime

每一个类型都 可以包含一些静态的方法,可以通过方括号和类型名称得到类型对象本身,然后通过Get-Memeber命令查看该类型支持的所有静态方法。

PS C:Powershell> [System.DateTime] | Get-Member -static -memberType *Method

   TypeName: System.DateTime

Name            MemberType Definition
----            ---------- ----------
Compare         	Method     static int Compare(System.DateTime t1, System.Dat...
DaysInMonth	Method     static int DaysInMonth(int year, int month)
Equals		Method     static bool Equals(System.DateTime t1, System.Dat...
FromBinary	Method     static System.DateTime FromBinary(long dateData)
FromFileTime	Method     static System.DateTime FromFileTime(long fileTime)
FromFileTimeUtc 	Method     static System.DateTime FromFileTimeUtc(long fileT...
FromOADate      	Method     static System.DateTime FromOADate(double d)
IsLeapYear      	Method     static bool IsLeapYear(int year)
Parse           	Method     static System.DateTime Parse(string s), static Sy...
ParseExact      	Method     static System.DateTime ParseExact(string s, strin...
ReferenceEquales	Method     static bool ReferenceEquals(System.Object objA, S...
SpecifyKind     	Method     static System.DateTime SpecifyKind(System.DateTim...
TryParse        	Method     static bool TryParse(string s, System.DateTime&, ...
TryParseExact   	Method     static bool TryParseExact(string s, string format...

System.DateTime类支持的静态方法非常实用
使用Parse方法将一个字符串转换成DateTime类:

PS C:Powershell> [System.DateTime]::Parse("2012-10-13 23:42:55")

2012年10月13日 23:42:55

使用isLeapYear方法判断闰年

#1988年是闰年吗?
[System.DateTime]::IsLeapYear(1988)
#打印1988到2000年的所有闰年
for($year=1988;$year -le 2000;$year++)
{
    if( [System.DateTime]::IsLeapYear($year) ){$year}
}

True
1988
1992
1996
2000

另一个常用的类为Math类,在Math类中定义了很多实用的静态方法:
例如求绝对值,三角函数,取整:

PS C:Powershell> [Math]::Abs(-10.89)
10.89
PS C:Powershell> [Math]::Sin([Math]::PI/2)
1
PS C:Powershell> [Math]::Truncate(2012.7765)
2012

查看感兴趣的.NET类型

.NET支持成千上万的类型,有了这些类型可以做许多事情,幸运的是Powershell恰好支持这些类型。

对象类型转换

例如使用System.Net.IPAddress类将字符串IP地址转换成一个IPAddress实例

PS C:Powershell> [Net.IPAddress]‘10.3.129.71‘

Address           	: 1199637258
AddressFamily     	: InterNetwork
ScopeId           	:
IsIPv6Multicast   	: False
IsIPv6LinkLocal	: False
IsIPv6SiteLocal	: False
IPAddressToString	: 10.3.129.71
调用静态的方法

同样是System.Net.IPAddress类,根据IP地址查看主机名,8.8.8.8是谷歌的免费DNS服务器

PS C:Powershell> [system.Net.Dns]::GetHostByAddress(‘8.8.8.8‘) | fl

HostName    : google-public-dns-a.google.com
Aliases     : {}
AddressList : {8.8.8.8}
根据类型创建实例

下面演示通过$webClient类的DownloadFile方法下载文件:

PS C:Powershell> $localName="C:Powershellindex.php"
PS C:Powershell> Test-Path $localName
False
PS C:Powershell> $add="http://www.mossfly.com/index.php"
PS C:Powershell> $webClient=New-Object Net.WebClient
PS C:Powershell> $webClient.DownloadFile($add,$localName)
PS C:Powershell> Test-Path $localName
True

查看程序集

.NET中的类型定义在不同的程序集中,首先得知道当前程序已经加载了那些程序集。AppDomain类可以完成这个需求,因为它有一个静态成员CurrentDomain,CurrentDomain中有一个GetAssemblies()方法。

PS C:Powershell> [AppDomain]::CurrentDomain

FriendlyName           : DefaultDomain
Id                     : 1
ApplicationDescription :
BaseDirectory          : C:WINDOWSsystem32WindowsPowerShellv1.0
DynamicDirectory       :
RelativeSearchPath     :
SetupInformation       : System.AppDomainSetup
ShadowCopyFiles        : False

PS C:Powershell> [AppDomain]::CurrentDomain.GetAssemblies()

GAC    Version        Location
---    -------        --------
True   v2.0.50727     C:WindowsMicrosoft.NETFrameworkv2.0.50727mscorlib...
True   v2.0.50727     C:WindowsassemblyGAC_MSILMicrosoft.PowerShell.Cons...
True   v2.0.50727     C:WindowsassemblyGAC_MSILSystem2.0.0.0__b77a5c561...
True   v2.0.50727     C:WindowsassemblyGAC_MSILSystem.Management.Automat...
True   v2.0.50727     C:WindowsassemblyGAC_MSILMicrosoft.PowerShell.Comm...
True   v2.0.50727     C:WindowsassemblyGAC_MSILSystem.Core3.5.0.0__b77a...
True   v2.0.50727     C:WindowsassemblyGAC_MSILSystem.Configuration.Inst...
True   v2.0.50727     C:WindowsassemblyGAC_MSILMicrosoft.WSMan.Managemen...
True   v2.0.50727     C:WindowsassemblyGAC_32System.Transactions2.0.0.0...
True   v2.0.50727     C:WindowsassemblyGAC_MSILMicrosoft.PowerShell.Comm...
True   v2.0.50727     C:WindowsassemblyGAC_MSILMicrosoft.PowerShell.Comm...
True   v2.0.50727     C:WindowsassemblyGAC_MSILMicrosoft.PowerShell.Secu...
True   v2.0           C:WindowsassemblyGAC_MSILMicrosoft.PowerShell.Cons...
True   v2.0.50727     C:WindowsassemblyGAC_MSILSystem.Xml2.0.0.0__b77a5...
True   v2.0.50727     C:WindowsassemblyGAC_MSILSystem.Management2.0.0.0...
True   v2.0.50727     C:WindowsassemblyGAC_MSILSystem.DirectoryServices...
True   v2.0           C:WindowsassemblyGAC_MSILSystem.Management.Automat...
True   v2.0           C:WindowsassemblyGAC_MSILMicrosoft.WSMan.Managemen...
True   v2.0.50727     C:WindowsMicrosoft.NETFrameworkv2.0.50727mscorlib...
True   v2.0           C:WindowsassemblyGAC_MSILMicrosoft.PowerShell.Secu...
True   v2.0.50727     C:WindowsassemblyGAC_32System.Data2.0.0.0__b77a5c...
True   v2.0           C:WindowsassemblyGAC_MSILMicrosoft.PowerShell.Comm...
True   v2.0.50727     C:WindowsassemblyGAC_MSILSystem.Configuration2.0....
True   v2.0.50727     C:WindowsassemblyGAC_MSILMicrosoft.JScript8.0.0.0...
搜索指定类型

查询每个程序集中的方法可是使用GetExportedTypes() 方法。因为许多程序集中包含了大量的方法,在搜索时最好指定关键字。下面的代码演示如何查找包含”environment”关键字的类型。

PS C:Powershell>  [AppDomain]::CurrentDomain.GetAssemblies() | ForEach-Object { $_.GetExportedTypes() } | Where-Object { $_ -like $searchtext } | ForEach-Object { $_.FullName }

System.EnvironmentVariableTarget
System.Environment
System.Environment+SpecialFolder
System.Runtime.InteropServices.RuntimeEnvironment
System.Security.Permissions.EnvironmentPermissionAccess
System.Security.Permissions.EnvironmentPermission
System.Security.Permissions.EnvironmentPermissionAttribute
Microsoft.PowerShell.Commands.EnvironmentProvider

上面搜索到的类型有一个为:System.Environment类,System.Environment类可以做很多事情,可以先查看以下System.Environment类的所有静态方法。

PS C:Powershell> [Environment] | Get-Member -Static

   TypeName: System.Environment

Name                       	MemberType Definition
----                       		---------- ----------
Equals                     		Method     static bool Equals(System.Object objA,
Exit                       		Method     static System.Void Exit(int exitCode)
ExpandEnvironmentVariables	Method     static string ExpandEnvironmentVariabl
FailFast                   		Method     static System.Void FailFast(string mes
GetCommandLineArgs         	Method     static string[] GetCommandLineArgs()
GetEnvironmentVariable     	Method     static string GetEnvironmentVariable(s
GetEnvironmentVariables    	Method     static System.Collections.IDictionary
GetFolderPath              	Method     static string GetFolderPath(System.Env
GetLogicalDrives           	Method     static string[] GetLogicalDrives()
ReferenceEquals            	Method     static bool ReferenceEquals(System.Obj
SetEnvironmentVariable     	Method     static System.Void SetEnvironmentVaria
CommandLine                	Property   static System.String CommandLine {get;
CurrentDirectory           	Property   static System.String CurrentDirectory
ExitCode                   	Property   static System.Int32 ExitCode {get;set;
HasShutdownStarted         	Property   static System.Boolean HasShutdownStart
MachineName                	Property   static System.String MachineName {get;
NewLine                    	Property   static System.String NewLine {get;}
OSVersion                  	Property   static System.OperatingSystem OSVersio
ProcessorCount             	Property   static System.Int32 ProcessorCount {ge
StackTrace                 	Property   static System.String StackTrace {get;}
SystemDirectory            	Property   static System.String SystemDirectory {
TickCount                  	Property   static System.Int32 TickCount {get;}
UserDomainName             	Property   static System.String UserDomainName {g
UserInteractive            	Property   static System.Boolean UserInteractive
UserName                   	Property   static System.String UserName {get;}
Version                    		Property   static System.Version Version {get;}
WorkingSet                 	Property   static System.Int64 WorkingSet {get;}

例如System.Environment中的属性输出当前登录域、用户名、机器名:

PS C:Powershell> [Environment]::UserDomainName
MyHome
PS C:Powershell> [Environment]::UserName
xiaoming
PS C:Powershell> [Environment]::MachineName
LocalHost
搜索方法

下面的例子演示如何根据指定关键字”Address”,搜索方法。

[AppDomain]::CurrentDomain.GetAssemblies() | ForEach-Object { $_.GetExportedTypes() } | ForEach-Object { $_.getmembers() } | Where-Object { $_.isStatic} | Where-Object { $_ -like $searchtext } | ForEach-Object { "[{0}]::{1} --> {2}" -f  $_.declaringtype, $_.toString().SubString($_.toString().IndexOf(" ")+1), $_.ReturnType }

[System.Net.IPAddress]::Parse(System.String) --> System.Net.IPAddress
[System.Net.IPAddress]::IsLoopback(System.Net.IPAddress) --> System.Boolean
[System.Net.IPAddress]::Any -->
[System.Net.IPAddress]::Loopback -->
[System.Net.IPAddress]::Broadcast -->
[System.Net.IPAddress]::None -->
[System.Net.IPAddress]::IPv6Any -->
[System.Net.IPAddress]::IPv6Loopback -->
[System.Net.IPAddress]::IPv6None -->
[System.Net.Sockets.AddressFamily]::Unknown -->
[System.Net.Sockets.AddressFamily]::Unspecified -->
[System.Net.Sockets.AddressFamily]::Unix -->
[System.Net.Sockets.AddressFamily]::InterNetwork -->
[System.Net.Sockets.AddressFamily]::ImpLink -->
[System.Net.Sockets.AddressFamily]::Pup -->
[System.Net.Sockets.AddressFamily]::Chaos -->
[System.Net.Sockets.AddressFamily]::NS -->
[System.Net.Sockets.AddressFamily]::Ipx -->
[System.Net.Sockets.AddressFamily]::Iso -->
[System.Net.Sockets.AddressFamily]::Osi -->
[System.Net.Sockets.AddressFamily]::Ecma -->
[System.Net.Sockets.AddressFamily]::DataKit -->
[System.Net.Sockets.AddressFamily]::Ccitt -->
[System.Net.Sockets.AddressFamily]::Sna -->
[System.Net.Sockets.AddressFamily]::DecNet -->
[System.Net.Sockets.AddressFamily]::DataLink -->
[System.Net.Sockets.AddressFamily]::Lat -->
[System.Net.Sockets.AddressFamily]::HyperChannel -->
[System.Net.Sockets.AddressFamily]::AppleTalk -->
[System.Net.Sockets.AddressFamily]::NetBios -->
[System.Net.Sockets.AddressFamily]::VoiceView -->
[System.Net.Sockets.AddressFamily]::FireFox -->
[System.Net.Sockets.AddressFamily]::Banyan -->
[System.Net.Sockets.AddressFamily]::Atm -->
[System.Net.Sockets.AddressFamily]::InterNetworkV6 -->
[System.Net.Sockets.AddressFamily]::Cluster -->
[System.Net.Sockets.AddressFamily]::Ieee12844 -->
[System.Net.Sockets.AddressFamily]::Irda -->
[System.Net.Sockets.AddressFamily]::NetworkDesigners -->
[System.Net.Sockets.AddressFamily]::Max -->
[System.Net.Sockets.IOControlCode]::GetBroadcastAddress -->
[System.Net.Sockets.IOControlCode]::AddressListQuery -->
[System.Net.Sockets.IOControlCode]::AddressListChange -->
[System.Net.Sockets.IOControlCode]::AddressListSort -->
[System.Net.Sockets.SocketError]::DestinationAddressRequired -->
[System.Net.Sockets.SocketError]::AddressFamilyNotSupported -->
[System.Net.Sockets.SocketError]::AddressAlreadyInUse -->
[System.Net.Sockets.SocketError]::AddressNotAvailable -->
[System.Net.Sockets.SocketOptionName]::ReuseAddress -->
[System.Net.Sockets.SocketOptionName]::ExclusiveAddressUse -->
[System.Net.NetworkInformation.DuplicateAddressDetectionState]::Invalid -->
[System.Net.NetworkInformation.DuplicateAddressDetectionState]::Tentative -->
[System.Net.NetworkInformation.DuplicateAddressDetectionState]::Duplicate -->
[System.Net.NetworkInformation.DuplicateAddressDetectionState]::Deprecated -->
[System.Net.NetworkInformation.DuplicateAddressDetectionState]::Preferred -->
[System.Net.NetworkInformation.NetworkChange]::add_NetworkAddressChanged(System
.Net.NetworkInformation.NetworkAddressChangedEventHandler) --> System.Void
[System.Net.NetworkInformation.NetworkChange]::remove_NetworkAddressChanged(Sys
tem.Net.NetworkInformation.NetworkAddressChangedEventHandler) --> System.Void
[System.Net.NetworkInformation.PhysicalAddress]::Parse(System.String) --> Syste
m.Net.NetworkInformation.PhysicalAddress
[System.Net.NetworkInformation.PhysicalAddress]::None -->
[System.Net.NetworkInformation.SuffixOrigin]::LinkLayerAddress -->
[System.DirectoryServices.ActiveDirectory.ActiveDirectorySyntax]::PresentationA
ddress -->
[Microsoft.JScript.JSError]::DoesNotHaveAnAddress -->
[Microsoft.JScript.JSError]::WrongUseOfAddressOf -->

本文链接: http://www.pstips.net/powershell-using-static-methods.html

时间: 2024-08-10 19:18:29

Powershell调用静态方法的相关文章

C# 静态方法 静态属性 调用静态方法

C#的类中可以包含两种方法:静态方法和非静态方法. 使用了static 修饰符的方法为静态方法,反之则是非静态方法. 静态方法是一种 特殊的成员方法,它不属于类的某一个具体的实例,而是属于类本身.所以对静态方法不需要首先创建一个类的实例,而是采用类名.静态方法的格式 . 1.static方法是类中的一个成员方法,属于整个类,即不用创建任何对象也可以直接调用! static内部只能出现static变量和其他static方法!而且static方法中还不能使用this....等关键字..因为它是属于整

OGNL调用静态方法和属性

ognl的全名是 Object-Graph Navigation Language 表示的是图对象导航语言...我觉得它最厉害的一点是,通过"."来实现对象的导航...下面看他他的具体例子.我们应该就可以理解这个意思了 注意,在说例子以前先说三点 (1)我们这里的例子都是访问普通属性和静态方法..获取的也只是普通属性的值或者静态方法返回的值..所以这里一般是用<s:property value="ognl expression">来展示..其中,valu

El中调用静态方法

最近在项目中遇到需要调用静态方法的问题,形如: <c:forEach items="beans" var="bean"> <p>总数:${com.example.Tools.getTotal(bean.nums)}</p> </c:forEach> 不过上面的代码不能通过编译,只能寻求其他办法.经过查阅各种文档,找到了3种解决办法. 1,直接为Bean创建一个get方法 public double getTotal()

PowerShell 调用 Oracle.ManagedDataAccess.dll

 # # PowerShell调用 Oracle.ManagedDataAccess.dll # [System.Reflection.Assembly]::LoadFrom("C:\oracle\odp.net\managed\common\Oracle.ManagedDataAccess.dll") $connStr="userid=hr;password=hr;data source=xe" $conn=New-ObjectOracle.ManagedDa

使用PowerShell调用MTools分析MongoDB性能并发送邮件

使用PowerShell调用MTools分析MongoDB性能并发送邮件 问题描述: 在MongoDB日常运维中,经常需要查看连接数的趋势图.慢查询.Overflow语句.连接来源. 解决方案: 1. 将Windows备份机目录挂载到MongoDB本地目录下,将LogRotate切换后的最新一个日志拷贝到备份目录. 参考博文:<在Linux下挂载Windows系统共享目录> 2. 在Windows服务器上安装Mtools. 参考博文:<在64位Windows Server 2008 R2

php中static和self调用静态方法区别

由于看到框架里面经常使用static::method() 于是稍微了解下static和self的区别 废话少说,直接上代码 class Father { public function __construct() { $this->init(); self::test(); } public static function test() { echo "father test....<br>"; } public function init() { echo 'fat

Powershell 调用阿里云 云解析API 实现动态域名解析

由于阿里云解析API调用官方文档中没有Powershell的示例脚本,而API接口调用实际是通过向DNS API的服务端地址发送HTTP POST或GET请求,因此根据官方文档写了相关的函数用于查询域名解析.修改域名解析的状态.如果要增删域名解析,参考官方文档修改函数中的Action等参数即可. 参考的阿里API调用链接:https://help.aliyun.com/document_detail/29743.html?spm=a2c4g.11186623.6.614.35f94c7bRwGb

PowerShell调用jira rest api实现对个人提交bug数的统计

通过PowerShell的invoke-webrequest和net.client联合实现个人指定项目jira提交数的统计,代码如下: $content = @{username='用户名';password='密码'} $JSON = $content|convertto-JSON -Compress $jiraUri = "http://jira.ms.netease.com" $apiUri = $jiraUri+"/rest/auth/1/session"

powershell 调用winform dll

//1.加载dll,调用winform窗体,使用指定构造函数 param{ $filePath="" } [void][reflection.assembly]::LoadFile($filePath) $a=New-Object namespace.classctor(args) $a.DoSth()