解释不同版本的Window Server上PowerShell v5脚本行为的不同吗?

时间:2019-07-17 08:13:42

标签: powershell wix

我正在使用称为WiX的安装程序生成器来运行PowerShell脚本,作为应用程序安装的一部分。我认为这并不重要,但想在上下文中提及它。我的脚本运行这样的外部命令:

& myCommand myArg1

该命令将写入标准输出和/或标准错误。无论哪种情况,我都不在乎。我只希望它执行。

在Windows Server 2012 R2上,它完全可以做到这一点。它执行并继续运行,没有任何问题。在Windows Server 2016和2019上,看到的行为完全不同。相反,我得到一个错误:

At C:\Program Files\MyApp\setup.ps1:105 char:9
+         & $myCommand $myArg
+         ~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : NotSpecified: (Error::String) [], RemoteException
    + FullyQualifiedErrorId : NativeCommandError

我自然地认为,这种差异是由于默认情况下2012年安装了PowerShell v4,而2016/2019年安装了v5;但是即使在我的2012服务器上安装了v5之后,区别仍然存在。

我只在2016/2019年收到错误消息。

我已验证我正在调用的命令返回的输出相同。还值得一提的是,我只在写入标准错误的外部命令上看到错误。这个问题类似(Error when calling 3rd party executable from Powershell when using an IDE),因为它讨论的是我看到的相同错误。但是我不明白为什么行为似乎取决于操作系统版本?

我尝试使用一个很小的脚本重现此问题,但令人沮丧的是,我一直没有成功。如果运行PowerShell ISE,我会看到相同的错误消息,但我没有运行ISE(据我所知?)。无论使用哪种服务器,我都使用以下命令启动PowerShell:

powershell.exe -NoProfile -NonInteractive -InputFormat None -ExecutionPolicy Bypass -Command "& ./setup.ps1;"

涉及的所有版本是:

PSVersion: 5.1.xxx.yyy
PSEdition: Desktop
PSCompatibleVersions: 1.0, 2.0, 3.0, 4.0, 5.0, 5.1.17763.503
BuildVersion: 10.0.xxx.yyy
CLRVersion: 4.0.30319.42000
WSManStackVersion: 3.0
PSRemotingProtocolVersion: 2.3
SerializationVersion: 1.1.0.1

任何人都可以帮助我了解我所看到的行为为何/为什么不相同,或者对我如何在安装程序之外重现此行为提供一些见解吗?当我创建一个简单的.ps1文件,该文件将执行写入标准错误的命令时,无论在哪个服务器上运行,都会看到相同的行为。

0 个答案:

没有答案