gpt4 book ai didi

powershell - 将空字符串转换为 $null 回同一个变量

转载 作者:行者123 更新时间:2023-12-03 01:16:45 27 4
gpt4 key购买 nike

我们通过 PowerShell 向 Active Directory 进行了一些导入,其中有几个字段在数据源中显示为空字符串,但需要在 Active Directory 中设置为 $null

由于这些字段相当多,我尝试创建一个函数将空字符串转换为 $null

问题是,如果我将变量设置回其自身,它仍然是一个空字符串。如果我将其设置为新变量,它就可以正常工作。

function Get-ValueOrNull
{
param(
[Parameter(Mandatory=$true)]
[AllowEmptyString()]
[string]$Value
)

if ([string]::IsNullOrEmpty($Value))
{
return $null
}

return [string]$Value
}

function Test-Function
{
param(
[Parameter(Mandatory=$true)]
[AllowEmptyString()]
[string]$TestValue
)
$TestValue = Get-ValueOrNull -Value $TestValue
$TestValue2 = Get-ValueOrNull -Value $TestValue

Write-Host "TestValue: $($TestValue -eq $null)"
Write-Host "TestValue2: $($TestValue2 -eq $null)"
}

Test-Function -TestValue ""

这里的输出是

PS C:\> .\Test-Function.ps1
TestValue: False
TestValue2: True

这显然是我对 PowerShell 函数参数中的类型不理解的地方。我可以将 [string]$TestValue 更改为 $TestValue,它将起作用。

function Test-Function
{
param(
[Parameter(Mandatory=$true)]
[AllowEmptyString()]
$TestValue
)
...
}
...

输出:

PS C:\> .\Test-Function.ps1
TestValue: True
TestValue2: True

我想保留 [string] 参数类型的原因是强制它应该是字符串或空字符串。有人可以解释一下这是怎么回事吗?

最佳答案

一旦您转换了变量而不是被分配的值,您就严格地键入了该变量。

使用 [int] 更容易看到这一点,因为基本上任何东西都可以成功地转换为 [string]:

$v = [int]'5'
$v.GetType() # int

$v = 'hello'
$v.GetType() # string

[int]$v = '5'
$v.GetType() # int

$v = 'hello'
# Exception:
# Cannot convert value "hello" to type "System.Int32". Error: "Input string was not in a correct format."

当你输入一个参数时,包含该参数的变量也是同样的方式;您可以重新分配它,但右侧必须可分配/castabale/可转换为左侧的类型。

$null 转换为 [string] 是一个空字符串:

([string]$null) -eq ([string]::Empty)  # True

如果您在函数中使用不同的中间变量,您仍然可以强类型化您的参数,正如您使用 $TestValue2 演示的那样。

关于powershell - 将空字符串转换为 $null 回同一个变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42632936/

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