我需要取得“UninstallString”的值
计算机\HKEY_本地计算机\软件\WOW6432节点\Microsoft\Windows\当前版本\卸载{1535CAA3 - 9F33 - 414E-8987 - 0365169BE741}
呼叫:
Get-Item -path HKLM:\SOFTWARE\WOW6432Node\Microsoft\Windows\CurrentVersion\Uninstall\{1535CAA3-9F33-414E-8987-0365169BE741}
- 获取项:找不到接受参数'1535CAA3 - 9F33 - 414E-8987 - 0365169BE741'位置参数 *
3条答案
按热度按时间jhiyze9q1#
js2010's helpful answer指出,* 缺少引用 * 是您的主要问题(
{
和}
是PowerShell * 元字符 *),为了补充x1e0 f1,:在PowerShell v5及更高版本中,可以使用
Get-ItemPropertyValue
cmdlet直接返回与注册表项的 value 关联的数据:至于你试过什么:
HKLM:\...\{1535CAA3-9F33-414E-8987-0365169BE741}
之类的 * 未加引号 * 参数的行程方式如下:{...}
创建了一个script block,所以它被认为是一个 * 单独 * 参数的开始,* 字符串 *'HKLM:\...\'
和 * 脚本块 *{1535CAA3-9F33-414E-8987-0365169BE741}
作为 * 两个 * 参数传递。Get-Item
并不需要 extra(位置)参数,所以它会相应地抱怨,并在错误消息中使用脚本块的 string representation。{
和}
,您可以使用{1535CAA3-9F33-414E-8987-0365169BE741}.ToString()
进行验证如前所述,* 引号 * 是解决方案,并且由于路径既不包含PowerShell变量引用也不包含子表达式,因此使用 * 单引号 *,即 verbatim 字符串文字(
'...'
)是最佳的。(通常不太理想的)替代方法是坚持使用 * 不带引号的 * 参数,并使用带有```的PowerShell元字符的 * 单独转义 *(所谓的反勾号);例如:
Write-Output HKLM:\...\
{1535CAA3-9F33-414E-8987-0365169BE741}
ryoqjall2#
类似于下面的引号,因为大括号看起来像powershell的脚本块:
虽然对于msi,您可以在powershell 5.1中使用此命令卸载:
对于其他非msi安装,uninstallstring在这里。通常您必须添加一个额外的选项,如“/S”,用于静默卸载。
qij5mzcb3#
正如我所说的,你需要把路径 Package 在
""
中,但是这仍然是行不通的。要在powershell中获得注册表值,请使用Registry::HKEY_LOCAL_MACHINE\...
作为路径。一旦你获得了RegistryKey
对象,你就可以使用GetValue(string name)
来获得UninstallString
的值。所以你的命令看起来像这样: