当前位置:网站首页 > 更多 > 玩电脑 > 正文

[玩转系统] 关于变量

作者:精品下载站 日期:2024-12-14 02:17:27 浏览:12 分类:玩电脑

关于变量


简短描述

描述变量如何存储可在 PowerShell 中使用的值。

详细描述

您可以在 PowerShell 变量中存储所有类型的值。例如,存储命令的结果,以及存储命令和表达式中使用的元素,例如名称、路径、设置和值。

变量是存储值的内存单元。在 PowerShell 中,变量由以美元符号 ($) 开头的文本字符串表示,例如 $a$process 或 $my_var。

变量名称不区分大小写,并且可以包含空格和特殊字符。但是,包含特殊字符和空格的变量名很难使用,应该避免。有关详细信息,请参阅包含特殊字符的变量名称。

PowerShell 中有多种不同类型的变量。

  • 用户创建的变量:用户创建的变量由用户创建和维护。默认情况下,您在 PowerShell 命令行中创建的变量仅在 PowerShell 窗口打开时存在。当 PowerShell 窗口关闭时,变量将被删除。要保存变量,请将其添加到您的 PowerShell 配置文件中。您还可以在具有全局、脚本或本地范围的脚本中创建变量。

  • 自动变量:自动变量存储PowerShell的状态。这些变量由 PowerShell 创建,PowerShell 根据需要更改它们的值以保持其准确性。用户无法更改这些变量的值。例如,$PSHOME 变量存储 PowerShell 安装目录的路径。

    有关自动变量的详细信息、列表和说明,请参阅 about_Automatic_Variables。

  • 首选项变量:首选项变量存储 PowerShell 的用户首选项。这些变量由 PowerShell 创建并填充有默认值。用户可以更改这些变量的值。例如,$MaximumHistoryCount 变量确定会话历史记录中的最大条目数。

    有关首选项变量的详细信息、列表和说明,请参阅 about_Preference_Variables。

使用变量

要创建新变量,请使用赋值语句为该变量赋值。在使用变量之前不必声明它。所有变量的默认值为$null

要获取 PowerShell 会话中所有变量的列表,请输入 Get-Variable。显示的变量名称前面不带用于引用变量的美元 ($) 符号。

例如:

$MyVariable = 1, 2, 3

$Path = "C:\Windows\System32"

变量对于存储命令的结果很有用。

例如:

$Processes = Get-Process

$Today = (Get-Date).DateTime

要显示变量的值,请键入变量名称,前面加上美元符号 ($)。

例如:

$MyVariable
1
2
3
$Today
Tuesday, September 3, 2019 09:46:46

要更改变量的值,请为该变量分配新值。

以下示例显示 $MyVariable 变量的值、更改该变量的值,然后显示新值。

$MyVariable = 1, 2, 3
$MyVariable
1
2
3
$MyVariable = "The green cat."
$MyVariable
The green cat.

要删除变量的值,请使用 Clear-Variable cmdlet 或将该值更改为 $null

Clear-Variable -Name MyVariable
$MyVariable = $null

要删除变量,请使用Remove-Variable 或Remove-Item。

Remove-Variable -Name MyVariable
Remove-Item -Path Variable:\MyVariable

也可以使用一条语句为多个变量赋值。以下示例将相同的值分配给多个变量:

$a = $b = $c = 0

下一个示例将多个值分配给多个变量。

$i,$j,$k = 10, "red", $true    # $i is 10, $j is "red", $k is True
$i,$j = 10, "red", $true       # $i is 10, $j is [object[]], Length 2

有关更多详细信息,请参阅 about_Assignment_Operators 的分配多个变量部分。

变量类型

您可以在变量中存储任何类型的对象,包括整数、字符串、数组和哈希表。并且,代表进程、服务、事件日志和计算机的对象。

PowerShell 变量是松散类型的,这意味着它们不限于特定类型的对象。单个变量甚至可以同时包含不同类型对象的集合或数组。

变量的数据类型由变量值的 .NET 类型决定。要查看变量的对象类型,请使用 Get-Member。

例如:

$a = 12                         # System.Int32
$a = "Word"                     # System.String
$a = 12, "Word"                 # array of System.Int32, System.String
$a = Get-ChildItem C:\Windows   # FileInfo and DirectoryInfo types

您可以使用类型属性和强制转换表示法来确保变量只能包含特定的对象类型或可以转换为该类型的对象。如果您尝试分配其他类型的值,PowerShell 会尝试将该值转换为其类型。如果类型无法转换,则赋值语句失败。

要使用强制转换表示法,请在变量名称之前(在赋值语句的左侧)输入类型名称,并将其括在方括号中。以下示例创建一个仅包含整数的 $number 变量、一个仅包含字符串的 $words 变量以及一个 $dates 变量只能包含 DateTime 对象。

[int]$number = 8
$number = "12345"  # The string is converted to an integer.
$number = "Hello"
Cannot convert value "Hello" to type "System.Int32". Error: "Input string
was not in a correct format."
At line:1 char:1
+ $number = "Hello"
+ ~~~~~~~~~~~~~~~~~
+ CategoryInfo          : MetadataError: (:) [],
    ArgumentTransformationMetadataException
+ FullyQualifiedErrorId : RuntimeException
[string]$words = "Hello"
$words = 2       # The integer is converted to a string.
$words += 10     # The plus (+) sign concatenates the strings.
$words
210
[datetime] $dates = "09/12/91"  # The string is converted to a DateTime object.
$dates
Thursday, September 12, 1991 00:00:00
$dates = 10    # The integer is converted to a DateTime object.
$dates
Monday, January 1, 0001 00:00:00

在命令和表达式中使用变量

要在命令或表达式中使用变量,请键入变量名称,前面加上美元 ($) 符号。

如果变量名称和美元符号未用引号引起来,或者如果它们用双引号 (") 引起,则在命令或表达式中使用变量的值。

如果变量名称和美元符号括在单引号 (') 中,则在表达式中使用该变量名称。

有关在 PowerShell 中使用引号的更多信息,请参阅 about_Quoting_Rules。

此示例获取 $PROFILE 变量的值,该变量是 PowerShell 控制台中 PowerShell 用户配置文件的路径。

$PROFILE
C:\Users\User01\Documents\PowerShell\Microsoft.PowerShell_profile.ps1

在此示例中,显示了两个可以在 notepad.exe 中打开 PowerShell 配置文件的命令。带双引号 (") 标记的示例使用变量的值。

notepad $PROFILE

notepad "$PROFILE"

以下示例使用单引号 (') 标记将变量视为文字文本。

'$PROFILE'
$PROFILE
'Use the $PROFILE variable.'
Use the $PROFILE variable.

包含特殊字符的变量名

变量名称以美元 ($) 符号开头,可以包含字母数字字符和特殊字符。变量名长度仅受可用内存的限制。

最佳实践是变量名称仅包含字母数字字符和下划线 (_) 字符。包含空格和其他特殊字符的变量名称很难使用,应避免使用。

字母数字变量名称可以包含以下字符:

  • 以下类别的 Unicode 字符:LuLlLtLmLo ,或Nd
  • 下划线 (_) 字符。
  • 问号 (?) 字符。

以下列表包含 Unicode 类别描述。有关详细信息,请参阅 Unicode 类别。

Lu

大写字母

Ll

小写字母

Lt

标题字母

Lm

修饰字母

Lo

其他信件

Nd

十进制数字

要创建或显示包含空格或特殊字符的变量名称,请用大括号 ({}) 字符将变量名称括起来。大括号指示 PowerShell 将变量名称的字符解释为文字。

特殊字符变量名称可以包含以下字符:

  • 任何 Unicode 字符,但以下情况除外:

    • 右花括号 } 字符 (U+007D)。
  • 反引号 (`) 字符 (U+0060)。反引号用于转义 Unicode 字符,以便将它们视为文字。

PowerShell 保留了包含字母数字和 $$$?$^$_特殊字符。有关详细信息,请参阅 about_Automatic_Variables。

例如,以下命令创建名为 save-items 的变量。需要大括号 ({}),因为变量名称包含连字符 (-) 特殊字符。

${save-items} = "a", "b", "c"
${save-items}
a
b
c

以下命令获取由 ProgramFiles(x86) 环境变量表示的目录中的子项。

Get-ChildItem ${env:ProgramFiles(x86)}

要引用包含大括号的变量名称,请将变量名称括在大括号中,并使用反引号字符转义大括号。例如,要创建名为 this{value}is 的变量,请输入:

${this`{value`}is} = "This variable name uses braces and backticks."
${this`{value`}is}
This variable name uses braces and backticks.

变量和范围

默认情况下,变量仅在创建它们的范围内可用。

例如,您在函数中创建的变量仅在该函数内可用。您在脚本中创建的变量仅在脚本内可用。如果对脚本进行点源,变量将添加到当前作用域。有关详细信息,请参阅 about_Scopes。

您可以使用范围修饰符来更改变量的默认范围。以下表达式创建一个名为 Computers 的变量。该变量具有全局作用域,即使它是在脚本或函数中创建的。

$Global:Computers = "Server01"

对于在会话外执行的任何脚本或命令,您需要 Using 作用域修饰符来嵌入调用会话作用域中的变量值,以便会话外代码可以访问它们。

有关详细信息,请参阅 about_Remote_Variables。

保存变量

您创建的变量仅在您创建它们的会话中可用。当您关闭会话时,它们就会丢失。

要在您启动的每个 PowerShell 会话中创建变量,请将该变量添加到您的 PowerShell 配置文件中。

例如,要更改每个 PowerShell 会话中的 $VerbosePreference 变量的值,请将以下命令添加到您的 PowerShell 配置文件中。

$VerbosePreference = "Continue"

您可以通过在文本编辑器(例如 notepad.exe)中打开 $PROFILE 文件来将此命令添加到您的 PowerShell 配置文件中。有关 PowerShell 配置文件的更多信息,请参阅 about_Profiles。

变量:驱动

PowerShell 变量提供程序创建一个 Variable: 驱动器,其外观和行为类似于文件系统驱动器,但它包含会话中的变量及其值。

要更改为 Variable: 驱动器,请使用以下命令:

Set-Location Variable:

要列出 Variable: 驱动器中的项目和变量,请使用 Get-ItemGet-ChildItem cmdlet。

Get-ChildItem Variable:

要获取特定变量的值,请使用文件系统表示法指定驱动器名称和变量名称。例如,要获取 $PSCulture 自动变量,请使用以下命令。

Get-Item Variable:\PSCulture
Name                           Value
----                           -----
PSCulture                      en-US

要显示有关 Variable: 驱动器和 PowerShell 变量提供程序的更多信息,请键入:

Get-Help Variable

具有提供程序路径的变量语法

您可以使用美元 ($) 符号为提供程序路径添加前缀,并访问实现 IContentCmdletProvider 接口的任何提供程序的内容。

以下内置 PowerShell 提供程序支持此表示法:

  • about_Environment_Provider
  • about_Variable_Provider
  • about_Function_Provider
  • about_Alias_Provider

变量 cmdlet

PowerShell 包含一组旨在管理变量的 cmdlet。

要列出 cmdlet,请键入:

Get-Command -Noun Variable

要获取特定 cmdlet 的帮助,请键入:

Get-Help <cmdlet-name>
Clear-Variable

删除变量的值。

Get-Variable

获取当前控制台中的变量。

New-Variable

创建一个新变量。

Remove-Variable

删除变量及其值。

Set-Variable

更改变量的值。

参见

  • about_Automatic_Variables
  • about_Environment_Variables
  • about_Preference_Variables
  • about_个人资料
  • about_引用_规则
  • about_Remote_Variables
  • about_范围

您需要 登录账户 后才能发表评论

取消回复欢迎 发表评论:

关灯