Вызвать несколько команд powershell из c # в одной и той же области видимости - PullRequest
2 голосов
/ 09 июня 2009

В основном я хочу сделать следующее:

Шаг 1) Запустите любой .ps1 (или блок скриптов), скрипт выглядит примерно так: $ hello = "world"

Шаг 2) Вызвать Get-Variable -name hello

Шаг 3) Получите выходные данные Get-Variable

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

Ответы [ 2 ]

2 голосов
/ 09 июня 2009

У вас есть несколько вариантов. Проще всего изменить скрипт, если вы можете:

$global:hello = "world"

Однако использование глобалов обычно является плохой практикой. Таким образом, другой подход заключается в том, чтобы ваш скрипт выводил «Hello», а затем записывал вывод вызова конвейера. Просто измените ваш первоначальный скрипт на это:

"world"

Затем вызовите его и получите выходные данные pipe.Invoke () и получите первый объект.

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

$hello = foo.ps1 

Затем получить содержимое переменной $ hello.

1 голос
/ 09 июня 2009

Если вы все еще хотите глобальный (другой ответ охватывает это), вам не нужно использовать Get-Variable из вашего хост-приложения.

Создайте пространство выполнения и выполните сценарий.

Затем вы можете получить доступ к переменным из пространства выполнения:

value = myRunspace.SessionStateProxy.GetVariable("name");
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...