fsk33 2025-02-02 19:03 采纳率: 73.5%
浏览 11

C#运行Windows PowerShell多行脚本问题,不能成功

以下为PowerShell多行脚本,脚本内容如下,复制到PowerShell中能正确执行:


$DICOM_PATH = "D:\DICOMFILE\20250117\1.2.156.112605.137174094780284.250117011704.2.10460.27099"
$Socket = New-Object System.Net.Sockets.TcpClient("localhost", 17179)
$Stream = $Socket.GetStream()
$Writer = New-Object System.IO.StreamWriter($Stream)
$Writer.WriteLine("dicom:get -l `"$DICOM_PATH`"")
$Writer.Flush()
$Socket.Close()

C#编程,我用以下代码执行上述PowerShell多行脚本,不成功,请查看原因,谢谢。

private void button22_Click(object sender, EventArgs e)
        {
           // 构建 PowerShell 脚本
            StringBuilder psCommand = new StringBuilder();
            psCommand.Append("$DICOM_PATH = \"" + lujin.Replace("\"", "\\\"") + "\"\n");
            psCommand.Append("$Socket = New-Object System.Net.Sockets.TcpClient(\"localhost\", 17179)\n");
            psCommand.Append("$Stream = $Socket.GetStream()\n");
            psCommand.Append("$Writer = New-Object System.IO.StreamWriter($Stream)\n");
            psCommand.Append("$Writer.WriteLine(\"dicom:get -l `\"$DICOM_PATH`\"\")\n");
            psCommand.Append("$Writer.Flush()\n");
            psCommand.Append("$Socket.Close()\n");

            // 启动 PowerShell 进程
            try
            {
                ProcessStartInfo startInfo = new ProcessStartInfo();
                startInfo.FileName = "powershell.exe";
                startInfo.Arguments = "-NoExit -Command \"" + psCommand.ToString().Replace("\"", "\\\"") + "\"";  
                startInfo.UseShellExecute = false; 
                startInfo.Verb = "runas"; 
                Process process = new Process();
                process.StartInfo = startInfo;
                process.Start();
            }
            catch (Exception ex)
            {
                Console.WriteLine("无法以管理员方式启动PowerShell: " + ex.Message);
            }
        }

  • 写回答

3条回答 默认 最新

  • 专家-赤兔[在线] 优质创作者: 编程框架技术领域 2025-02-02 19:03
    关注

    以下回复引自免费微信小程序:皆我百晓生。 如问题解决,还请采纳。如仍有疑问,请回复留言或私信博主,以便获得更精准的帮助。

    在POWERSHELL中运行一个多行脚本时遇到的问题是无法正确执行。这可能是因为多个命令被组合在一起导致的错误,或者可能是系统设置中的错误。以下是解决这个问题的一些方法:

    1. 检查环境配置

    确保你的计算机上已经安装了POWERSHELL,并且POWERSHELL版本与你正在使用的操作系统兼容。如果使用的是其他操作系统或POWERSHELL版本,可能需要重新安装或更新。

    2. 更新POWERSHELL

    如果你是在使用较旧的POWERSHELL版本,可能需要更新它以支持新的功能和特性。你可以通过右键点击开始菜单,选择“管理 POWERSHELL”,然后选择“更新”。在更新过程中,你需要确认所有已知的错误。

    3. 确认命令拼写

    检查并确保每个命令都按照正确的顺序拼接。有时候,由于语法错误或输入格式不匹配,会导致脚本无法正确运行。

    4. 调整环境变量

    如果你使用的是POWERSHELL,那么可能需要修改环境变量以使脚本能够正常工作。例如,在POWERSHELL中添加以下属性:

    ADD-TYPE -ASSEMBLYNAME SYSTEM.IO.PORTS
    SET-HOSTENVIRONMENTVARIABLE -NAME COMPORTPATH -VALUE D:\DICOMFILE\20250117\1.2.156.112605.1
    

    5. 使用调试工具

    POWERSHELL有一些内置的调试工具,可以帮助你定位错误位置。例如,使用GET-PROCESS来查看进程信息,看看是否有一个名为COMPORTPATH的变量被误用了。

    6. 寻求帮助

    最后,考虑向社区寻求帮助。POWERSHELL社区通常会提供有用的建议和支持。他们可能会有更专业的解决方案。

    解决方案示例:

    方法一:检查环境配置

    1. 确保POWERSHELL安装

      PIP INSTALL POWERSHELL
      
    2. 检查POWERSHELL版本

      PYTHON3 --VERSION
      
    3. 更新POWERSHELL

      POWERSHELL --VERSION
      
    4. 确认命令拼写

      $COMMAND = 'CD C:\USERS\[USERNAME]\DOCUMENTS\SCRIPTS; ECHO "HELLO, WORLD!"'
      $RESULT = EVAL("$COMMAND")
      IF ($RESULT == "HELLO, WORLD!") {
          ECHO "SUCCESS"
      } ELSE {
          ECHO "ERROR: $($RESULT)"
      }
      

    方法二:调整环境变量

    1. 更改COMPORTPATH

      SET-HOSTENVIRONMENTVARIABLE -NAME COMPORTPATH -VALUE D:\DICOMFILE\20250117\1.2.156.112605.1
      
    2. 查找错误

      FIND /S /C COMPORTPATH D:\DICOMFILE\20250117\1.2.156.112605.1 | GREP -I ERROR
      
    3. 尝试重新启动POWERSHELL

      POWERSHELL -FORCE RESTART
      

    方法三:寻找社区资源

    如果你遇到了类似的问题,可以尝试联系微软支持团队,他们通常会有更好的解决方案。此外,MICROSOFT官方文档也有许多关于如何优化POWERSHELL的方法和技巧。

    以上这些方法都是针对单个脚本执行的情况,如果涉及多个脚本同时运行,可能需要更复杂的策略。

    评论

报告相同问题?

问题事件

  • 创建了问题 2月2日