验证PowerShell中的编号变量
我正在编写一个脚本,根据用户提供的变量值生成一个文本文件。这些变量是通过另一个应用程序提供的,它们作为环境变量进入Windows 因此,我有以下几点:验证PowerShell中的编号变量,powershell,hashtable,powershell-4.0,indirection,Powershell,Hashtable,Powershell 4.0,Indirection,我正在编写一个脚本,根据用户提供的变量值生成一个文本文件。这些变量是通过另一个应用程序提供的,它们作为环境变量进入Windows 因此,我有以下几点: [hashtable]$variables = @{InstallPath = $env:InstallPath; ADBaseOUValue1 = $env:ADBaseOUValue1; ADBaseOUValue2 = $env:ADBaseOUValue2; LDAPQueryValue1 = $env:LDAPQueryValue1;
[hashtable]$variables = @{InstallPath = $env:InstallPath; ADBaseOUValue1 = $env:ADBaseOUValue1; ADBaseOUValue2 = $env:ADBaseOUValue2; LDAPQueryValue1 = $env:LDAPQueryValue1; LDAPQueryValue2 = $env:LDAPQueryValue2}
此哈希表被截断,用户最多可以定义15个ADBaseOUs和15个LDAP查询,并且还提供了其他变量,但这些变量都没有编号
现在我需要验证数据
<setting name="ADBaseOU1" serializeAs="String">
<value>$env:ADBaseOUValue1</value>
</setting>
<setting name="ADBaseOU2" serializeAs="String">
<value>$env:ADBaseOUValue2</value>
</setting>
听起来您需要的是变量间接寻址,即通过存储在变量中的名称间接访问环境变量;e、 g: 在命令的上下文中:
# ...
{$_.Name -match "LDAPQueryValue(\d+)$") -and ($_.Name -ne "LDAPQueryValue1") -and ($_.Value -ne $null)} {
$currVal = (Get-Item Env:$($_.Name)).Value
If ($currVal -notmatch "&") {
Write-Host ("{0}: Replacing `"&`" with `"&`" in {1}." -f (Get-Date -Format s), $_.Name)
Set-Item Env:$($_.Name) $currVal.Replace("&", "&")
}
}
# ...
这是一个有趣的问题,但它可以更加集中,以造福未来的读者。
$env:Foo = 'bar' # sample env. var.
$varName = 'Foo' # the name of that env. var to use for indirect access
# To GET the value, via PS drive Env:
(Get-Item Env:$varName).Value # same as: $env:Foo
# To SET the value:
Set-Item Env:$varName 'new value' # same as: $env:Foo = 'new value'
# ...
{$_.Name -match "LDAPQueryValue(\d+)$") -and ($_.Name -ne "LDAPQueryValue1") -and ($_.Value -ne $null)} {
$currVal = (Get-Item Env:$($_.Name)).Value
If ($currVal -notmatch "&") {
Write-Host ("{0}: Replacing `"&`" with `"&`" in {1}." -f (Get-Date -Format s), $_.Name)
Set-Item Env:$($_.Name) $currVal.Replace("&", "&")
}
}
# ...