C#和PowerShell之间的双引号出现问题



这是我在powershell中工作的代码,但要将其放入C#中,我必须替换"字符串";至"$字符串2";;但它不起作用(:它必须是"$string"才能起作用。。。我试过"$string"和($string(,但只是这个"$字符串";工作帮助

Powershell Code Working 100% :
$string2 = C:/Users/Sycho/Desktop/youtube-dl.exe -F https://youtu.be/f1A7SdVTlok | Out-String -stream | Select-String 133 ; "$string2".SubString(105)
var mainForm = Application.OpenForms.OfType<Form1>().Single();
string urlBoxText3 = mainForm.Controls["URL_BOX"].Text;
ProcessStartInfo startInfo6 = new ProcessStartInfo();
startInfo6.FileName = @"powershell.exe";
startInfo6.Arguments = "$string2 = C:/Users/Sycho/Desktop/youtube-dl.exe -F " + urlBoxText3 + "| Out-String -stream | Select-String 133 ; "$string2".SubString(105)";
startInfo6.RedirectStandardOutput = true;
startInfo6.RedirectStandardError = true;
startInfo6.UseShellExecute = false;
startInfo6.CreateNoWindow = true;
startInfo6.Verb = "runas";
Process process6 = new Process();
process6.StartInfo = startInfo6;
process6.Start();
string output = process6.StandardOutput.ReadToEnd();
label4.Text = output;
  • 您说PowerShell最终必须看到"$string2".SubString(105)才能使您的命令工作。

  • 当您通过PowerShell的CLIpowershell.exe调用PowerShell并通过(位置隐含的(-Command/-c参数将命令传递给它时,必须"字符转义为",以便PowerShell在命令行分析后将它们保留为执行的命令的一部分。

    • 这个答案对此有更详细的解释

因此,将"$string2"替换为\"$string2\"(原文如此(。


退一步:您可以按照如下方式精简代码,这样就不需要在"..."中封装$string2

startInfo6.Arguments = "$string2 = (C:/Users/Sycho/Desktop/youtube-dl.exe -F " + urlBoxText3 + " | Select-String 133).Line; $string2.SubString(105)";
  • 通过访问Select-String调用发出的输出对象的.Line属性,将直接返回字符串(匹配行((而不是默认发出的匹配信息对象(。

  • 已删除Out-String -Stream,因为这是不必要的:PowerShell在调用外部程序(如youtube-dl.exe(时,默认情况下会显示此行为。

最新更新