c# - c# - Windows PowerShell 工作流不适用于 Process.Start() 或 PowerShell.Create()
问题描述
我尝试从控制台应用程序运行 Windows PowerShell 工作流脚本。
方法一:
var processInfo = new System.Diagnostics.ProcessStartInfo()
{
FileName = @"C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe",
Arguments = $"\"{scriptFile}\"",
UseShellExecute = false
};
System.Diagnostics.Process.Start(processInfo).WaitForExit();
方法2:
RunspaceConfiguration runspaceConfiguration = RunspaceConfiguration.Create();
using (Runspace runspace = RunspaceFactory.CreateRunspace(runspaceConfiguration))
{
runspace.Open();
RunspaceInvoke runspaceInvoke = new RunspaceInvoke(runspace);
Pipeline pipeline = runspace.CreatePipeline();
pipeline.Commands.Add(new Command(scriptFile));
var psObjects = pipeline.Invoke();
}
上述两种方法给了我错误 -基于 Windows PowerShell x86 的控制台不支持 Windows PowerShell 工作流。打开基于 Windows PowerShell x64 的控制台,然后重试
方法3:
WSManConnectionInfo connectionInfo = new WSManConnectionInfo();
connectionInfo.ShellUri = "Microsoft.PowerShell.Workflow";
Runspace runspace = RunspaceFactory.CreateRunspace(connectionInfo);
runspace.Open();
PowerShell powershell = PowerShell.Create();
powershell.AddCommand(scriptFile, true);
powershell.Invoke();
方法 3 的错误 -连接到远程服务器 localhost 失败并显示以下错误消息:访问被拒绝。
我对使用Set-PSSessionConfiguration有点犹豫,因为我不太了解它的后遗症。我在 Windows Server 2012 上运行此代码。
如何使用 c# 运行工作流?
解决方案
如问题中所述,我使用控制台应用程序来运行 Windows PowerShell 工作流脚本。
我将应用程序的目标平台更改为“x64”,因为该机器具有 64 位操作系统。有效。
之前的配置是“任何 CPU”
任何 CPU意味着 .NET Framework 决定是以 x64 位还是 x86 位运行程序。但在这种情况下,我试图运行一个不属于控制台应用程序的 PowerShell 脚本。因此,我相信我必须将目标平台指定为 x64。
我能够在 Windows Server 2012 R2 和 Windows 10 Enterprise 上使用 C# 成功运行 PowerShell 工作流脚本。方法 1 和 2(有问题提到)都有效。
推荐阅读
- php - Json表php空记录
- python - 使用带有 unicode 转义的 f 字符串
- python - eyed3 在加载 mp3 文件时返回 None
- java - 给定一个 Gradle 项目,如何将 `build.gradle.kts` 文件中的 JAR 依赖项提取到给定文件夹?
- linux - 通过匹配特定列来连接两个文件
- node.js - Node.js 脚本复制文件覆盖以前的文件?
- powershell - Powershell:复制Excel数据透视图并保存
- flutter - Flutter 创建密码规则对话框
- tf.keras - 将函数应用于 tf.keras.Model 输出到批次中的每个样本
- android - App Bundles (AAB) 是否自动使用 APK 签名方案 v2?