0

次のコマンドを含む c# で powershell スクリプトを実行しようとしています: Get-Credential

Process コマンドを使用してファイルを実行できます。

 public static void RunFile(string ps1File)
        {
            
            var startInfo = new ProcessStartInfo()
            {
                FileName = "powershell.exe",
                Arguments = $"-NoProfile -ExecutionPolicy unrestricted -file \"{ps1File}\"",
                UseShellExecute = false,
                CreateNoWindow = true
            };
            try
            {
                Process P = Process.Start(startInfo);
                P.WaitForExit();
                var result = P.ExitCode;
                System.Diagnostics.Debug.WriteLine("Error: " + result);
            }
            catch (Exception e)
            {
                throw;
            }
        }

しかし、それではPSの戻り値が得られません。そのため、System.Management.Automation を試していますが、PS ウィンドウが起動せず、エラー コードが表示されるという問題が発生しています。

public async static void RunFileTest(string ps1File) {

    PowerShell ps = PowerShell.Create();

    //PowerShell ps = PowerShell.Create();
    if (File.Exists(ps1File)) {

        ScriptBlock sb = ScriptBlock.Create(System.IO.File.ReadAllText(ps1File));
        System.Diagnostics.Debug.WriteLine("SB: " + sb.ToString());


        // execute the script and await the result.
        //var results = await ps.InvokeAsync().ConfigureAwait(false);

        //var results = ps.Invoke();

        PSCommand new1 = new PSCommand();
        
        
        ps.Commands = new1;

        var results = ps.Invoke();

        foreach (var result in results)
        {
            Console.WriteLine(result); //<-- result NOT results
            System.Diagnostics.Debug.WriteLine("Error: " + result.ToString());
        }

        System.Diagnostics.Debug.WriteLine("Errors: " + results);
    } else
    {
        System.Diagnostics.Debug.WriteLine("Error: " + "No File");
    }
}

PS ファイルを実行し、get-credential のようなウィンドウを取得する方法はありますが、PowerShell ウィンドウはありませんか?

ありがとうステファン


編集: 最初の関数 RunFile を使用するときに正しい終了コードを設定するには、return の代わりに exit を使用する必要があるようですが、それでも、組み込みの powershell 関数が優先されます。

4

1 に答える 1