Профиль Powershell для добавления параметров к определенной команде
У меня есть определенная команда, к которой я хочу добавить параметр в качестве функции профиля powershell. Хотя я не совсем уверен, что это лучший способ зафиксировать каждый раз, когда эта команда запускается, любая информация будет полезна.
Команда:terraform plan
Каждый раз, когда план выполняется, я хочу иметь возможность проверять параметры и видеть,-lock=true
передается, а если нет, то добавляется-lock=false
к этому. Есть ли подходящий способ зафиксировать запуск этой команды, не создавая совершенно новую функцию, которая строит эту команду? До сих пор единственный способ захвата команд, который я видел, - этоStart-Transcript
но это не совсем то, что мне нужно.
1 ответ
Не отвлекать от другого опубликованного ответа, а предложить альтернативное решение, вот мое мнение:
$Global:CMDLETCounter = 0
$ExecutionContext.InvokeCommand.PreCommandLookupAction = {
Param($CommandName, $CommandLookupEvents)
if ($CommandName -eq 'terraform' -and $Global:CMDLETCounter -eq 0)
{
$Global:CMDLETCounter++
$CommandLookupEvents.CommandScriptBlock = {
if ($Global:CMDLETCounter -eq 1)
{
if (-not ($args -match ($newArg = '-lock=')))
{
$args += "${newArg}true"
}
}
& "terraform" @args
$Global:CMDLETCounter--
}
}
}
Вы можете воспользоваться$ExecutionContext
автоматическая переменная для доступа к синтаксическому анализатору PowerShell и вставки собственной логики для определенного выражения. В вашем случае вы будете использоватьterraform
который ввод команды будет проанализирован для каждого токена и проверен на соответствие-lock=
в существующих аргументах. Если не найдено, дополнить-lock=true
к текущим аргументам и снова выполните команду.
Счетчик вы видите($Global:CMDLETCounter
) состоит в том, чтобы предотвратить бесконечный цикл, поскольку он просто рекурсивно вызывает сам себя, и нет ничего, что могло бы его остановить.