Set-Variable

设置变量的值。 如果使用请求的名称的变量不存在,则创建该变量。

语法

Set-Variable
   [-Name] <String[]>
   [[-Value] <Object>]
   [-Include <String[]>]
   [-Exclude <String[]>]
   [-Description <String>]
   [-Option <ScopedItemOptions>]
   [-Force]
   [-Visibility <SessionStateEntryVisibility>]
   [-PassThru]
   [-Scope <String>]
   [-WhatIf]
   [-Confirm]
   [<CommonParameters>]

说明

Set-Variable cmdlet 将值赋给指定的变量或更改当前值。 如果该变量不存在,则该 cmdlet 将创建它。

示例

示例 1:设置变量并获取其值

这些命令将 $desc 变量的值设置为 A description,然后获取该变量的值。

Set-Variable -Name "desc" -Value "A description"
Get-Variable -Name "desc"

Name                           Value
----                           -----
desc                           A description

示例 2:设置全局只读变量

此示例将创建一个包含系统上所有进程的全局只读变量,然后显示该变量的所有属性。

Set-Variable -Name "processes" -Value (Get-Process) -Option constant -Scope global -Description "All processes" -PassThru |
    Format-List -Property *

该命令使用 Set-Variable cmdlet 创建变量。 它使用 PassThru 参数创建表示新变量的对象,然后使用管道运算符 (|) 将该对象传递给 Format-List cmdlet。 它使用 Format-List 的值为“所有”(*) 的 Property 参数显示新创建的变量的所有属性。

(Get-Process) 括在括号中,以确保先执行该值,然后再将其存储在变量中。 否则,变量将包含单词 Get-Process

示例 3:了解公共与私有变量

此示例显示了如何将变量的可见性更改为 Private。 可以使用所需权限通过脚本读取和更改此变量,但它对于用户不可见。

New-Variable -Name "counter" -Visibility Public -Value 26
$Counter

26

Get-Variable c*

Name                  Value
----                  -----
Culture               en-US
ConsoleFileName
ConfirmPreference     High
CommandLineParameters {}
Counter               26

Set-Variable -Name "counter" -Visibility Private
Get-Variable c*

Name                  Value
----                  -----
Culture               en-US
ConsoleFileName
ConfirmPreference     High
CommandLineParameters {}

$counter

"Cannot access the variable '$counter' because it is a private variable"

.\use-counter.ps1
#Commands completed successfully.

此命令显示了如何将变量的可见性更改为 Private。 可以使用所需权限通过脚本读取和更改此变量,但它对于用户不可见。

参数

-Confirm

提示你在运行 cmdlet 之前进行确认。

类型:SwitchParameter
别名:cf
Position:Named
默认值:False
必需:False
接受管道输入:False
接受通配符:False

-Description

指定对变量的描述。

类型:String
Position:Named
默认值:None
必需:False
接受管道输入:False
接受通配符:False

-Exclude

指定此 cmdlet 将从操作中排除的项数组。 此参数值使 Path 参数有效。 请输入路径元素或模式,例如 *.txt。 允许使用通配符。

类型:String[]
Position:Named
默认值:None
必需:False
接受管道输入:False
接受通配符:True

-Force

允许你创建一个与现有只读变量同名的变量,或更改只读变量的值。

默认情况下,你可以覆盖变量,除非该变量的选项值为 ReadOnlyConstant。 有关详细信息,请参阅 Option 参数。

类型:SwitchParameter
Position:Named
默认值:False
必需:False
接受管道输入:False
接受通配符:False

-Include

指定此 cmdlet 将在操作中包含的项数组。 此参数值使 Name 参数有效。 输入一个名称或名称模式,例如 c*。 允许使用通配符。

类型:String[]
Position:Named
默认值:None
必需:False
接受管道输入:False
接受通配符:True

-Name

指定变量名称。

类型:String[]
Position:0
默认值:None
必需:True
接受管道输入:True
接受通配符:False

-Option

指定变量的 Options 属性的值。

有效值为:

  • None:不设置任何选项。 (None 是默认值。)
  • ReadOnly:可以删除。 无法更改,除非通过使用 Force 参数。
  • Constant:无法删除或更改。 Constant 仅在创建变量时有效。 不能将现有变量的选项更改为 Constant
  • Private:该变量仅在当前作用域中可用。
  • AllScope:变量将复制到创建的所有新作用域中。

这些值定义为基于标志的枚举。 可以使用此参数将多个值组合在一起以设置多个标志。 可以将这些值以值数组或这些值的逗号分隔字符串形式传递给 Option 参数。 该 cmdlet 将使用二进制或运算合并这些值。 将值作为数组传递是最简单的选项,此选项还支持对值使用 Tab 自动补全。

类型:ScopedItemOptions
接受的值:None, ReadOnly, Constant, Private, AllScope, Unspecified
Position:Named
默认值:None
必需:False
接受管道输入:False
接受通配符:False

-PassThru

返回一个表示新变量的对象。 默认情况下,此 cmdlet 将不产生任何输出。

类型:SwitchParameter
Position:Named
默认值:False
必需:False
接受管道输入:False
接受通配符:False

-Scope

指定变量的作用域。此参数的可接受值为:

  • Global
  • Local
  • Script
  • Private
  • 一个相对于当前作用域的数字(0 到作用域数,其中 0 是指当前作用域,1 是指其父作用域)。

Local 是默认值。

有关详细信息,请参阅 about_Scopes

类型:String
Position:Named
默认值:Local
必需:False
接受管道输入:False
接受通配符:False

-Value

指定变量的值。

类型:Object
Position:1
默认值:None
必需:False
接受管道输入:True
接受通配符:False

-Visibility

确定变量在创建它的会话之外是否可见。 此参数旨在供传递给其他用户的脚本和命令使用。

有效值为:

  • Public:该变量可见。 (Public 是默认值。)
  • Private:该变量不可见。

当变量为私有时,它不会显示在变量的列表中(例如,由 Get-Variable 返回的变量)或 Variable: 驱动器的显示内容中。 用于读取或更改私有变量的值的命令将返回一个错误。 但是,如果已在定义变量的会话中写入可使用私有变量的命令,则用户可以运行这些命令。

类型:SessionStateEntryVisibility
接受的值:Public, Private
Position:Named
默认值:Public
必需:False
接受管道输入:False
接受通配符:False

-WhatIf

显示运行该 cmdlet 时会发生什么情况。 cmdlet 未运行。

类型:SwitchParameter
别名:wi
Position:Named
默认值:False
必需:False
接受管道输入:False
接受通配符:False

输入

Object

可以通过管道将表示变量值的对象传递给此 cmdlet。

输出

None

默认情况下,此 cmdlet 不返回任何输出。

PSVariable

使用 PassThru 参数时,此 cmdlet 返回表示新变量或更改的变量的 PSVariable 对象。

备注

PowerShell 包含 Set-Variable 的以下别名:

  • 所有平台:
    • set
    • sv