Powershell: скрипт для поиска позволенныхServerVariables в applicationHost.config проверяет наличие дубликатов - PullRequest
0 голосов
/ 31 января 2019

Я пытаюсь добавить новую переменную сервера

Add-WebConfiguration /system.webServer/rewrite/allowedServerVariables -atIndex 0 -value @{name="HTTP_COOKIE"}

, но я получаю следующую ошибку

Add-WebConfigurationProperty : Filename: 
Error: Cannot add duplicate collection entry of type 'add' with unique key attribute 'name' set to 'Test'
At line:1 char:1
+ Add-WebConfigurationProperty -pspath 'MACHINE/WEBROOT/APPHOST'  -filt ...
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : NotSpecified: (:) [Add-WebConfigurationProperty], COMException
    + FullyQualifiedErrorId : System.Runtime.InteropServices.COMException,Microsoft.IIs.PowerShell.Provider.AddConfigurationPropertyCommand

Я мог бы отменить использование блока try catch, но хотел бы проверить, если переменнаяуже существует и пропустите Добавление, если оно уже существует.

Может кто-нибудь сообщить мне, как я могу сделать эту проверку?

Ответы [ 2 ]

0 голосов
/ 31 января 2019

@ marsze way сделал с помощью Get-WebConfiguration.

Мой ответ - с помощью Get-WebConfigurationProperty.Оба будут работать.

Write-Host "Getting allowed server variables..."
$allowedServerVariables = Get-WebConfigurationProperty -PSPath "MACHINE/WEBROOT/APPHOST" -filter "system.webServer/rewrite/allowedServerVariables/add" -Name name
Write-Host "Found $($allowedServerVariables.Length)..."

if ( ($allowedServerVariables -eq $null) -or ( $allowedServerVariables | ?{ $_.Value -eq "HTTP_COOKIE1" } ).Length -eq 0 ) {
    #Configure IIS To Allow 'HTTPS' as a server variable - Must be done at a applicationhosts.config level
    Write-Host "Adding HTTPS to allowed server variables..."
    Add-WebConfigurationProperty -pspath "MACHINE/WEBROOT/APPHOST"  -filter "system.webServer/rewrite/allowedServerVariables" -name "." -value @{name='HTTP_COOKIE1'}
}

Write-Host "Getting allowed server variables...Finished"
0 голосов
/ 31 января 2019

Попробуйте добавить следующую проверку, например:

$path = "/system.webServer/rewrite/allowedServerVariables"
$value = "HTTP_COOKIE"
if ((Get-WebConfiguration $path).Collection.Name -notcontains $value) {
    Add-WebConfiguration $path -AtIndex 0 -Value @{ name = $value }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...