C # PowerShell Get-Module - PullRequest
       2

C # PowerShell Get-Module

0 голосов
/ 03 мая 2018

Я пытаюсь создать «настраиваемую» оболочку PowerShell для некоторых наших разработок и пользовательских модулей Azure. Я хочу получить список модулей, выполнив следующее, но outputCollection пуст и событие DataAdded не сработает.

Что, черт возьми, мне здесь не хватает?

PS: это PowerShell 5, и я использовал пакет Nuget Microsoft.PowerShell.5.ReferenceAssemblies

using System;
using System.Management.Automation;
using System.Threading;
namespace TestShell
{
    class Program
    {
        static void Main(string[] args)
        {
            using (PowerShell PowerShellInstance = PowerShell.Create())
            {
                PowerShellInstance.AddScript("Get-Module");

                PSDataCollection<PSObject> outputCollection = new PSDataCollection<PSObject>();
                outputCollection.DataAdded += outputCollection_DataAdded;
                PowerShellInstance.Streams.Error.DataAdded += Error_DataAdded;
                IAsyncResult result = PowerShellInstance.BeginInvoke<PSObject, PSObject>(null, outputCollection);
                while (result.IsCompleted == false)
                {
                    Console.WriteLine("Waiting for pipeline to finish...");
                    Thread.Sleep(1000);
                }
                Console.WriteLine("Execution has stopped. The pipeline state: " + PowerShellInstance.InvocationStateInfo.State);
                foreach (PSObject outputItem in outputCollection)
                {
                    Console.WriteLine(outputItem.BaseObject.ToString());
                }
            }
        }

        static void outputCollection_DataAdded(object sender, DataAddedEventArgs e)
        {
            Console.WriteLine("Object added to output.");
        }

        static void Error_DataAdded(object sender, DataAddedEventArgs e)
        {
            Console.WriteLine("An error was written to the Error stream!");
        }
    }
}

1 Ответ

0 голосов
/ 03 мая 2018

Изменение моих комментариев к ответу:

Добавление параметра -ListAvailable, кажется, работает для меня:

PowerShellInstance.AddScript("Get-Module -ListAvailable");

по причинам, которые я не понимаю, вывод Get-Module пуст, хотя $env:PsModulePath выглядит правильно, а PowerShell -NoProfile по-прежнему загружает пару модулей, при запуске через C # он по умолчанию не загружает какие-либо модули .

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