我正在使用称为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文件,该文件将执行写入标准错误的命令时,无论在哪个服务器上运行,都会看到相同的行为。