Доступ к общим параметрам командлета powershell из c # - PullRequest
0 голосов
/ 03 марта 2019

более конкретно Я хочу получить доступ к значению параметра ErrorAction с помощью командлета.

В powershell все работает как положено

function Get-Test {
    [CmdletBinding()]
    param (

    )
    (Get-Variable|where{$_.Name -eq "ErrorActionPreference"}).Value

}
Get-Test -ErrorAction SilentlyContinue

выдаст SilentContinue

Однако тот же вызов в c # выдаст Continue

    [CmdletBinding]
    [Cmdlet(VerbsCommon.Get,"Test")]
    public class MyClass:PSCmdlet{
        protected override void ProcessRecord(){
            base.ProcessRecord();
            WriteObject(((PSVariable) InvokeCommand.InvokeScript($"Get-Variable|where{{$_.Name -eq 'ErrorActionPreference'}}").First().BaseObject).Value);
        }
    }

похоже, что нет никакой связи между параметром ErrorAction и ErrorActionPreference при c#.Я говорю это потому, что если я сделаю

$ErrorActionPreference="SilentlyContinue"
Get-Test # c# version

, то выдаст SilentlyContinue

1 Ответ

0 голосов
/ 04 марта 2019

Как правило, изнутри (по определению скомпилировано ) командлетов существует без необходимости , чтобы определить, является ли общий параметрбыло передано или подразумевается ли ее значение ранее установленной переменной предпочтения :

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

    • Например, вызов WriteVerbose() неявно корректирует свое поведение вывода в зависимости от того, было ли явно указано -Verbose при вызове командлета и,в его отсутствие значение предпочтительной переменной $VerbosePreference в области действия вызывающего абонента.

In расширенные функции -реализованные в PowerShell аналоги скомпилированных командлетов - явно заданные общие параметры автоматически преобразуются в переменные предпочтения с функциональной областью .

  • Это подробность реализации , но, к сожалению, очень проблематичная .

  • Однако, когда он работает , как и предполагалось - в расширенных функциях, начинающихся в той же области области действия, что и вызывающий объект - эффект такой же, как в скомпилированных командлетах: вызовы командлетов, таких как Write-Verboseнеявно выбирают как явно заданные общие параметры, так и значения переменных предпочтения вызывающей стороны (в последнем случае через области действия в одной и той же области области видимости, неявно видящие переменные в (ближайшей) области предков).

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