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 -->
您可能感興趣的文章:- Windows Powershell方法(對象能做什么)
- Windows Powershell屬性:描述對象是什么
- Windows Powershell對象=屬性+方法
- Windows Powershell創建對象