gpt4 book ai didi

powershell - PowerShell-如何使用 “Set-StrictMode -version latest”测试变量值?

转载 作者:行者123 更新时间:2023-12-03 08:09:00 26 4
gpt4 key购买 nike

我刚刚开始做一些PowerShell脚本编写,并且在测试变量的值时遇到问题。我尝试在启用所有警告的情况下运行所有​​命令,尤其是在我学习时,以捕获愚蠢的错误。因此,我正在使用CTPV3并使用“set-strictmode -version Latest”设置严格模式。但是我遇到了一个障碍,要检查传入变量的值。这些变量可能已设置,也可能尚未设置。

# all FAIL if $var is undefined under "Set-StrictMode -version latest"
if ( !$var ) { $var = "new-value"; }
if ( $var -eq $null ) { $var = "new-value"; }

我找不到一种方法来测试变量是否具有在缺少变量时不会引起警告的值,除非我关闭严格模式。而且我不想只是为了测试变量而在各处打开和关闭严格模式。我确定我会忘记将其重新打开,并且看起来非常混乱。那是不对的。我想念什么?

最佳答案

您实际上是在测试存在和值(value)这两个方面。而存在测试是在严格模式下操作引起警告的一项。因此,请分开测试。请记住,PowerShell将变量视为另一个提供程序(就像文件或注册表提供程序一样),并且所有PowerShell变量都以文件形式存在于驱动器的根文件夹中,称为“variable:”,很明显,您可以使用与您通常会使用它来测试是否存在其他文件。因此,使用“test-path”:

if (!(test-path variable:\var)) {$var = $null} # test for EXISTENCE & create
if ( !$var ) { $var = "new-value"; } # test the VALUE

注意,可以在子范围内更改当前的严格模式,而不会影响父范围(例如,在脚本块中)。因此,您可以编写一个脚本块,其中包含删除严格模式和设置变量的封装,而不会影响周围程序的严格性。由于变量作用域,这有点棘手。我可以想到两种可能性:

#1-从脚本块返回值
$var = & { Set-StrictMode -off; switch( $var ) { $null { "new-value" } default { $var } }}

或#2-使用范围修饰符
& { Set-StrictMode -off; if (!$var) { set-variable -scope 1 var "new-value" }}

可能最糟糕的部分是容易出错的重复使用$ var(带或不带前导$)。似乎很容易出错。因此,我将使用一个子例程:
function set-Variable-IfMissingOrNull ($name, $value)
{
$isMissingOrNull = !(test-path ('variable:'+$name)) -or ((get-variable $name -value) -eq $null)
if ($isMissingOrNull) { set-variable -scope 1 $name $value }
}
set-alias ?? set-Variable-IfMissingOrNull
#...
## in use, must not have a leading $ or the shell attempts to read the possibly non-existant $var
set-VarIfMissingOrNull var "new-value"
?? varX 1

这可能是我编写脚本的方式。

编辑:在考虑了您较长时间的问题后,我想出了一个更简单的函数,该函数与您的编码样式更加匹配。试试这个功能:
function test-variable
{# return $false if variable:\$name is missing or $null
param( [string]$name )
$isMissingOrNull = (!(test-path ('variable:'+$name)) -or ((get-variable -name $name -value) -eq $null))
return !$isMissingOrNull
}
set-alias ?-var test-variable
if (!(?-var var)) {$var = "default-value"}

希望能有所帮助。

关于powershell - PowerShell-如何使用 “Set-StrictMode -version latest”测试变量值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/509853/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com