Windows Powershell调用静态方法_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 -->

时间: 2024-09-24 06:06:25

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

Windows Powershell 自动化变量_PowerShell

Powershell 自动化变量 是那些一旦打开Powershell就会自动加载的变量. 这些变量一般存放的内容包括 用户信息:例如用户的根目录$home 配置信息:例如powershell控制台的大小,颜色,背景等. 运行时信息:例如一个函数由谁调用,一个脚本运行的目录等. PS> $HOME C:\Users\test PS> $currentProcessID=$pid PS> $currentProcessID 5356 PS> Get-Process -Id $pid H

Windows Powershell使用管道_PowerShell

管道并不是什么新事物,以前的Cmd控制台也有重定向的命令,例如Dir | More可以将结果分屏显示. 传统的Cmd管道是基于文本的,但是Powershell是基于对象. PS> ls | Sort-Object -Descending Name | Select-Object Name,Length,LastWriteTime | ConvertTo-Html | Out-File ls.html PS> Get-Content .ls.html Name Length LastWriteT

Windows Powershell 环境变量_PowerShell

传统的控制台一般没有象Powershell这么高级的变量系统.它们都是依赖于机器本身的环境变量,进行操作 .环境变量对于powershell显得很重要,因为它涵盖了许多操作系统的细节信息.此外,powershell中的变量只存在于powershell内部的会话中,一旦powershell关闭,这些变量就会自生自灭.但是如果环境变量被更新了,它会继续保存在操作系统中,即使其它程序也可以调用它. 读取特殊的环境变量 通过环境变量读取Windows操作系统的安装路径,和默认应用程序的安装路径. PS>

Windows Powershell ForEach-Object 循环_PowerShell

对管道对象逐个处理 如果使用Get-WmiObject 获取系统中的服务,为了排版可能会也会使用Format-Table对结果进行表格排版. 复制代码 代码如下: PS C:Powershell> Get-WmiObject Win32_Service | Format-Table status,DisplayName -AutoSize status DisplayName ------ ----------- OK     Adobe Acrobat Update Service OK   

Windows Powershell 定义变量_PowerShell

变量可以临时保存数据,因此可以把数据保存在变量中,以便进一步操作. #定义变量 $a=10 $b=4 #计算变量 $result=$a*$b $msg="保存文本" #输出变量 $result $msg 40 保存文本 powershell 不需要显示地去声明,可以自动创建变量,只须记住变量的前缀为$. 创建好了变量后,可以通过变量名输出变量,也可以把变量名存在字符串中.但是有个例外单引号中的字符串不会识别和处理变量名. 选择变量名 在powershell中变量名均是以美元符"

Windows Powershell 创建数组_PowerShell

在Powershell中创建数组可以使用逗号. PS C:Powershell> $nums=2,0,1,2 PS C:Powershell> $nums 2 0 1 2 对于连续的数字数组可以使用一个更快捷的方法 PS C:Powershell> $nums=1..5 PS C:Powershell> $nums 1 2 3 4 5 数组的多态 象变量一样如果数组中元素的类型为弱类型,默认可以存储不同类型的值. PS C:Powershell> $array=1,"

Windows Powershell强类型数组_PowerShell

Powershell数组一般具有多态性,如果你不指定元素的具体类型,解释器会自动选择合适的类型存储每个元素.如果要统一限制所有元素的类型,可是使用类型名和一对方括号作为数组变量的类型.这样每当赋值时,会自动类型检查.如果目标数据类型不能转换成功,就会抛出一个异常. PS C:Powershell> [int[]] $nums=@() PS C:Powershell> $nums+=2012 PS C:Powershell> $nums+=12.3 PS C:Powershell>

Windows Powershell 定义函数_PowerShell

函数是自定义的Powershell代码,有三个原则: 简短:函数名简短,并且显而易见. 聚合:函数可以完成多个操作. 封装和扩展:将一批Powershell语句进行封装,实现全新的功能需求. 函数的结构由三部分组成:函数名,参数,函数体 复制代码 代码如下: Function FuncName (args[]) {       code; } 使用函数作为别名 假如Powershell不支持"cd.." 命令,你可以通过定义函数实现这个功能: 复制代码 代码如下: PS C:Power

Windows Powershell扩展类型系统_PowerShell

Powershell一个最吸引人的功能是它能够将任何对象转换成文本,我们已经使用过将对象属性以不同的版式转换成文本,并且输出.更令人惊奇的是Powershell会把最重要最能代表这个对象本质的信息输出.一个对象有很多属性,为什么它单单就输出那几个属性呢? 如果使用: 复制代码 代码如下: Dir | Format-Table * -wrap PSP PSP PSC PSD PSP PSI Bas Mod Nam Par Exi Roo Ful Ext Cre Cre Las La La La A