【问题标题】:Powershell Script not working out of ISEPowershell 脚本无法在 ISE 中运行
【发布时间】:2017-07-19 20:16:16
【问题描述】:

我有一个在 ISE 中运行良好的 powershell 脚本,但是当我直接从 .ps1 文件运行它时,它会在此时停止:

Write-Host "Attempting to start FFMPEG Process with arguments:$ArgumentList::::" -ForegroundColor Green
Start-Process $SCRIPT:FFMPEGLocation $ArgumentList -Wait

我得到了Write-Host 打印输出,带有正确的参数列表,但没有弹出启动进程或任何内容的窗口。我确保将 SCRIPT 范围变量用于函数之外的任何内容。它在 ISE 中运行良好,只是在我在控制台中运行时不行。也没有错误,$SCRIPT:FFMPEGLocation 变量是要执行的 exe 的直接路径。

任何帮助将不胜感激,如果您需要更多帮助,请告诉我。

PSVersion               5.1.14393.1066   
OSVersion               10.0.14393

【问题讨论】:

  • 为什么你认为你需要script 范围作为可执行文件的路径和文件名?为什么Start-Process?事实上,你为什么需要脚本呢?只需使用所需参数从 PowerShell 提示符运行可执行文件。
  • 谢谢比尔!我当前的脚本超过 200 行,中途我意识到我应该改用 C# 编写代码,但是我滚动的太多了。我有某些变量,例如在 try { 部分之外的脚本顶部声明的 $SCRIPT:FFMPEGLocation。我知道,我是个坏孩子,我试图用脚本语言做太多事情。我现在只是尝试在 ISE 之外完成这项工作,然后我可以稍后在 C# 中制作程序或服务。
  • 无论是否在 ISE 中,在 PowerShell 中运行命令都可以正常工作。您的问题中没有包含几乎足够的信息。 (如果我不得不猜测,你有一个范围界定问题。)
  • 是的,比尔。你是对的,我没有提供足够的信息。在我遇到的许多其他问题中,这可能是一个范围界定问题,这就是为什么我将 SCRIPT Scope 用于未在同一块中声明和设置的任何内容。输出显示控制台中的所有内容都是正确的,这就是我对范围感到困惑的原因。但我会一路跋涉。
  • 我建议从小处着手,编写一个非常短的脚本,其中只包含重现问题所需的绝对最少代码量。这通常被称为SSCCE

标签: powershell powershell-4.0


【解决方案1】:

根据 cmets,检查传递给 Start-Process 的值以确保它包含您所期望的内容,因为问题可能与 $SCRIPT:FFMPEGLocation 有关。

ISE 和控制台在范围方面的差异可能令人沮丧。 请参阅this SuperUser post,它进一步解释了这种行为 .您可能还会发现this post 很有帮助; BartekB 解释说 ISE 中的 F5 实际上是 dot-sources 脚本而不是 calling 它,并提供了运行干净会话的功能。

【讨论】:

  • 在鼻子上!我将变量添加到我的写主机和中提琴,我遇到了范围问题!将变量设置为 $GLOBAL: 并修复了它,以及我遇到的几个小问题。
【解决方案2】:

另一种方法也将等待需要运行的进程:

& $EXE /arg 1 /arg 2 -etc 2>&1 | % { $_ }

这将执行命令并传递参数,将任何错误重定向到输出流,然后打印该输出(出于某种原因,我实际上从命令中获取输出时运气不佳)

【讨论】:

  • 我永远无法让它与如此长的参数列表一起使用。我可以这样做:& $SCRIPT:FFMPEGLocation $ArgumentList 2>&1 | % { $_ } 传递一个很长的参数列表吗?
  • 有时 PS 对命令和参数有点奇怪。我建议阅读this article
  • 真棒@TheInforrigible1 我一周前发现了那篇文章,但再也找不到了。我把它打印出来,并引用它。谢谢!
猜你喜欢
  • 2020-09-09
  • 1970-01-01
  • 1970-01-01
  • 2020-03-08
  • 1970-01-01
  • 2011-05-04
  • 2021-05-13
  • 2018-06-11
  • 1970-01-01
相关资源
最近更新 更多