使用靜態類別和方法
並非所有 .NET Framework 類別都可以使用 New-Object
來建立。 例如,如果您嘗試使用 建立 System.Environment 或 System.Math 物件 New-Object
,您將會收到下列錯誤訊息:
New-Object System.Environment
New-Object : Constructor not found. Cannot find an appropriate constructor for
type System.Environment.
At line:1 char:11
+ New-Object <<<< System.Environment
New-Object System.Math
New-Object : Constructor not found. Cannot find an appropriate constructor for
type System.Math.
At line:1 char:11
+ New-Object <<<< System.Math
由於無法從這些類別建立新的物件,因此會發生這些錯誤。 這些類別是不會變更狀態之方法和屬性的參考連結庫。 您不需要建立它們,只需使用它們即可。 這類類別和方法稱為 靜態類別 ,因為它們不是建立、終結或變更。 為了清楚說明,我們將提供使用靜態類別的範例。
使用 System.Environment 取得環境數據
通常,在 Windows PowerShell 中使用物件的第一個步驟是使用 Get-Member 來找出其包含的成員。 使用靜態類別時,程式會稍有不同,因為實際的類別不是物件。
參考靜態 System.Environment 類別
您可以使用方括弧圍繞類別名稱來參考靜態類別。 例如,您可以在方括弧內輸入名稱,以 參照 System.Environment 。 這麼做會顯示一些泛型類型資訊:
[System.Environment]
IsPublic IsSerial Name BaseType
-------- -------- ---- --------
True False Environment System.Object
注意
如先前所述,Windows PowerShell 會自動在 'System' 前面加上 。 當您使用 New-Object
時,輸入名稱。 使用括弧類型名稱時,會發生相同的情況,因此您可以將 [System.Environment] 指定為 [Environment]。
System.Environment 類別包含目前進程工作環境的一般資訊,也就是powershell.exe
在 Windows PowerShell 內運作時。
如果您嘗試輸入 [System.Environment] 來檢視此類別的詳細數據 |Get-Member,對象類型會回報為 System.RuntimeType ,而不是 System.Environment:
[System.Environment] | Get-Member
TypeName: System.RuntimeType
若要使用 Get-Member 檢視靜態成員,請指定 Static 參數:
[System.Environment] | Get-Member -Static
TypeName: System.Environment
Name MemberType Definition
---- ---------- ----------
Equals Method static System.Boolean Equals(Object ob...
Exit Method static System.Void Exit(Int32 exitCode)
...
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 {get;}
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;}
TickCount ExitCode
我們現在可以從 System.Environment 選取要檢視的屬性。
顯示 System.Environment 的靜態屬性
System.Environment 的屬性也是靜態的,而且必須以不同於一般屬性的方式指定。 ::
我們用來向 Windows PowerShell 指出我們想要使用靜態方法或屬性。 若要查看用來啟動 Windows PowerShell 的命令,我們輸入下列命令來 檢查 CommandLine 屬性:
[System.Environment]::Commandline
"C:\Program Files\Windows PowerShell\v1.0\powershell.exe"
若要檢查作業系統版本,請輸入下列命令來顯示 OSVersion 屬性:
[System.Environment]::OSVersion
Platform ServicePack Version VersionString
-------- ----------- ------- -------------
Win32NT Service Pack 2 5.1.2600.131072 Microsoft Windows...
我們可以藉由顯示 HasShutdownStarted 屬性來檢查電腦是否正在關機:
[System.Environment]::HasShutdownStarted
False
使用 System.Math 執行數學運算
System.Math 靜態類別對於執行某些數學運算很有用。 類別包含數個實用的方法,我們可以使用 來顯示 Get-Member
。
注意
System.Math 有數個具有相同名稱的方法,但會以參數的類型來區分。
輸入下列命令以列出 System.Math 類別的方法。
[System.Math] | Get-Member -Static -MemberType Methods
TypeName: System.Math
Name MemberType Definition
---- ---------- ----------
Abs Method static System.Single Abs(Single value), static Sy...
Acos Method static System.Double Acos(Double d)
Asin Method static System.Double Asin(Double d)
Atan Method static System.Double Atan(Double d)
Atan2 Method static System.Double Atan2(Double y, Double x)
BigMul Method static System.Int64 BigMul(Int32 a, Int32 b)
Ceiling Method static System.Double Ceiling(Double a), static Sy...
Cos Method static System.Double Cos(Double d)
Cosh Method static System.Double Cosh(Double value)
DivRem Method static System.Int32 DivRem(Int32 a, Int32 b, Int3...
Equals Method static System.Boolean Equals(Object objA, Object ...
Exp Method static System.Double Exp(Double d)
Floor Method static System.Double Floor(Double d), static Syst...
IEEERemainder Method static System.Double IEEERemainder(Double x, Doub...
Log Method static System.Double Log(Double d), static System...
Log10 Method static System.Double Log10(Double d)
Max Method static System.SByte Max(SByte val1, SByte val2), ...
Min Method static System.SByte Min(SByte val1, SByte val2), ...
Pow Method static System.Double Pow(Double x, Double y)
ReferenceEquals Method static System.Boolean ReferenceEquals(Object objA...
Round Method static System.Double Round(Double a), static Syst...
Sign Method static System.Int32 Sign(SByte value), static Sys...
Sin Method static System.Double Sin(Double a)
Sinh Method static System.Double Sinh(Double value)
Sqrt Method static System.Double Sqrt(Double d)
Tan Method static System.Double Tan(Double a)
Tanh Method static System.Double Tanh(Double value)
Truncate Method static System.Decimal Truncate(Decimal d), static...
這會顯示數個數學方法。 以下是示範一些常見方法運作方式的命令清單:
[System.Math]::Sqrt(9)
3
[System.Math]::Pow(2,3)
8
[System.Math]::Floor(3.3)
3
[System.Math]::Floor(-3.3)
-4
[System.Math]::Ceiling(3.3)
4
[System.Math]::Ceiling(-3.3)
-3
[System.Math]::Max(2,7)
7
[System.Math]::Min(2,7)
2
[System.Math]::Truncate(9.3)
9
[System.Math]::Truncate(-9.3)
-9