我们通过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]
参数类型的原因是为了强制其只能是字符串或空字符串。有人能解释一下这是怎么回事吗?