about_Assignment_Operators

应用到: Windows PowerShell 2.0, Windows PowerShell 3.0, Windows PowerShell 4.0

在此处插入介绍。

主题

about_assignment_operators

简短说明

介绍如何使用运算符对变量赋值。

详细说明

赋值运算符将一个或多个值赋给一个变量。它们可以在赋值前对值执行数值操作。

Windows PowerShell® 支持以下赋值运算符。

    Operator  Description  
    -------   -----------
    =         Sets the value of a variable to the specified value.

    +=        Increases the value of a variable by the specified value, or 
              appends the specified value to the existing value.

    -=        Decreases the value of a variable by the specified value.
 
    *=        Multiplies the value of a variable by the specified value, or
              appends the specified value to the existing value.
 
    /=        Divides the value of a variable by the specified value.
 
    %=        Divides the value of a variable by the specified value and 
              then assigns the remainder (modulus) to the variable.

    ++        Increases the value of a variable, assignable property, or 
              array element by 1.

    --        Decreases the value of a variable, assignable property, or 
              array element by 1.

语法

赋值运算符的语法如下所示:

<assignable-expression> <assignment-operator> <value>

可赋值表达式包括变量和属性。值可以是单个值、多个值组成的数组、命令、表达式或语句。

递增或递减运算符是一元运算符。每个运算符均有前缀和后缀版本。

        <assignable-expression><operator>
        <operator><assignable-expression>

可赋值表达式必须是数字,或必须可转换为数字。

赋值

变量是用于存储值的命名内存空间。可以使用赋值运算符 (=) 将值保存在变量中。新的值可以替换变量的现有值,或者可以将一个新的值追加到现有值。

基本赋值运算符是等于符号 (=) (ASCII 61)。例如,下面的语句将值 Windows PowerShell 赋给 $MyShell 变量:

        $MyShell = "Windows PowerShell" 

将值赋给 Windows PowerShell 中的变量时,如果该变量不存在,则将创建该变量。例如,在以下两个赋值语句中,前一个语句创建 $a 变量并将值 6 赋给 $a。第二个赋值语句将值 12 赋给 $a。第一个语句创建一个新变量。第二个语句仅更改其值:

        $a = 6
        $a = 12

Windows PowerShell 中的变量没有特定的数据类型,除非你转换它们。当变量仅包含一个对象时,则该变量使用该对象的数据类型。当变量包含对象集合时,变量的数据类型为 System.Object。因此,你可以将任何类型的对象分配给集合。下面的示例表明你可以将进程对象、服务对象、整数添加到变量,而不会生成错误:

        $a = get-process
        $a += get-service
        $a += "string"
        $a += 12

由于管道运算符 (|) 优先于赋值运算符 (=),因此将命令管道的结果分配给变量时,无需括号。例如,下面的命令对计算机上的服务进行排序,然后将排序后的服务分配到 $a 变量:

        $a = get-service | sort name

还可以将由语句创建的值赋给变量,如下面的示例所示:

        $a = if ($b -lt 0) { 0 } else { $b }

如果 $b 的值小于 0,则此示例将 0 赋给 $a 变量。如果 $b 的值不小于 0,则此示例将 $b 的值赋给 $a。

赋值运算符 (=)

赋值运算符 (=) 将值赋给变量。如果变量已经具有一个值,则赋值运算符 (=) 将替换该值,且不发出警告。

下面的语句将整数值 6 赋给变量 $a:

        $a = 6 

若要将字符串值赋给一个变量,请将该字符串值括在引号中,如下所示:

        $a = "baseball" 

若要将一个数组(多个值)赋给变量,请用逗号分隔值,如下所示:

        $a = "apple", "orange", "lemon", "grape"

若要将哈希表分配给变量,请使用 Windows PowerShell 中的标准哈希表表示法。键入 @,后跟由分号 (;) 分隔并括在大括号 ({ }) 中的键/值对。例如,若要将哈希表分配给变量 $a,请键入:

        $a = @{one=1; two=2; three=3} 

若要将一个十六进制值赋给变量,请在值前面加上“0x”。Windows PowerShell 将该十六进制值 (0x10) 转换为一个十进制值(在此例中为 16),并将该值赋给变量 $a。例如,若要将值 0x10 赋给变量 $a,请键入:

        $a = 0x10 

若要将一个指数值赋给变量,请键入根数(即字母“e”),以及表示 10 的倍数的数字。例如,若要将值 3.1415 的 1,000 次方赋给变量 $a,请键入:

        $a = 3.1415e3 

Windows PowerShell 也可以将千字节 (KB)、兆字节 (MB)、千兆字节 (GB) 转换为字节。例如,若要将一个 10 KB 的值赋给变量 $a,请键入:

        $a = 10kb

加法赋值运算符 (+=)

加法赋值运算符 (+=) 递增变量的值或将指定的值追加到现有值。具体操作取决于变量是数值类型还是字符串类型,以及变量包含的是单个值(标量)还是多个值(集合)。

+= 运算符将两种操作组合在一起。首先进行加法运算,然后进行赋值。因此,以下语句是等效的:

        $a += 2
        $a = ($a + 2)

当变量包含一个数值时,+= 运算符按运算符右侧的量递增现有值。然后,运算符将得出的值赋给变量。下面的示例演示如何使用 += 运算符来增大变量的值:

        C:\PS> $a = 4
        C:\PS> $a += 2
        C:\PS> $a
        6

当变量的值为一个字符串时,将运算符右侧的值追加到字符串,如下所示:

        C:\PS> $a = "Windows"
        C:\PS> $a += " PowerShell"
        C:\PS> $a
        Windows PowerShell 

当变量的值为一个数组时,+= 运算符将运算符右侧的值追加到数组。除非通过转换显式确定数组的类型,你可以将任何类型的值追加到数组,如下所示:

        C:\PS> $a = 1,2,3
        C:\PS> $a += 2
        C:\PS> $a
        1
        2
        3
        2
        C:\PS> $a += "String"
        C:\PS> $a
        1
        2
        3
        2
        String

当变量的值为哈希表时,+= 运算符将运算符右侧的值追加到哈希表。但是,由于可以添加到哈希表的唯一类型是另外一个哈希表,因此所有其他赋值都将失败。

例如,下面的命令将哈希表分配给变量 $a。然后,它使用 += 运算符将另一个哈希表追加到现有哈希表,高效地将新的键/值对添加到现有哈希表中。此命令成功,如输出中所示:

        C:\PS> $a = @{a = 1; b = 2; c = 3}
        C:\PS> $a += @{mode = "write"}
        C:\PS> $a
        Name                           Value
        ----                           -----
        a                              1
        b                              2
        mode                           write
        c                              3

下面的命令尝试将一个整数 (1) 追加到变量 $a 中的哈希表。此命令失败:

        C:\PS> $a = @{a = 1; b = 2; c = 3}
        C:\PS> $a += 1
        You can add another hash table only to a hash table.
        At line:1 char:6
        + $a += <<<<  1

减法赋值运算符 (-=)

减法赋值运算符 (-=) 按运算符右侧指定的值递减变量值。此运算符不可用于字符串变量,并且不可用于从集合中删除元素。

-= 运算符将两种操作组合在一起。首先进行减法运算,然后进行赋值。因此,以下语句是等效的:

        $a -= 2
        $a = ($a - 2)

下面的示例演示如何使用 -= 运算符来减小变量的值:

        C:\PS> $a = 8
        C:\PS> $a -= 2
        C:\PS> $a
        6

可以使用 -= 赋值运算符来减小数值数组中的成员的值。为此,指定你希望更改的数组元素的索引。在下面的示例中,数组中的第 3 个元素(元素 2)的值减小 1:

        C:\PS> $a = 1,2,3
        C:\PS> $a[2] -= 1.
        C:\PS> $a
        1
        2
        2

不可使用 -= 运算符来删除变量的值。若要删除赋给变量的所有值,请使用 Clear-Item 或 Clear-Variable cmdlet 将值 $null 或 "" 赋给变量。

        $a = $null 

若要从数组中删除特定值,请使用数组表示法将值 $null 赋给特定项。例如,下面的语句从数组中删除第二个值(索引位置 1):

        C:\PS> $a = 1,2,3
        C:\PS> $a
        1
        2
        3

        C:\PS> $a[1] = $null
        C:\PS> $a
        1
        3

若要删除变量,请使用 Remove-Variable cmdlet。在变量显式转换为特定数据类型,并且你希望使用未指定类型的变量时,此方法十分有用。下面的命令删除变量 $a:

        remove-variable a

乘法赋值运算符 (*=)

乘法赋值运算符 (*=) 乘以一个数值,或追加指定数目的变量字符串值副本。

当变量包含单个数值时,该值将乘以运算符右侧的值。例如,下面的示例演示了如何使用 *= 运算符来乘以变量的值:

        C:\PS> $a = 3
        C:\PS> $a *= 4
        C:\PS> $a
        12

在此例中,*= 运算符将两种操作组合在一起。首先进行乘法运算,然后进行赋值。因此,以下语句是等效的:

        $a *= 2
        $a = ($a * 2)

当变量包含字符串值时,Windows PowerShell 将指定数目的字符串追加到该值,如下所示:

        C:\PS> $a = "file"
        C:\PS> $a *= 4 
        C:\PS> $a
        filefilefilefile

若要乘以数组的一个元素,请使用一个索引来标识你希望乘以的元素。例如,下面的命令将数组中的第一个元素(索引位置 0)乘以 2:

        $a[0] *= 2

除法赋值运算符 (/=)

除法赋值运算符 (/=) 将一个数值除以运算符右侧指定的值。该运算符不可用于字符串变量。

/= 运算符将两种操作组合在一起。首先进行除法运算,然后进行赋值。因此,以下两个语句是等效的:

        $a /= 2
        $a = ($a / 2)

例如,下面的命令使用 /= 运算符来除以变量值:

        C:\PS> $a = 8
        C:\PS> $a /=2
        C:\PS> $a
        4

若要除以数组的一个元素,请使用一个索引来标识你想要更改的元素。例如,下面的命令将数组中的第二个元素(索引位置 1)除以 2:

        $a[1] /= 2

取模赋值运算符 (%=)

取模赋值运算符 (%=) 用变量值除以运算符右侧的值。然后,%= 运算符将余数(称为模数)赋给变量。仅当变量包含一个数值时才可使用此运算符。当变量包含字符串变量或数组时,不可使用此运算符。

%= 运算符将两种操作组合在一起。首先,进行除法运算并确定余数,然后将余数赋给变量。因此,以下语句是等效的:

        $a %= 2
        $a = ($a % 2)

下面的示例演示如何使用 %= 运算符来保存商的模数:

        C:\PS> $a = 7
        C:\PS> $a %= 4
        C:\PS> $a
        3

递增和递减运算符

递增运算符 (++) 将变量值增大 1。在简单语句使用递增运算符时,不会返回任何值。若要查看结果,请显式变量的值,如下所示:

        C:\PS> $a = 7
        C:\PS> ++$a
        C:\PS> $a
        8

若要强制返回一个值,请将变量和运算符括在括号中,如下所示:

        C:\PS> $a = 7
        C:\PS> (++$a)
        8

递增运算符可位于变量前(前缀)或变量后(后缀)。运算符的前缀版本在变量值用于语句中之前递增该变量,如下所示:

        C:\PS> $a = 7
        C:\PS> $c = ++$a
        C:\PS> $a
        8
        C:\PS> $c
        8

运算符的后缀版本在变量值用于语句中之后递增该变量。在下面的示例中,变量 $c 和 $a 具有不同的值,因为已在 $a 更改前将值赋给 $c:

        C:\PS> $a = 7
        C:\PS> $c = $a++
        C:\PS> $a
        8
        C:\PS> $c
        7

递减运算符 (--) 将变量值减小 1。与使用递增运算符相同,如果你在简单语句中使用该运算符,不会返回任何值。使用括号返回一个值,如下所示:

        C:\PS> $a = 7
        C:\PS> --$a
        C:\PS> $a
        6
        C:\PS> (--$a)
        5

运算符的前缀版本在变量值用于语句中之前递减该变量,如下所示:

        C:\PS> $a = 7
        C:\PS> $c = --$a
        C:\PS> $a
        6
        C:\PS> $c
        6

运算符的后缀版本在变量值用于语句中之后递减该变量。在下面的示例中,变量 $d 和 $a 具有不同的值,因为已在 $a 更改前将值赋给 $d:

        C:\PS> $a = 7
        C:\PS> $d = $a--
        C:\PS> $a
        6
        C:\PS> $d
        7

Microsoft .NET Framework 类型

默认情况下,当变量仅有一个值时,赋给变量的值将确定变量的数据类型。例如,以下命令创建一个整数 (System.Int32) 类型的变量:

        $a = 6 

若要查找变量的 .NET Framework 类型,请使用 GetType 方法及其 FullName 属性,如下所示。确保在 GetType 方法名后包括括号,即使该方法调用没有任何参数:

        C:\PS> $a = 6 
        C:\PS> $a.gettype().fullname 
        System.Int32 

若要创建包含字符串的变量,请将字符串值赋给变量。若要指示值为字符串,请将其括在引号中,如下所示:

        C:\PS> $a = "6"
        C:\PS> $a.gettype().fullname
        System.String

如果赋给变量的第一个值是字符串,则 Windows PowerShell 会将所有操作视为字符串操作,并将新的值转换为字符串。下面的示例中出现了这种情况:

        C:\PS> $a = "file"
        C:\PS> $a += 3
        C:\PS> $a
        file3

如果第一个值为整数,则 Windows PowerShell 会将所有操作视为整数操作,并将新的值转换为整数。下面的示例中出现了这种情况:

        C:\PS> $a = 6
        C:\PS> $a += "3"
        C:\PS> $a
        9

通过将类型名称置于变量名称或第一个要赋予的值前面的方括号中,可将新的标量变量转换为任一 .NET Framework 类型。转换变量时,你可以决定可存储在变量中的数据的类型。你还可以决定操纵变量时变量的行为方式。

例如,下面的命令将变量转换为字符串类型:

        C:\PS> [string]$a = 27
        C:\PS> $a += 3
        C:\PS> $a
        273

下面的示例将转换第一个值,而不是转换变量:

        $a = [string]27

将变量转换为特定类型时,通用约定为转换变量,而不是值。但是,如果现有变量的值无法转换为新的数据类型,则将无法重新转换现有变量的数据类型。若要更改数据类型,必须替换其值,如下所示:

        C:\PS> $a = "string"
        C:\PS> [int]$a
        Cannot convert value "string" to type "System.Int32". Error: "Input
        string was not in a correct format."
        At line:1 char:8
        + [int]$a <<<<

        C:\PS> [int]$a =3

此外,在变量名称前加上数据类型时,会锁定该变量类型,除非通过指定另一个数据类型显式替代该类型。如果尝试分配与现有类型不兼容的值,并且未显式替代该类型,则 Windows PowerShell 将显示一个错误,如下面的示例中所示:

        C:\PS> $a = 3
        C:\PS> $a = "string"

        C:\PS> [int]$a = 3
        C:\PS> $a = "string"
        Cannot convert value "string" to type "System.Int32". Error: "Input
        string was not in a correct format."
        At line:1 char:3
        + $a <<<<  = "string"

        C:\PS> [string]$a = "string"

在 Windows PowerShell 中,对于包含多个项的变量,针对其数据类型的处理方式不同于处理包含单个项的变量的数据类型。除非专门将数据类型分配给一个数组变量,数据类型始终为 System.Object []。此数据类型特定于数组。

有时,你可以通过指定另一各类型来替代默认类型。例如,下面的命令将变量转换为 string [] 数组类型:

        [string []] $a = "one", "two", "three"

Windows PowerShell 变量可以是任何 .NET Framework 数据类型。此外,可以分配任何在当前进程中可用的完全限定的 .NET Framework 数据类型。例如,下面的命令指定 System.DateTime 数据类型:

        [system.datetime]$a = "5/31/2005"

将向变量分配符合 System.DateTime 数据类型的值。变量 $a 的值可以是以下值:

        Tuesday, May 31, 2005 12:00:00 AM

分配多个变量

在 Windows PowerShell 中,可以通过使用单个命令将值赋给多个变量。将第一个赋值元素赋到第一个变量,第二个元素赋给第二个变量,第三个元素赋给第三个变量,依此类推。例如,下面的命令将值 1 赋给变量 $a,将值 2 赋给变量 $b,将值 3 赋给变量 $c:

        C:\PS> $a, $b, $c = 1, 2, 3

如果赋值元素的数目多于变量数目,则所有剩余的值都将赋给最后一个变量。例如,下面的命令包含三个变量和五个值:

        $a, $b, $c = 1, 2, 3, 4, 5

因此,Windows PowerShell 将值1 赋给变量 $a,将值 2 赋给变量 $b。并将值 3、4、5 赋给变量 $c。若要将变量 $c 中的值赋给三个其他变量,请使用以下形式:

        $d, $e, $f = $c

此命令将值 3 赋给变量 $d,将值 4 赋给变量 $e,将值 5 赋给变量 $f。

你还可以通过链接变量,将一个值赋给多个变量。例如,下面的命令将值“3”赋给所有 4 个变量:

        $a = $b = $c = $d = "three"

与变量相关的 CMDLET

除了使用赋值操作来设置变量值之外,你还可以使用 Set-Variable cmdlet。例如,下面的命令使用 Set-Variable 将由 1、2、3 组成的数组赋给 $a 变量。

        Set-Variable -name a -value 1, 2, 3 

另请参阅

about_Arrays

about_Hash_Tables

about_Variables

Clear-Variable

Remove-Variable

Set-Variable