Я пишу скрипт для генерации текстового файла на основе предоставленных пользователем значений переменных.Переменные предоставляются через другое приложение, и они входят в Windows как переменные среды.
Итак, у меня есть следующее:
[hashtable]$variables = @{InstallPath = $env:InstallPath; ADBaseOUValue1 = $env:ADBaseOUValue1; ADBaseOUValue2 = $env:ADBaseOUValue2; LDAPQueryValue1 = $env:LDAPQueryValue1; LDAPQueryValue2 = $env:LDAPQueryValue2}
Эта хеш-таблица урезана, пользователь может определить до 15 ADBaseOU и 15 запросов LDAP, и есть другие переменные, но ни одна из нихпронумерованы.
Теперь мне нужно проверить данные.
- Мне нужно убедиться, что ADBaseOUValue1 и LDAPQueryValue1 не равны нулю
- Мне нужно убедиться, что ADBaseOUValue1 соответствует шаблону регулярных выражений
- Мне нужно убедиться, что, если в LDAPQueryValue1 есть амперсанды (&), за которыми не стоит «amp;», то я заменяю их
- Затем мне нужно выполнить обе проверки 2 и 3 для любых ADBaseOUValue # и LDAPQueryValue #, предоставленных пользователем.
Я выполняю проверку данных для других переменных (например, $ env: InstallPath), чтобы убедиться, что они не равны NULL и имеют ожидаемые типы данных.
В переменных $env: ADBaseOUValue2 до 15 и $ env: LDAPQueryValue2 до 15, как бы я:
- Определить имя переменной при выполнении проверки «If» по ее регулярному выражению
- Определить имя переменнойпри выполнении «замены» для «&»
Как только переменные будут проверены, значения перейдут в строку Here вроде:
<setting name="ADBaseOU1" serializeAs="String">
<value>$env:ADBaseOUValue1</value>
</setting>
<setting name="ADBaseOU2" serializeAs="String">
<value>$env:ADBaseOUValue2</value>
</setting>
Спасибо, вот что яесть прямо сейчас (для Vчасть алидации):
Switch ($variables.GetEnumerator()) {
{($_.Name -eq "ADBaseOUValue1") -and ($_.Value -ne $null)} {
If ($env:ADBaseOUValue1 -notmatch $ldapUrlRegex) {
Write-Host ("{0}: The variable `"{1}`" was not a valid LDAP URL. Please re-run the script and provide a valid value for the variable." -f (Get-Date -Format s), $_.Name)
$variableErrorCount++
}
}
{($_.Name -eq "ADBaseOUValue1") -and ($_.Value -eq $null)} {
If ($env:ADBaseOUValue1 -notmatch $ldapUrlRegex) {
Write-Host ("{0}: The variable `"{1}`" was null. Please re-run the script and provide a value for the variable." -f (Get-Date -Format s), $_.Name)
$variableErrorCount++
}
}
{($_.Name -match "ADBaseOUValue(\d+)$") -and ($_.Name -ne "ADBaseOUValue1") -and ($_.Value -ne $null)} {
If ($env:ADBaseOUValue1 -notmatch $ldapUrlRegex) {
Write-Host ("{0}: The variable `"{1}`" was not a valid LDAP URL. Please re-run the script and provide a valid value for the variable." -f (Get-Date -Format s), $_.Name)
$variableErrorCount++
}
}
{($_.Name -eq "LDAPQueryValue1") -and ($_.Value -ne $null)} {
If ($env:LDAPQueryValue1 -notmatch "&") {
Write-Host ("{0}: Replacing `"&`" with `"&`" in {1}." -f (Get-Date -Format s), $_.Name)
$env:LDAPQueryValue1 = $env:LDAPQueryValue1.Replace("&", "&")
}
}
{($_.Name -eq "LDAPQueryValue1") -and ($_.Value -eq $null)} {
If ($env:ADBaseOUValue1 -notmatch $ldapUrlRegex) {
Write-Host ("{0}: The variable `"{1}`" was null. Please re-run the script and provide a value for the variable." -f (Get-Date -Format s), $_.Name)
$variableErrorCount++
}
}
{($_.Name -match "LDAPQueryValue(\d+)$") -and ($_.Name -ne "LDAPQueryValue1") -and ($_.Value -ne $null)} {
If ($env:??? -notmatch "&") {
Write-Host ("{0}: Replacing `"&`" with `"&`" in {1}." -f (Get-Date -Format s), $_.Name)
$env:??? = $env:???.Replace("&", "&")
}
}
}