问题描述
我有一个自解压的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处理事情时我只是想丢失一些东西?
谢谢!
解决方法
因此,根据您的评论,归档文件使用下划线代替空格。因此,查看您的代码,我们最初会看到这种情况
Get-ChildItem HKLM:\ SOFTWARE \ Microsoft \ Windows \ CurrentVersion \ Uninstall | %{Get-ItemProperty $ .PsPath} |哪里对象{$ .DisplayName-像“雨的危险2”} |选择InstallLocation -ExpandProperty InstallLocation
当我们尝试包含Where对象时,会发生您的错误。因此,我认为解决您的问题的方法应该是修改您的代码,如下所示:
IS NULL
本质上,我们将-like从“雨的危险2”更改为“ Risk_of_Rain_2”
我相信这应该可以解决问题,因为WinRar可能仍在使用下划线名称。由于要检查的是“ like”名称,因此仅表示该名称可以在“ like”字符串中的单词之后或之前包含任意数量和类型的字符。 like字符串本身是准确的。
,所以... WinRAR提供了所用SFX模块的选项。我应该使用Zip64.SFX时使用默认的Zip.SFX模块。
它先前打开的powershell会话是32位的,当从注册表中读取已安装的程序时,结果会有所不同。
如果提取后正在运行的命令中有32/64位特定的内容,请确保在“高级SFX”选项中选择了正确的模块。
谢谢大家的帮助!