PowerShell Get-AdvertisedShortcut
После того, как я узнал, что иногда объекты ярлыков не могут запрашиваться объектом WScript.Shell , но в случае рекламируемых ярлыков необходимо запрашивать объект WindowsInstaller.Installer , я провел поиск в Интернете и нашел многообещающее решение ниже.
Но либо решение устарело, либо написано для другой версии Windows (я использую PowerShell 5.1 на 64-битной Windows 10). Это дает мне только следующее сообщение об ошибке для рекламируемых ярлыков, таких как %AppData%\Microsoft\Windows\Start Menu\Programs\System Tools*.lnk:
Ausnahme beim Aufrufen von "InvokeMember" mit 5 Argument(en): "ShortcutTarget"
что буквально переводится как:
Исключение при вызове «InvokeMember» с 5 аргументами: «ShortcutTarget»
Кроме того, я вижу следующие строки без дополнительной информации для меня:
+ CategoryInfo : NotSpecified: (:) [], MethodInvocationException + FullyQualifiedErrorId: COMException
К сожалению, я не знаю, где искать правильный синтаксис, и не нашел ничего, кроме приведенного ниже кода для решения исходной проблемы получения цели рекламируемого ярлыка.
Любые идеи, где я могу посмотреть дальше?
Код с https://www.alkanesolutions.co.uk/2020/06/03/use-powershell-to-find-an-advertised-shortcut-target:
function Get-AdvertisedShortcut {
param([string]$pathToLnk)
$shortcutTarget = ""
if ($pathToLnk -ne $null -and (test-path $pathToLnk)) {
$windowsInstaller = New-Object -ComObject WindowsInstaller.Installer
$lnkTarget = $WindowsInstaller.GetType().InvokeMember("ShortcutTarget","GetProperty",$null,$windowsInstaller,$pathToLnk)
$productCode = $lnkTarget.GetType().InvokeMember("StringData","GetProperty",$null,$lnkTarget,1)
$componentCode = $lnkTarget.GetType().InvokeMember("StringData","GetProperty",$null,$lnkTarget,3)
$shortcutTarget = $WindowsInstaller.GetType().InvokeMember("ComponentPath","GetProperty",$null,$WindowsInstaller,@($productCode,$componentCode))
}
return $shortcutTarget
}