如何获取快捷方式图标文件的路径?

How to get path of shortcut's icon file?

有没有办法获取快捷方式.ico的路径? 我知道如何更改快捷方式图标,但如何找到快捷方式图标文件的路径?

您可以使用以下功能。
它处理 'regular' 快捷方式文件 (.lnk) 以及 Internet 快捷方式文件 (.url)

function Get-ShortcutIcon {
    [CmdletBinding()]
    Param (
        [Parameter(Mandatory = $true, ValueFromPipeline = $true)]
        [Alias('FullName')]
        [string]$Path  # needs to be an absulute path
    )
    switch ([System.IO.Path]::GetExtension($Path)) {
        '.lnk'  {
            $WshShell = New-Object -ComObject WScript.Shell
            $shortcut = $WshShell.CreateShortcut($Path)
            $iconPath = $shortcut.IconLocation
            $iconInfo = if ($iconPath -match '^,(\d+)') {
                [PsCustomObject]@{ IconPath = $shortcut.TargetPath; IconIndex = [int]$matches[1] }
            }
            else {
                [PsCustomObject]@{ IconPath = $iconPath; IconIndex = 0 }
            }

            # clean up
            $null = [System.Runtime.Interopservices.Marshal]::ReleaseComObject($shortcut)
            $null = [System.Runtime.Interopservices.Marshal]::ReleaseComObject($WshShell)
            [System.GC]::Collect()
            [System.GC]::WaitForPendingFinalizers()

            # return the icon information
            $iconInfo
        }
        '.url' {
            $content = Get-Content -Path $Path -Raw
            $iconPath  = [regex]::Match($content, '(?im)^\s*IconFile\s*=\s*(.*)').Groups[1].Value
            $iconIndex = [regex]::Match($content, '(?im)^\s*IconIndex\s*=\s*(\d+)').Groups[1].Value
            [PsCustomObject]@{ IconPath = $iconPath; IconIndex = [int]$iconIndex }
        }
        default { Write-Warning "'$Path' does not point to a '.lnk' or '.url' shortcut file.." }
    }
}