【发布时间】:2019-08-22 22:01:25
【问题描述】:
从 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:无法验证参数“数字”上的参数。参数为空。为参数提供一个有效值,然后再次尝试运行该命令。
但完全相同的代码在 CMD 中工作。如果我从参数中删除“| Get-Disk”,我将在 Get-DiskImage cmdlet 的“out”中得到正确的输出。
另外,正如其他答案所建议的那样,我尝试使用花括号 - 错误没有改变。
我应该在“startInfo.Arguments”中输入什么,这样我的“Get-DiskImage”输出才能正确传送到下一个 cmdlet?
【问题讨论】:
-
get-diskimage 的输出是什么?输入正在寻找错误的类型。
-
@ClaytonHarbich 只是一个带有信息的文本,如果我们省略“| Get-Disk”
-
这是一个很好的观点。该命令在 PowerShell 终端中有效吗?
标签: c# powershell