Выполнить командлеты Service Service в коде C#
Я следовал за http://jeffmurr.com/blog/?p=142
для вызова сценариев powershell из C#. Но я получаю ошибку как
The term 'Connect-ServiceFabricCluster' is not recognized as the name of a
cmdlet, function, script file, or operable program. Check the spelling of
the name, or if a path was included, verify that the path is correct and try again.
Как это сделать, чтобы добиться успеха.
Ниже приведен код, который я попробовал. Я передаю значение для текстового поля команды как Connect-ServiceFabricCluster -ConnectionEndpoint "localhost:19000"
"
public void DeployMicroservices()
{
string result = string.Empty;
ResultBox.Text = string.Empty;
// Initialize PowerShell engine
var shell = PowerShell.Create();
// Add the script to the PowerShell object
//shell.Commands.AddScript(Server.MapPath("~")+"Powershell\\microservice.ps1");
shell.Commands.AddScript(commands.Text);
// Execute the script
var results = shell.Invoke();
if (shell.Streams.Error.Count > 0)
{
var builder = new StringBuilder();
foreach (var error in shell.Streams.Error )
{
builder.Append(error.ToString() + "\r\n");
}
ResultBox.Text = Server.HtmlEncode(builder.ToString());
}
// display results, with BaseObject converted to string
// Note : use |out-string for console-like output
if (results.Count > 0)
{
// We use a string builder ton create our result text
var builder = new StringBuilder();
foreach (var psObject in results)
{
// Convert the Base Object to a string and append it to the string builder.
// Add \r\n for line breaks
builder.Append(psObject.BaseObject.ToString() + "\r\n");
}
// Encode the string in HTML (prevent security issue with 'dangerous' caracters like < >
ResultBox.Text = Server.HtmlEncode(builder.ToString());
}
}
Моя конечная цель - создать сайт, откуда я мог бы развернуть приложение в кластере. Или же я должен войти в систему, где установлен SF, и выполнить команды Power Shell вручную.
2 ответа
Хорошо, я нашел душу. Проблема возникает из-за того, что мое приложение работает в 32-битном режиме, командлеты сервисной фабрики не загружены. Я конвертировал мое приложение в 64-битную версию, и теперь
Connect-ServiceFabricCluster -ConnectionEndpoint "localhost:19000"
определены.
Вам необходимо импортировать ServiceFabric
модуль, если вы хотите использовать его:
InitialSessionState iss = InitialSessionState.CreateDefault();
iss.ImportPSModule(new[]{"ServiceFabric"});
var shell = PowerShell.Create(iss);