0

我有一个自解压的 WinRar 存档,用于在完成后运行一个 powershell 脚本。该脚本将启动,但特定命令不会给出预期结果。

特别是,我有以下命令来查找已安装游戏的安装路径(Risk of Rain 2)。

Get-ChildItem HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall | % { Get-ItemProperty $_.PsPath } | Where-Object {$_.DisplayName -like 'Risk of Rain 2'} | Select InstallLocation -ExpandProperty InstallLocation

单独运行脚本时,我得到了预期的安装路径。

F:\SteamLibrary\steamapps\common\Risk of Rain 2

当脚本启动时(在提取之前或之后),命令似乎运行,但没有输出。

在测试中,我删除了除以下内容之外的所有内容:

Get-ChildItem HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall | % { Get-ItemProperty $_.PsPath } 

这仍然有效,输出已安装应用程序的列表。当我将管道添加到“Where-Object”部分时,它开始失败。

我唯一的猜测是 WinRar 启动脚本时设置了一些其他参数。

我尝试让 Winrar 启动一个 .bat,然后运行 ​​.ps1 文件,但结果相同。以管理员身份运行存档也是如此。

我的 powershell 脚本有什么奇怪的地方,还是我只是错过了 Winrar 处理事情的方式?

谢谢!

4

2 回答 2

0

因此,根据您的评论,存档使用下划线代替空格。因此,查看您的代码,我们最初看到的是

Get-ChildItem HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall | % { 获取项目属性 $ .PsPath } | Where-Object {$ .DisplayName -like 'Risk of Rain 2'} | 选择 InstallLocation -ExpandProperty InstallLocation

当我们尝试包含 Where 对象时会发生您的错误。所以我相信你的问题的解决方案应该是这样修改你的代码:

Get-ChildItem HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall | % { Get-ItemProperty $_.PsPath } | Where-Object {$_.DisplayName -like 'Risk_of_Rain_2'} | Select InstallLocation -ExpandProperty InstallLocation

本质上,我们将 -like 从 'Risk of Rain 2' 更改为 'Risk_of_Rain_2'

我相信这应该可以解决问题,因为它被 WinRar 调用它可能仍然使用下划线名称。由于您正在检查一个类似名称,该名称仅表明它可以在类似字符串中的单词之后或之前包含任意数量和类型的字符。类似的字符串本身是精确的。

于 2020-09-07T02:25:24.680 回答
0

所以...WinRAR 为使用的 SFX 模块提供了选项。当我应该使用 Zip64.SFX 时,我使用了默认的 Zip.SFX 模块。

它之前打开的 powershell 会话是 32 位的,从注册表中读取已安装程序时会给出不同的结果。

如果在提取后运行的命令中有任何 32/64 位特定的内容,请确保在 Advanced SFX 选项中选择了正确的模块。

谢谢大家的帮助!

高级音效选项

于 2020-09-07T08:54:14.223 回答