You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用PowerShell固定快捷方式到开始菜单时遇权限错误求助

无法通过PowerShell将桌面快捷方式固定到开始菜单(权限错误)

尝试将桌面快捷方式固定到开始菜单,即使以管理员身份运行PowerShell仍出现权限错误。测试“Open”等其他动词可正常执行,但固定到开始菜单时会报错。

所用代码

$desktopPath = [System.Environment]::GetFolderPath('Desktop')
$shortcutName = "XAMPP Control Panel.lnk"  # Name of the shortcut
$shortcutPath = Join-Path $desktopPath $shortcutName

$Shell = New-Object -ComObject Shell.Application
$Folder = $Shell.Namespace((Get-Item $shortcutPath).DirectoryName)
$Item = $Folder.ParseName((Get-Item $shortcutPath).Name)
$Item.Verbs() | ForEach-Object { Write-Output $_.Name }
$Verb = $Item.Verbs() | Where-Object {$_.Name -eq "&Pin to Start"}

if ($Verb) {
    $Verb.DoIt()
    Write-Output "Pinned."
} else {
    Write-Output "Not Pinned"
}

错误截图

权限错误提示

已尝试的排查步骤

  • 运行gpedit.msc,依次进入用户配置 -> 管理模板 -> 开始菜单和任务栏
  • 在右侧面板双击“阻止用户自定义其开始屏幕”,设置为已禁用
  • 重启设备确保更改生效,但问题依旧
    组策略设置截图

解决方案

1. 切换为普通用户权限运行PowerShell

固定开始菜单属于用户级操作,管理员上下文会与当前用户的开始菜单数据隔离。直接以普通用户身份启动PowerShell,再执行脚本即可避免权限冲突。

2. 确认动词名称的正确性

不同系统语言或版本中,"固定到开始"的动词名称可能存在差异。先执行以下命令列出目标快捷方式的所有可用动词:

$desktopPath = [System.Environment]::GetFolderPath('Desktop')
$shortcutName = "XAMPP Control Panel.lnk"
$shortcutPath = Join-Path $desktopPath $shortcutName

$Shell = New-Object -ComObject Shell.Application
$Folder = $Shell.Namespace((Get-Item $shortcutPath).DirectoryName)
$Item = $Folder.ParseName((Get-Item $shortcutPath).Name)
$Item.Verbs() | Select-Object Name, VerbID

找到对应"固定到开始屏幕"的动词名称(例如中文系统中为&固定到开始屏幕),替换原脚本中的&Pin to Start后重新执行。

3. 使用官方Start布局API替代Shell Verb方法

Shell Verb方式在Windows 10/11中权限限制严格,可改用微软官方的Start布局管理API实现固定:

# 获取快捷方式的完整路径
$desktopPath = [System.Environment]::GetFolderPath('Desktop')
$shortcutName = "XAMPP Control Panel.lnk"
$shortcutPath = Join-Path $desktopPath $shortcutName

# 生成开始布局XML模板
$layoutXml = @"
<LayoutModificationTemplate xmlns:defaultlayout="http://schemas.microsoft.com/Start/2014/FullDefaultLayout" xmlns:start="http://schemas.microsoft.com/Start/2014/StartLayout" Version="1" xmlns="http://schemas.microsoft.com/Start/2014/LayoutModification">
  <LayoutOptions StartTileGroupCellWidth="6" />
  <DefaultLayoutOverride>
    <StartLayoutCollection>
      <defaultlayout:StartLayout GroupCellWidth="6">
        <start:Group Name="自定义应用">
          <start:DesktopApplicationTile Size="2x2" Column="0" Row="0" DesktopApplicationLinkPath="$shortcutPath" />
        </start:Group>
      </defaultlayout:StartLayout>
    </StartLayoutCollection>
  </DefaultLayoutOverride>
</LayoutModificationTemplate>
"@

# 保存XML到临时文件
$tempXmlPath = Join-Path $env:TEMP "StartLayout.xml"
$layoutXml | Out-File $tempXmlPath -Encoding UTF8

# 应用布局(需要管理员权限)
Import-StartLayout -LayoutPath $tempXmlPath -MountPath $env:SystemDrive\

# 清理临时文件
Remove-Item $tempXmlPath

注意:该方法会覆盖当前开始菜单布局,若需保留原有布局,需先执行Export-StartLayout -Path "CurrentLayout.xml"导出当前布局,再修改XML内容后重新导入。

4. 调整用户账户控制(UAC)设置

打开控制面板\用户帐户\用户帐户\更改用户帐户控制设置,将滑块调整至"仅当应用尝试更改我的计算机时通知我(默认)"或更低级别,重启系统后测试脚本。


内容的提问来源于stack exchange,提问作者Arash Seifi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.19 14:07:17