Репликация поведения PowerShell для записи на хост - PullRequest
2 голосов
/ 01 ноября 2019

Что-то интересное, что я заметил в поведении PowerShell Write-Host, это то, что он, по-видимому, выводит почти все, если он не привязан к другому встроенному параметру.

Например:

PS> Write-Host "hello" "everyone is cool" "awesome sauce" -ForegroundColor Green "what what"
hello everyone is cool awesome sauce what what (pretend this is green)

Таким образом, даже если объекты для вывода делятся на ForegroundColor, они все равно выводят «что что».

Как? Как я могу повторить это поведение и создать своего рода прокси-командлет, чтобы учесть это поведение?

У меня есть требование для вывода информации на консоль, если какое-то глобальное условие верно с разными цветами. Я получил этот скрипт из вторых рук, и он был описан в

  If ($Global:SomeCondition -eq $True) {
       Write-Host "stuff" "more stuff" -ForegroundColor $VaryingColor
   }

Я хотел бы сделать его немного более кратким, поэтому я написал следующее:

Function Write-IfSomeCondition {
    Param(
        [Parameter(
            Mandatory = $True,
            ValueFromPipeline = $True)
        ][Object[]]$Object,
        [System.ConsoleColor]$ForegroundColor = (. {If ((Get-Host).UI.RawUI.ForegroundColor -ne -1) {(Get-Host).UI.RawUI.ForegroundColor} Else {[System.ConsoleColor]::White}})
    )

    If ($Condition) {
        $Object | Write-Host -ForegroundColor $ForegroundColor
    }
}

Но вызов его даетошибка:

PS> Write-IfSomeCondition "hello" "hello" "hello" -ForegroundColor Gray
Write-IfSomeCondition : A positional parameter cannot be found that accepts argument 'hello'.

1 Ответ

2 голосов
/ 01 ноября 2019

то, что вы хотите, это атрибут параметра ValueFromRemainingArguments. он вставляет все необязательные аргументы в указанный параметр. это более или менее противоположность $PSBoundParameters. [ ухмылка ]

с сайта MSDocs по теме ...

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...