不是所有的 .NET Framework 类都可使用 New-Object 进行创建。例如,如果尝试使用 New-Object 创建 System.Environment 或 System.Math 对象,则将收到以下错误消息:
PS> New-Object System.Environment<o:p></o:p> New-Object :找不到构造函数。无法找到适合类型 System.Environment 的构造函数。<o:p></o:p> 所在行:1 字符:11 <o:p></o:p> + New-Object <<<< System.Environment<o:p></o:p> PS> New-Object System.Math<o:p></o:p> New-Object :找不到构造函数。无法找到适合类型 System.Math 的构造函数。<o:p></o:p> 所在行:1 字符:11 <o:p></o:p> + New-Object <<<< System.Math<o:p></o:p> |
<o:p> </o:p>
之所以出现这些错误是因为无法从这些类中创建新的对象。这些类是不能更改状态的方法和属性的引用库。您无法创建这些类,只能使用他们。由于不能创建、销毁或更改这些类和方法,因此将这些类和方法称为静态类。为了清楚了解此部分内容,我们将提供使用静态类的示例。
通常,在 Windows PowerShell 中处理对象的第一步为,使用 Get-Member 显示该对象包含的成员。使用静态类,过程可能稍有差异,这是因为实际类不是对象。
通过使用方括号括住类名称,可以引用静态类。例如,可以在方括号中键入名称来引用 System.Environment。从而,就可显示一些泛型类型的信息:
PS> [System.Environment]<o:p></o:p> <o:p> </o:p> IsPublic IsSerial Name BaseType<o:p></o:p> -------- -------- ---- --------<o:p></o:p> True False Environment System.Object<o:p></o:p> |
<o:p> </o:p>
<!---->请注意: <o:p></o:p>
如上所述,在使用 New-Object 时,Windows PowerShell 将自动加上‘System.’以便于键入名称。在使用方括号类型名称时亦即如此,因此,可以将 [System.Environment] 指定为 [Environment]。<o:p></o:p>
在 Windows PowerShell 中工作时,System.Environment 类可包含有关当前进程的工作环境(powershell.exe)的常规信息。
若要通过键入 [System.Environment] | Get-Member 来查看此类的详细信息,则对象类型将报告为 System.RuntimeType,而不是 System.Environment:
PS> [System.Environment] | Get-Member<o:p></o:p> <o:p> </o:p> TypeName:System.RuntimeType<o:p></o:p> |
<o:p> </o:p>
若要使用 Get-Member 查看静态成员,请指定 Static 参数:
PS> [System.Environment] | Get-Member -Static<o:p></o:p> <o:p> </o:p> <o:p> </o:p> TypeName:System.Environment<o:p></o:p> <o:p> </o:p> Name MemberType Definition<o:p></o:p> ---- ---------- ----------<o:p></o:p> Equals Method static System.Boolean Equals(Object ob...<o:p></o:p> Exit Method static System.Void Exit(Int32 exitCode)<o:p></o:p> ...<o:p></o:p> CommandLine Property static System.String CommandLine {get;}<o:p></o:p> CurrentDirectory Property static System.String CurrentDirectory ...<o:p></o:p> ExitCode Property static System.Int32 ExitCode {get;set;}<o:p></o:p> HasShutdownStarted Property static System.Boolean HasShutdownStart...<o:p></o:p> MachineName Property static System.String MachineName {get;}<o:p></o:p> NewLine Property static System.String NewLine {get;}<o:p></o:p> OSVersion Property static System.OperatingSystem OSVersio...<o:p></o:p> ProcessorCount Property static System.Int32 ProcessorCount {get;}<o:p></o:p> StackTrace Property static System.String StackTrace {get;}<o:p></o:p> SystemDirectory Property static System.String SystemDirectory {...<o:p></o:p> TickCount Property static System.Int32 TickCount {get;}<o:p></o:p> UserDomainName Property static System.String UserDomainName {g...<o:p></o:p> UserInteractive Property static System.Boolean UserInteractive ...<o:p></o:p> UserName Property static System.String UserName {get;}<o:p></o:p> Version Property static System.Version Version {get;}<o:p></o:p> WorkingSet Property static System.Int64 WorkingSet {get;}<o:p></o:p> TickCount ExitCode<o:p></o:p> |
<o:p> </o:p>
现在,可以从 System.Environment 中选择要查看的属性。
System.Environment 的属性也是静态的,因此必须采用与标准属性的指定方式不同的方式进行指定。从而,使用 :: 来指示 Windows PowerShell 要进行处理的静态方法或属性。若要查看用于启动 Windows PowerShell 的命令,则可通过键入以下命令来检查 CommandLine 属性:
PS> [System.Environment]::Commandline<o:p></o:p> "C:\Program Files\Windows PowerShell\v1.0\powershell.exe"<o:p></o:p> |
<o:p> </o:p>
若要检查操作系统版本,则可通过键入以下命令显示 OSVersion 属性:
PS> [System.Environment]::OSVersion<o:p></o:p> <o:p> </o:p> Platform ServicePack Version VersionString<o:p></o:p> -------- ----------- ------- -------------<o:p></o:p> Win32NT Service Pack 2 5.1.2600.131072 Microsoft Window...<o:p></o:p> |
<o:p> </o:p>
通过显示 HasShutdownStarted 属性,可以检查计算机是否正在关闭:
PS> [System.Environment]::HasShutdownStarted<o:p></o:p> False<o:p></o:p> |
<o:p> </o:p>
对于进行某些数学运算,System.Math 静态类非常有用。System.Math 的重要成员绝大部分为方法,使用 Get-Member 可显示这些方法。
<!----><!----><!---->请注意: <o:p></o:p>
System.Math 中有几种方法同名,但通过它们使用的参数类型可进行区分。<o:p></o:p>
键入以下命令可列出 System.Math 类中的方法:
PS> [System.Math] | Get-Member -Static -MemberType Methods<o:p></o:p> <o:p> </o:p> <o:p> </o:p> TypeName:System.Math<o:p></o:p> <o:p> </o:p> Name MemberType Definition<o:p></o:p> ---- ---------- ----------<o:p></o:p> Abs Method static System.Single Abs(Single value), static Sy...<o:p></o:p> Acos Method static System.Double Acos(Double d)<o:p></o:p> Asin Method static System.Double Asin(Double d)<o:p></o:p> Atan Method static System.Double Atan(Double d)<o:p></o:p> Atan2 Method static System.Double Atan2(Double y, Double x)<o:p></o:p> BigMul Method static System.Int64 BigMul(Int32 a, Int32 b)<o:p></o:p> Ceiling Method static System.Double Ceiling(Double a), static Sy...<o:p></o:p> Cos Method static System.Double Cos(Double d)<o:p></o:p> Cosh Method static System.Double Cosh(Double value)<o:p></o:p> DivRem Method static System.Int32 DivRem(Int32 a, Int32 b, Int3...<o:p></o:p> Equals Method static System.Boolean Equals(Object objA, Object ...<o:p></o:p> Exp Method static System.Double Exp(Double d)<o:p></o:p> Floor Method static System.Double Floor(Double d), static Syst...<o:p></o:p> IEEERemainder Method static System.Double IEEERemainder(Double x, Doub...<o:p></o:p> Log Method static System.Double Log(Double d), static System...<o:p></o:p> Log10 Method static System.Double Log10(Double d)<o:p></o:p> Max Method static System.SByte Max(SByte val1, SByte val2), ...<o:p></o:p> Min Method static System.SByte Min(SByte val1, SByte val2), ...<o:p></o:p> Pow Method static System.Double Pow(Double x, Double y)<o:p></o:p> ReferenceEquals Method static System.Boolean ReferenceEquals(Object objA...<o:p></o:p> Round Method static System.Double Round(Double a), static Syst...<o:p></o:p> Sign Method static System.Int32 Sign(SByte value), static Sys...<o:p></o:p> Sin Method static System.Double Sin(Double a)<o:p></o:p> Sinh Method static System.Double Sinh(Double value)<o:p></o:p> Sqrt Method static System.Double Sqrt(Double d)<o:p></o:p> Tan Method static System.Double Tan(Double a)<o:p></o:p> Tanh Method static System.Double Tanh(Double value)<o:p></o:p> Truncate Method static System.Decimal Truncate(Decimal d), static...<o:p></o:p> |
<o:p> </o:p>
这将显示几种数学方法。此处的命令列表演示了一些常用方法的工作原理:
PS> [System.Math]::Sqrt(9)<o:p></o:p> 3<o:p></o:p> PS> [System.Math]::Pow(2,3)<o:p></o:p> 8<o:p></o:p> PS> [System.Math]::Floor(3.3)<o:p></o:p> 3<o:p></o:p> PS> [System.Math]::Floor(-3.3)<o:p></o:p> -4<o:p></o:p> PS> [System.Math]::Ceiling(3.3)<o:p></o:p> 4<o:p></o:p> PS> [System.Math]::Ceiling(-3.3)<o:p></o:p> -3<o:p></o:p> PS> [System.Math]::Max(2,7)<o:p></o:p> 7<o:p></o:p> PS> [System.Math]::Min(2,7)<o:p></o:p> 2<o:p></o:p> PS> [System.Math]::Truncate(9.3)<o:p></o:p> 9<o:p></o:p> PS> [System.Math]::Truncate(-9.3)<o:p></o:p> -9<o:p></o:p> |