Powershell Invoke() 在 C# 中为 bolt 命令返回零 运行

Powershell Invoke() returning zero in C# for bolt command run

我可以在 powershell 中 运行 puppet bolt 命令。在 powershell 中,我得到如下输出

Started on winrm://remotemachine

Finished on winrm://remotemachine

STDOUT:
RemoteMachineHostName

Successful on 1 target Run on 1 tartget in 3.2 sec

我的C#如下

        PowerShell ps = PowerShell.Create();

        ps.AddScript("C:\User1\GetRemoteAzureVMHostName.ps1");

        Collection<PSObject> results =  ps.Invoke();  // in results, I'm getting value as 0.

        foreach (PSObject result in results)
        {
            //Do something
        }

我在 Visual Studio 2019 年尝试将构建平台目标更改为 x64,但没有成功。

如何解决上述问题

更新 1:

我在 powershell 脚本中使用了以下命令。

bolt command run hostname --targets winrm://158.28.0.546 --no-ssl-verify --user testuser123 --password test@84p

您似乎无法将 PowerShell 的路径输入到方法 AddScript()。这是一个通过 C# 运行 PowerShell 脚本的示例:

private static string script =File.ReadAllText(@"Path\Sum.ps1");
private static void CallPS1()
{
    using (Runspace runspace = RunspaceFactory.CreateRunspace())
        {
         runspace.Open();

         PowerShell ps = PowerShell.Create();
         ps.Runspace = runspace;
         ps.AddScript(script);
         ps.Invoke();

         foreach (PSObject result in ps.Invoke())
         {
             Console.WriteLine("CallPS1()");
             Console.WriteLine(result);
         }

}

        }

所以你可以尝试把脚本读出来,然后在方法中输入它们AddScript()

我发现,Visual Studio 正在调用 32 位 powershell 并且无法 运行 bolt 命令作为安装在 64 位 powershell 上的 bolt 模块。

我已将项目构建平台更改为 x64 并构建它。

成功了。