Share via


使用靜態類別和方法

並非所有 .NET Framework 類別都可以使用 New-Object來建立。 例如,如果您嘗試使用 建立 System.EnvironmentSystem.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