Хостинг PowerShell на C#: неявное удаленное взаимодействиеC#

Место общения программистов C#
Ответить
Anonymous
 Хостинг PowerShell на C#: неявное удаленное взаимодействие

Сообщение Anonymous »

Я хочу использовать командлет PowerShell 7 Get-ClusterResource на C# под Windows 11, например:

Код: Выделить всё

using System.Collections.ObjectModel;
using System.Management.Automation;

namespace PSHosting;

class Program
{
static void Main()
{
using (var powerShell = PowerShell.Create())
{
powerShell.AddScript("Get-ClusterResource -Cluster 'WSFC1'");
Collection result = powerShell.Invoke();
}
}
}
У меня установлен пакет Windows RSAT FailoverCluster.
При вызове Get-ClusterResource в сеансе PowerShell PowerShell использует метод неявного удаленного взаимодействия, чтобы создать и загрузить прокси-модуль для исходного модуля FailoverCluster, а затем выполнить команду на удаленном компьютере. Загруженный прокси-модуль кэшируется на время существования сеанса PowerShell (и я думаю, именно по этой причине удаление как прокси-модуля, так и папки исходного модуля, вероятно, не повлияет на текущий сеанс PowerShell), поэтому каждый раз, когда открывается новый сеанс PowerShell, неявное удаленное взаимодействие создает и загружает прокси-модуль заново.
В какой-то момент во время моих попыток получить работая Get-ClusterResource в моем коде C#, я включил следующее в приведенный выше код (перед оператором using):
  • Команда Set-ExecutionPolicy, которая позволяет PowerShell выполнять произвольные сценарии (скорее всего, это необходимо, поскольку загрузка модуля (см. ниже) и/или неявное удаленное взаимодействие будут запускать .ps1 и/или .psm скрипты, содержащиеся в папке модуля FailoverCluster)
  • Команда Import-Module, которая загружает модуль FailoverCluster в текущий сеанс
Интересно, что приведенный выше код все еще работает в моей среде после удаления команд 1. и 2. выше из кода и после удаления прокси-модуля C:\Users\\AppData\Local\Temp\remoteIpMoProxy_FailoverClusters_2.0.0.0_localhost_.
Что еще более интересно для меня, так это то, что кэшированный прокси-модуль, похоже, имеет какое-то постоянное состояние при использовании в моем коде C#: я могу повторно запускать приведенный выше код успешно даже после перезагрузки Windows.
Моя конечная цель — опубликовать код, подобный приведенному выше, вместе со всеми необходимыми модулями и другим материалом, чтобы он мог успешно работать на компьютере только со стандартной версией Windows 11 (единственное исключение: установлена среда выполнения .NET, соответствующая моей версии C#, поэтому мне не нужно ее распространять).
Из того, что я знаю на данный момент, это означает, что мне нужно чтобы:
  • Включить папку модуля FailoverCluster в мою публикацию и
  • Добавить команды 1. и 2. выше в мой код (надеюсь, ссылка на модуль FailoverCluster работает с относительным путем)
Я прав или я что-то упустил?

Подробнее здесь: https://stackoverflow.com/questions/797 ... t-remoting
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C#»