在 PowerShell 中使用全局变量

Marion Paul Kenneth Mendoza 2023年1月30日
  1. PowerShell 全局变量简介
  2. PowerShell 全局变量的好处
  3. 声明 PowerShell 全局变量
  4. 在 PowerShell 中将全局变量作为参数传递
  5. 在 PowerShell 中使用 Set-Variable 为全局变量设置值
在 PowerShell 中使用全局变量

变量是可以存储特定值以供以后处理或向用户显示其重要性的对象。Windows PowerShell 中有多种类型的变量。

我们将讨论 Windows PowerShell 全局变量并在 PowerShell 中实现它们。

PowerShell 全局变量简介

每个变量都有特定的范围。当我们在函数内部定义自定义变量时,它只能在该函数内部访问,而不能在外部访问。

示例代码:

function sampleFunction{
    $firstvar =35;
    Write-Host $firstvar;
}

Write-Output $firstvar

上面脚本的输出将是 null,因为这是 PowerShell 中任何变量的默认值。在这种情况下,我们应该使用全局变量,因为脚本、函数和命令可以跨会话访问它,从而在整个程序和其他方法中访问变量。

PowerShell 全局变量的好处

  1. 全局变量存储字符串、整数、数组、对象、哈希表等所有值。
  2. 全局变量可以包含不同对象的集合。
  3. 为每个全局变量分配特定数量的内存。
  4. 每个全局变量必须以美元符号 ($) 开头。
  5. 在程序开始时声明一个全局变量是编程的最佳实践。
  6. 如果我们不给你的变量赋值,默认值为 null。
  7. 全局变量的名称可以包含数字、字母和下划线 (_) 符号的组合。如果我们想使用其他特殊字符,请用大括号将变量的全名括起来。

声明 PowerShell 全局变量

要声明 PowerShell 全局变量,请使用以下语法。

示例代码:

$global: myVariable = "apple"

如果我们选择不提供任何值,你可以显式分配一个 $null 值。

示例代码:

$global: myVariable2 = $null

我们必须提到 $global 让 PowerShell 知道这个变量应该在整个程序中可用。

以下代码显示局部变量和全局变量共享相同的名称。因此,局部变量将在函数内部优先,但局部变量在函数外部没有值,因此脚本使用全局变量。

示例代码:

$global:num1 = 55;

function calculateAge{
    $num1 = 45;
    Write-Host $num1 "inside the function";
}

Write-Host $num1 "outside the function";
calculateAge;

输出:

45 inside the function
55 outside the function

在 PowerShell 中将全局变量作为参数传递

我们还可以将全局变量作为参数传递给函数,并在函数内部设置其值。但是,当然,你必须将全局变量作为 REF 对象。

示例代码:

$global:finalVariable = $null;

function addValue ($num1, $num2, [REF]$ans){
    $ans.Value = $num1 + $num2;
}

addValue 2 3 ([REF]$global:finalVariable);

Write-Host "The final value is:" $global:finalVariable;

输出:

The final value is: 5

在 PowerShell 中使用 Set-Variable 为全局变量设置值

将值设置为 Windows PowerShell 全局变量的最简单方法是使用 Set-Variable cmdlet。

示例代码:

Set-Variable -Name "finalVariable" -Value "6" -Scope Global
Get-Variable -Name "finalVariable"

输出:

Name                           Value
----                           -----
finalVariable                  6

该脚本将显示 6 的值。请注意,我们必须将变量的范围称为全局

Set-Variable 命令还带有一个可选参数,我们可以使用它来确定全局变量的性质。

示例代码:

Set-Variable -Name "finalVariable" -Value "6" -Scope Global -Option Read-Only

上面的代码将生成一个全局变量并为其设置一个值,但它将是一个只读全局变量。

示例代码:

Set-Variable -Name "finalVariable" -Value "6" -Scope Global -Option Constant

既然我们了解了全局变量,那么在你开始在程序中使用它们之前请注意。PowerShell 全局变量不适合生成变量或存储值,因为我们没有访问控制。

换句话说,很难跟踪全局变量的值,因为我们可以在程序中的任何地方更改它,并且测试它们非常困难,因为它们与代码紧密耦合。

这就是为什么有经验的程序员通常不使用全局变量的原因,因为它们可能会在大量程序中导致一些难以发现的错误。

Marion Paul Kenneth Mendoza avatar Marion Paul Kenneth Mendoza avatar

Marion specializes in anything Microsoft-related and always tries to work and apply code in an IT infrastructure.

LinkedIn