5

C# を使用して、実行空間でパラメーターを使用して Powershell ファイルを実行しようとしています。残念ながら、次の出力が得られます。

ホスト プログラムまたはコマンド タイプがユーザー対話をサポートしていないため、ユーザーにプロンプ​​トを表示するコマンドが失敗しました。Windows PowerShell コンソールや Windows PowerShell ISE などのユーザー操作をサポートするホスト プログラムを試し、Windows PowerShell ワークフローなどのユーザー操作をサポートしないコマンド タイプからプロンプト関連のコマンドを削除します。

どうすればいいですか?

現在の c# コード。これは、PS ファイルにあるコマンドを実行する必要があり、json 文字列を返す必要があります。

public string ExecuteCommandDirect(int psId, string psMaster, string psFile)
{
    String FullPsFilePath = @"C:\CloudPS\" + psFile + ".ps1";

    String PsParameters = FullPsFilePath + " -psId " + psId + " -psMaster " + psMaster + " -NonInteractive";

    // Create Powershell Runspace
    Runspace runspace = RunspaceFactory.CreateRunspace();

    runspace.Open();

    // Create pipeline and add commands
    Pipeline pipeline = runspace.CreatePipeline();
    pipeline.Commands.AddScript(PsParameters);

    // Execute Script
    Collection<PSObject> results = new Collection<PSObject>();
    try
    {
        results = pipeline.Invoke();
    }
    catch (Exception ex)
    {
        results.Add(new PSObject((object)ex.Message));
    }

    // Close runspace
    runspace.Close();

    //Script results to string
    StringBuilder stringBuilder = new StringBuilder();
    foreach (PSObject obj in results)
    {
        Debug.WriteLine(obj);
        stringBuilder.AppendLine(obj.ToString());
    }

    return stringBuilder.ToString();

}

PS コード:

param([int]$psId = 0, [string]$psMaster = 'localhost');

$date = Get-Date -Format 'h:m:s' | ConvertTo-Json;

Write-Host $date;

exit;
4

3 に答える 3