用户定义的变量

 

适用于: Exchange Server 2007 SP3, Exchange Server 2007 SP2, Exchange Server 2007 SP1, Exchange Server 2007

上一次修改主题: 2006-09-21

变量是存储信息的位置。与许多编程环境不同,在 Exchange 命令行管理程序中,在使用变量之前不必进行声明。

可以通过为字符串预加美元符号 ($) 来指定变量。如果字符串包含空格或其他特殊字符,则必须将该字符串放入大括号 ({ })。通过使用数组引用表示法 ([ ]),可以寻址数组或哈希表变量的元素。

有关数组的详细信息,请参阅阵列

使用变量存储值

如果要存储值,变量则非常有用。可以使用赋值运算符为变量赋值。有关运算符的详细信息,请参阅语法

例如,若要为变量 $Example 赋值 8,请使用以下命令:

$Example = 8

此命令将整数 8 赋值给变量 $Example。以后可以在其他命令中调用 $Example 变量,以重新调用该值。在变量中指定的值与在指定变量的位置键入变量包含的值同样对待。例如,如果为 $Example2 赋值 "Hello",则下列两个命令等价:

Write-Host $Example2
Write-Host "Hello"

在变量中存储命令输出

还可以在变量中存储命令输出,供以后使用。如果将命令赋值给变量,则将在运行命令时评估命令。该命令的输出将赋值给变量。例如,如果在命令行上运行 $CurrentDate = Get-Date,然后在数秒内反复调用 $CurrentDate,每次调用变量时,报告的值均相同。

如果将命令输出赋值给变量,还可以访问基本对象的属性和方法。例如,若要查看将 Get-Date 赋值给 $CurrentDate 时可用的属性和方法,可以使用 $CurrentDate | Get-Member 命令。使用 $CurrentDate | Get-Member 命令将在列表中返回下列属性:

Date                 Property       System.DateTime Date {get;}
Day                  Property       System.Int32 Day {get;}
DayOfWeek            Property       System.DayOfWeek DayOfWeek {get;}
DayOfYear            Property       System.Int32 DayOfYear {get;}
Hour                 Property       System.Int32 Hour {get;}
Kind                 Property       System.DateTimeKind Kind {get;}
Millisecond          Property       System.Int32 Millisecond {get;}
Minute               Property       System.Int32 Minute {get;}
Month                Property       System.Int32 Month {get;}
Second               Property       System.Int32 Second {get;}
Ticks                Property       System.Int64 Ticks {get;}
TimeOfDay            Property       System.TimeSpan TimeOfDay {get;}
Year                 Property       System.Int32 Year {get;}
DateTime             ScriptProperty System.Object DateTime {get=if ($this.Di...

可以通过依次键入变量、句点 (.) 和要查看的属性调用任意属性。例如,若要查看变量中存储的年份,请使用以下命令:

$CurrentDate.Year

通过访问变量的属性,可以很容易处理和使用变量中存储的信息的每个部分,而不必使用文本分析。

在变量中存储 Dir 命令的输出

您还可以在变量中存储 Dir 命令的输出。因为运行 Dir 命令将返回多行,所以,返回的每一行将作为新的数组元素存储在变量中。然后,可以访问新建数组中存储的每个文件对象。有关数组的详细信息,请参阅阵列

以下命令将 Dir 命令的输出赋值给 $DirOutput 变量:

$DirOutput = Dir

然后,可以通过指定要查看的数组索引来选择特定的文件对象,如下所示:

$DirOutput[1].Name

还可以创建一个遍历整个数组的简单循环,显示数组中存储的每个文件的名称和文件大小,如下所示:

0..$DirOutput.Length | ForEach { $DirOutput[$_].Name + " is " + $DirOutput[$_].Length + " bytes long." }

以下列表分析此示例:

  • 0..$DirOutput.Length 命令指示 Exchange 命令行管理程序输出一个整数,该整数介于 0$DirOutput 变量中存储的数组的最大长度之间。

  • 0..$DirOutput.Length 命令的输出将通过管道传输给 ForEach 命令,该命令在每个数组元素之间循环,直到到达数组结尾。ForEach 命令运行大括号“{ }”中的命令。

  • $_ 变量存储管道中的当前对象。在此例中,管道中的对象是 0..$DirOutput.Length 命令在从 0 计数到数组最大长度时生成的整数。在 $DirOutput[$_].Name 命令和 $DirOutput[$_].Length 命令中使用此变量选择要访问的数组元素。

  • 有关 $_ 变量的详细信息,请参阅外壳程序变量

  • 加号“+”将 $DirOutput[$_].Name 命令和 $DirOutput[$_].Length 命令的输出与提供的字符串串联在一起,以创建类似如下所示的输出:

    abv_dg.dll is 416144 bytes long.
    addxa.dll is 285056 bytes long.
    ASDat.MSI is 5626880 bytes long.
    ASEntDat.MSI is 5626880 bytes long.
    ASEntIRS.MSI is 910336 bytes long.
    ASEntSig.MSI is 45056 bytes long.
    BPA.Common.dll is 211848 bytes long.
    BPA.ConfigCollector.dll is 101272 bytes long.
    BPA.NetworkCollector.dll is 52128 bytes long.
    

这些示例表明可以多次使用 Length 属性来显示同一变量的不同信息。可以这样做的原因是,$DirOutput 变量中存储了多种数据类型。第一种数据类型是目录对象本身,第二种数据类型是文件对象。如果运行 $DirObject.Length 命令未指定数组索引,则将访问数组中存储的目录父对象类型。如果指定了数组索引(例如 $DirObject[5].Length),则将访问目录对象中存储的文件子对象。

许多对象都存在此行为。通常,可以访问一个变量中包含的许多级别的对象数据。访问此数据的能力使 Exchange 命令行管理程序非常灵活。