gpt4 book ai didi

c# - 从 C# 以 32 位或 64 位运行 PowerShell

转载 作者:行者123 更新时间:2023-12-01 21:56:29 25 4
gpt4 key购买 nike

我构建了一个执行 PowerShell 脚本的 32 位 .NET DLL。我需要它能够以 64 位 32 位交替运行脚本。

我已经知道如何使用命令行来完成:

C:\Windows\Sysnative\cmd /c powershell -ExecutionPolicy ByPass "& 'script.ps1' arguments"
C:\Windows\SysWOW64\cmd /c powershell -ExecutionPolicy ByPass "& 'script.ps1' arguments"

但我需要能够使用 C# 的接口(interface),无论是 System.Management.Automation.PowerShell类或 System.Management.Automation.Runspaces.Pipeline类,以便从脚本中异步收集输出。

最佳答案

@PetSerAl 的评论是解决方案。在进程运行空间外,我可以更改位数。

我在这里复制他的代码:

using System;
using System.Management.Automation;
using System.Management.Automation.Runspaces;
public static class TestApplication {
public static void Main() {
Console.WriteLine(Environment.Is64BitProcess);
using(PowerShellProcessInstance pspi = new PowerShellProcessInstance()) {
string psfn = pspi.Process.StartInfo.FileName;
psfn=psfn.ToLowerInvariant().Replace("\\syswow64\\", "\\sysnative\\");
pspi.Process.StartInfo.FileName=psfn;
using(Runspace r = RunspaceFactory.CreateOutOfProcessRunspace(null, pspi)) {
r.Open();
using(PowerShell ps = PowerShell.Create()) {
ps.Runspace=r;
ps.AddScript("[Environment]::Is64BitProcess");
foreach(PSObject pso in ps.Invoke()) {
Console.WriteLine(pso);
}
}
}
}
}
}

关于c# - 从 C# 以 32 位或 64 位运行 PowerShell,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56739730/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com