为了账号安全,请及时绑定邮箱和手机立即绑定

使用管道创建新的 PowerShell 进程

使用管道创建新的 PowerShell 进程

C#
函数式编程 2022-11-21 21:20:36
从 CMD 运行它会产生正确的结果:powershell -command "& Get-DiskImage -imagepath C:\\file.vhdx | Get-Disk"<Here is some stuff regarding VHD>我想通过 C# 实现完全相同的运行(没有办法直接运行它,使用一些与 PowerShell 相关的 .NET 东西,或其他东西)。我的代码如下:static void LaunchCommandLineApp(){    ProcessStartInfo startInfo = new ProcessStartInfo();    startInfo.CreateNoWindow = false;    startInfo.UseShellExecute = false;    startInfo.FileName = "powershell";    startInfo.WindowStyle = ProcessWindowStyle.Hidden;    startInfo.RedirectStandardOutput = true;    startInfo.Arguments = "-command \" & get-diskimage -imagepath C:\\file.vhdx | Get-Disk \"";    using (Process exeProcess = Process.Start(startInfo)) {        exeProcess.WaitForExit();        var out = exeProcess.StandardOutput.ReadToEnd();    }}在“out”中我收到一个错误:Get-Disk:无法验证参数“Number”的参数。参数为空。为参数提供有效值,然后再次尝试运行该命令。但完全相同的代码在 CMD 中有效。如果我从参数中删除“| Get-Disk”,我将从Get-DiskImage cmdlet 的“out”中获得正确的输出。另外,正如其他答案所建议的那样,我尝试使用花括号 - 错误没有改变。我应该在“startInfo.Arguments”中输入什么,以便我的“Get-DiskImage”输出将正确地传送到下一个 cmdlet?
查看完整描述

1 回答

?
慕桂英3389331

TA贡献2036条经验 获得超8个赞

这实际上不是从命令行运行和从 C# 运行之间的区别的问题。我创建了一个测试 VHDX,无论是从 C# 还是命令行运行,都得到了相同的(错误)结果,如 OP 所示。

在这两种情况下,省略的| Get-Disk部分显示了有关磁盘映像的信息,缺少磁盘编号,这正是Get-Disk抱怨的内容。我怀疑需要安装图像才能使其具有磁盘号。


查看完整回答
反对 回复 2022-11-21
  • 1 回答
  • 0 关注
  • 92 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信