Netwrix 1Secure 提供跨数据和身份的统一可见性——免费试用14天,享有完全访问权限。开始免费试用

资源中心博客

如何使用 PowerShell 变量

如何使用 PowerShell 变量

Aug 26, 2025

PowerShell 变量充当数据容器:可在脚本或会话中创建、修改并使用。它们支持多种类型,包括字符串、整数、数组和哈希表,并且可以按本地、全局或脚本级进行作用域划分。管理员可以设置描述、可见性和选项,列出或清除变量,并导出其内容。合理使用变量能够简化自动化并提高脚本效率。

简介

PowerShell 的变量是一个被赋予值的容器。用于存放。可以把变量想象成带名字的“盒子”,你可以把信息先放进去,之后再使用。只需引用该变量,就可以轻松访问它的值;并且可以随时通过用新值重新赋值来更改变量。变量在脚本中或在 PowerShell 会话期间用于跟踪数据非常方便。

PowerShell 变量示例

让我们深入了解在 PowerShell 中使用变量的一些最实用的方法。

在 PowerShell 中创建并设置变量

PowerShell 里的变量名以美元符号($)开头,并且不区分大小写。因此,例如 $VAR 和 $var 指的是同一个变量。变量名可以包含字母、数字和下划线。虽然变量名也可以包含空格和其他特殊字符,但最好避免这样做。

在 PowerShell 中为变量选择名称之后,你可以使用一条命令创建变量并为其赋值。例如,如果你想创建一个名为 $Greeting 的变量,并为它赋予字符串值 Hello, World ,你可以使用以下命令:

      $Greeting = "Hello, World"
      

在这条命令之后,只要你输入 $Greeting ,PowerShell 就会把你为该变量分配的值替换进去,如下所示。

Image

前面的示例中使用的双引号(“ ”)表示该值是字符串。下面介绍如何创建变量并为其分配整数值:

      $var1 = 75

$var2 = 25
      

如下所示,你可以对数字变量执行算术运算:

Image

你也可以使用加号(+)运算符来组合字符串:

      $var10 = “Complete”

$var11 = “Visibility

$var12 = $var10 + $var11
      
Image

如果你把数字加入到字符串中,该数字会自动变成字符串:

      $var1 = “Netwrix”

$var2 = 2023
      
Image

设置或检查变量的类型

PowerShell 中的变量可以存储多种数据类型,包括字符串、整数,以及数组等更复杂的对象。为变量赋值时,PowerShell 会根据所赋的值自动确定数据类型。这个机制称为动态类型(dynamic typing)。如上所述,字符串需要使用引号。

下面是一些示例:

      $var1 = "Hello"   # The type of $var1 is String

$var2 = 25        # The type of $var2 is Integer

$var3 = Get-Date # The type of $var3 is DateTime
      

要了解变量的类型,我们使用 GetType 参数:

      $var5 = “Netwrix”
$var5.GetType () .FullName
      
Image

最常见的变量类型包括以下内容:

  • String:文本(你可以通过将文本放在引号中来声明字符串)
  • Integer:整数
  • Double:包含小数点的数字
  • Boolean:真值,要么 $True,要么 $False
  • DateTime:日期和时间
  • Array:一种数据结构,用于保存相同或不同类型的一组项目。项目以顺序方式存储,并可通过索引访问。下面是声明数组的示例:
      $myArray = "apple", "orange", "cherry"
      
  • HashTable:由一组无序的键值对组成的数据结构。它类似于字典:使用唯一的键来存储和检索每个值。这使得哈希表非常适用于查找以及需要轻松搜索值的场景。要创建哈希表,你可以使用 @{} 。在花括号中,你需要按“键=值”的形式指定每一组对,如下面示例所示:
      $myHashtable = @{

    "Fruit1" = "Apple"

    "Fruit2" = "Orange"

    "Fruit3" = "Cherry"

}
      

定义变量的作用域

作用域是变量的可见性和可访问性。PowerShell 有几种不同的作用域:

  • 本地 — 当前作用域
  • 全局 —PowerShell 启动时,或创建新的会话或运行空间(runspace)时生效的作用域
  • 脚本 — 脚本运行时创建的作用域

在 PowerShell 中按如下方式指定变量:

      $global:Var1 = "Global Variable"

$script:Var2 = "Script Variable"

$local:Var3 = "Local Variable"
      

使用 Netwrix Directory Manager 自动化任务

无需复杂的 PowerShell 脚本,简化组管理并自动化任务

公共变量 vs. 私有变量

变量的 Visibility 属性与作用域(scope)相关;它决定你是否能够在创建该变量的脚本之外看到该项。变量的 Visibility 属性可以取值为 Public 或 Private。私有(Private)变量只能在其创建时所在的作用域中查看和更改。公共(Public)变量可从任何作用域访问。

列出当前作用域中的变量(获取)

你可以使用 Get-Variable cmdlet 来列出 PowerShell 会话中当前的所有变量。该 cmdlet 会检索当前作用域中的所有变量。下面的示例列出了一些在前面示例中使用的变量。

Image

打印变量

你可以将变量输出到 .txt、.csv 或 HTML 文件中。

要写入 .txt 文件,请使用 Out-File 命令:

      $var5 = “Hello World”

$var5 | Out-File c:scriptsHello_World.txt
      

要将数据导出到 .csv 文件,请使用 Export-Csv 命令:

      $var6 = Get-Process

$var6 | SELECT Name, Path | Export-Csv -Path c:scriptsprocesses.csv
      
Image

要写入到 HTML 文件,请使用 ConvertTo-Html 命令:

      $var6 = Get-Process

$var6 | ConvertTo-HTML -Property Name, Path>C:scriptprocesses.html
      

要读取你导出的文件,请使用 Get-Content cmdlet:

      Get-Content c:\scripts\processes.csv
      
Image

清除变量

Clear-Variable cmdlet 用于从变量中移除其值,但保留变量对象本身。当变量被清除时,该变量仍然存在,但其值为 $null。在下面的示例中,会先创建变量,然后清除它,并对每个操作进行确认。

Image

移除变量

Remove-Variable cmdlet 用于删除变量及其值。

在下面的示例中,会创建一个名为 Example 的变量,并为其分配字符串“Hello World!”。然后使用 Remove-Variable cmdlet 删除该变量。接着脚本检查该变量,并由于它已不再存在而返回错误。

Image

请注意,Remove-Variable cmdlet 只会移除当前作用域(scope)中的变量。如果在父作用域(parent scope)中存在同名变量,则不会影响该变量。类似地,Remove-Variable 不会影响任何可能包含同名变量的子作用域(child scopes)。

Clear-Variable 和 Remove-Variable 命令的区别在于:清除变量只会删除该变量的值,而移除变量则会删除变量本身。

参数

上面讨论的 cmdlet 使用多种参数。我们来回顾一下最常用的参数,以及它们是如何工作的。

说明

PowerShell 变量有一个 Description 属性,可以使用带有 Set-Variable cmdlet 和 Description 参数来设置:

      Set-Variable -Name "myVariable" -Description "This is my sample variable"
      

排除

在使用 Get-Variable cmdlet 时,要排除某些变量,请使用 Exclude 参数,并指定要排除的变量名称。在下面的示例中,我们创建了 4 个变量。然后使用 Get-Variable -Exclude 命令来排除其中两个。

      $Var1 = "Test1"

$Var2 = "Test2"

$Var3 = "Test3"

$OtherVar = "Other"

Get-Variable -Exclude Var1, OtherVar
      

(要仅包含特定变量,请使用下文所述的 Name 参数。)

强制

你可以在一些命令中使用 Force 参数,例如 Set-Variable 和 Remove-Variable,以覆盖任何可能阻止命令完成的限制。

例如,通常任何试图更改只读变量的值的操作都会导致错误,如下所示:

Image

不过,你可以使用 Force 参数来覆盖这种行为:

Image

名称

你可以使用 Name 参数,通过不带美元符号的变量名称来引用变量。特别是,你可以使用它只获取名称与某个特定模式匹配的变量。例如,使用下面的 cmdlet,你可以仅检索名称以“Net”开头的变量:

      Get-Variable -Name "NET*"
      

星号(*)是通配符字符,表示任意数量的其他字符。

选项

您可以使用 Option 参数并通过 Set-Variable cmdlet 指定。该参数的可用值包括:

  • 无 (默认):该变量的行为类似普通变量。
  • ReadOnly:该变量无法更改或删除。
  • Constant:即使使用 Force 参数,变量也不能被更改或删除。
  • Private:变量仅在当前作用域中可用。
  • AllScope:变量会被复制到创建的任何新作用域中。

此处展示了 ReadOnly 选项的示例:

Image

PassThru

默认情况下,大多数执行操作的 cmdlet(例如 Set-Variable、 New-Item 和 Remove-Item)不会输出任何内容;它们只是静默地完成操作。不过,如果使用 PassThru 参数,cmdlet 将输出一个对象,用于表示你用该 cmdlet 操作的项目。

下面是一个使用 PassThru 与 Set-Variable 的示例:

Image

WhatIf

你可以使用 WhatIf 参数来启用会进行更改的 cmdlet,例如 Set-Variable、 Remove-Variable 或 Clear-Variable,以查看如果你运行该 cmdlet,可能会发生什么,而无需进行任何实际更改。如果你不确定 cmdlet 会做什么,这非常有用。下面给出一个示例:

Image

结论

在充分理解 PowerShell 变量如何创建和被操控之后,你就可以编写 PowerShell 脚本,帮助你实现任务自动化、系统管理、软件开发等。

Netwrix 如何提供帮助

需要更高效、更有效地保障 Active Directory 和 Entra ID (Azure AD) 环境吗?考虑 Netwrix Directory Manager。其自动化的组和用户管理能力可降低 data breach 风险,同时消除耗时的手动管理工作。

Netwrix Directory Manager 让你能够:

  • 从你的 HR 信息系统(HRIS)自动化用户的创建与撤销,将其同步到 Active Directory、Entra ID 以及支持 SCIM 的应用程序。这样新员工可以更快进入状态,同时大幅降低对方(攻击者)接管过期身份的风险。
  • 根据 HRIS 中记录的变更(例如员工晋升或转岗到其他岗位),自动更新目录组。该自动化可在满足安全与合规要求的同时,将访问权限保持在接近实时的最新状态,并节省 IT 团队的时间。
  • 将组和用户管理委派给最了解应当由谁访问哪些资源的人员。通过简化的工作流,业务部门负责人可以审阅各自的组,并批准或拒绝用户访问请求,从而降低在目录中出现权限过高的组和用户的风险。
  • 通过自动化用户创建、到期和删除,让目录保持整洁,并更易于管理。
  • 凭借深入洞察、有效的自动化以及对组与成员的清晰报表,持续维护并证明符合相关法规与标准的要求。

面向初学者的 Windows PowerShell 脚本教程

了解更多

分享到

了解更多

关于作者

Asset Not Found

Jonathan Blackwell

软件开发负责人

自 2012 年以来,工程师兼创新者 Jonathan Blackwell 一直提供工程领导力,使 Netwrix GroupID 成为 Active Directory 和 Azure AD 环境中群组与用户管理领域的领先者。他在研发、市场与销售方面的经验,使 Jonathan 能够全面理解 Identity 市场以及买家如何思考。