Способ использования параметров PowerShell в сравнении?

У меня есть некоторый код PS, который загружает XML через HTTP и проверить некоторые XML в нем

[xml]$stuff = $wc.DownloadString('url') 

$xmlvalue = $stuff.SelectSingleNode('xpath') 

if ($xmlvalue.'#text' -eq "value")

{
$state = 'OK'
Write-Host 'ok'    
}

Все, что мне нужно, это возможность запустить этот скрипт как

script.ps1 -url -xpath -operator -value

Это вообще не проблема, кроме оператора

Я не могу использовать параметр как -operator "-eq", потому что это будет ошибка

Есть ли способ сделать это?

2 ответа

Вы можете создать скрипт-блок на лету:

Param
(
    [string]$Url,

    [string]$Xpath,

    [ValidateSet('eq', 'ne', 'like')]
    [string]$Operator,

    [string]$Value
)

[xml]$stuff = $wc.DownloadString('url') 

$xmlvalue = $stuff.SelectSingleNode('xpath') 

$ScriptBlock = @'
    if($xmlvalue.'#text' -{0} "value")
    {{
        $state = 'OK'
        Write-Host 'ok'    
    }}
'@ -f $Operator

. $([scriptblock]::Create($ScriptBlock))

Я чувствую, что вы могли бы упростить это, если бы вы использовали вместо этого регулярное выражение. Тогда вам не нужно беспокоиться о динамических операторах. Вы просто проводите сравнение строк, чтобы получить эквивалент -like-match а также -eq с правильным рисунком.

if ($xmlvalue.'#text' -match $pattern){
    $state = 'OK'
    Write-Host 'ok'    
}

Я бы оставил условие if просто так. $pattern это то, что вы изменили бы.

  • Начинается с: ^text
  • Заканчивается на " text$
  • Равно: ^text$
  • Строка содержит: text

Просто нужно быть осторожным в отношении метасимволов регулярных выражений. Вы всегда можете использовать метод побег regex, чтобы вам не пришлось беспокоиться об этом. Таким образом, простая строка содержит пример:

$pattern = [regex]::escape("c:\temp")

Возможно изучение кривой с регулярным выражением, но это мощная вещь, чтобы знать. Посмотрите на этот вопрос, который охватывает то, что я собираюсь показать вам. Конкретно ответ и где это охватывает якоря.

Ссылка - Что означает это регулярное выражение?

Другие вопросы по тегам