AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / computer / 问题 / 1742854
Accepted
YorSubs
YorSubs
Asked: 2022-09-17 23:57:01 +0800 CST2022-09-17 23:57:01 +0800 CST 2022-09-17 23:57:01 +0800 CST

PowerShell,将回收站添加到快速访问

  • 772

我非常想使用 PowerShell 将“回收站”添加到文件资源管理器的“快速访问”区域(因为这是我喜欢在所有新系统上拥有的标准东西)。添加到“快速访问”很简单:

$oShell = New-Object -ComObject Shell.Application
$oShell.Namespace("C:\ProgramData\chocolatey\lib").Self.InvokeVerb("PinToHome")

问题是“回收站”当然不是一个普通的文件夹。但是,可以按如下方式访问它:

$oShell = New-Object -ComObject Shell.Application
$rb = $oShell.Namespace(10)

但是添加到“快速访问”$rb.Self.InvokeVerb("PinToHome")不起作用。

请有人告诉我如何以编程方式将“回收站”添加到“快速访问”中。我知道这是可以做到的,因为将项目从桌面拖到文件资源管理器上是可行的,所以必须有一些可编程的方式来实现这一点吗?

powershell windows-explorer
  • 2 2 个回答
  • 57 Views

2 个回答

  • Voted
  1. postanote
    2022-09-18T15:56:31+08:002022-09-18T15:56:31+08:00

    这真的不是 PS 代码问题,也不是程序问题。这是特定于操作系统的限制/障碍。

    Windows 资源管理器是一个程序,因此具有它直接提供的功能,这些功能可能在它之外可用,也可能不可用。

    如果 Microsoft 不提供执行此操作的句柄,则需要大量与 Windows Explorer 相关的黑客攻击才能发现它。

    我个人看不到这种固定工作的用例,因为它已经在您的桌面、开始菜单中可用,并且可以固定到任务栏以便快速访问,但我们都有 X 或 Y 事物/方法的原因。

    当您挖掘 Windows 资源管理器功能时。例如,如此处所述:Shell.Explore,Method; 您可以从中确定,在 Windows 资源管理器中,可以在路径输入中执行类似的操作来获取文件夹时间。外壳:发送到。

    但是,如果您尝试对 Recycle, shell:desktop\Recycle Bin 进行此操作,则将失败,原因已经说明。因此,您需要进一步深入研究此类文档以获取任何其他可能性。RB 只是应用调用的 .lnk。

    即使如您的帖子所述:

    $oShell = New-Object -ComObject Shell.Application
    $rb = $oShell.Namespace(10)
    

    如果深入...

    $oShell = New-Object -ComObject Shell.Application
    (($rb = $oShell.Namespace(10))).ParentFolder
    # Results
    <#
    Title                      : Desktop
    Application                : System.__ComObject
    Parent                     : 
    ParentFolder               : 
    Self                       : System.__ComObject
    OfflineStatus              : 
    HaveToShowWebViewBarricade : False
    ShowWebViewBarricade       : False
    #>
    

    您可以看到您的用例的问题。

    对于所有 Windows 资源管理器特殊文件夹,有这些:

    [Enum]::GetNames('System.Environment+SpecialFolder')
    # Results
    <#
    Desktop
    Programs
    MyDocuments
    Personal
    Favorites
    Startup
    Recent
    SendTo
    StartMenu
    MyMusic
    MyVideos
    DesktopDirectory
    MyComputer
    NetworkShortcuts
    Fonts
    Templates
    CommonStartMenu
    CommonPrograms
    CommonStartup
    CommonDesktopDirectory
    ApplicationData
    PrinterShortcuts
    LocalApplicationData
    InternetCache
    Cookies
    History
    CommonApplicationData
    Windows
    System
    ProgramFiles
    MyPictures
    UserProfile
    SystemX86
    ProgramFilesX86
    CommonProgramFiles
    CommonProgramFilesX86
    CommonTemplates
    CommonDocuments
    CommonAdminTools
    AdminTools
    CommonMusic
    CommonPictures
    CommonVideos
    Resources
    LocalizedResources
    CommonOemLinks
    CDBurning
    #>
    

    ...并请注意,快速访问等不是其中之一。因此,shell:不是它以及该列表中的其他几个选项的选项。

    更新

    所以,根据我的评论...... 你可以操纵你创造的任何东西。 ...到您的 GUID 使用评论。然后你可以这样做:

    New-Item -Path 'C:\' -Name Temp -ItemType Directory -Force
    New-Item -Path 'C:\temp' -Name 'Recycle Bin.{645FF040-5081-101B-9F08-00AA002F954E}' -ItemType Directory
    ($TargetShellObject = (Get-ChildItem -Path 'C:\Temp' -Filter 'Recycle*').FullName)
    $oShell = New-Object -ComObject Shell.Application
    $oShell.Namespace("$TargetShellObject").Self.InvokeVerb("PinToHome")
    

    这将把这个新目录放在快速访问列表中,仅按名称而没有 GUID,直到您查看它的属性。但是,猜猜如果您尝试清理/删除手动创建的文件夹会发生什么?关闭并重新启动 Windows 资源管理器的那一刻,它和 QA 中的 pin 一起消失了。

    因此,这意味着一旦您创建了该文件夹对象,就永远无法删除它。因此,为了防止他人删除它,您必须隐藏或保护它。因此,像这样的东西......

    New-Item -Path 'C:\' -Name 'QuickAccessObjects' -ItemType Directory -Force
    New-Item -Path 'C:\QuickAccessObjects' -Name 'Recycle Bin.{645FF040-5081-101B-9F08-00AA002F954E}' -ItemType Directory
    
    (Get-Item -Path 'C:\QuickAccessObjects').attributes = 'Hidden'
    
    ($TargetShellObject = (Get-ChildItem -Path 'C:\QuickAccessObjects' -Filter 'Recycle*').FullName)
    
    $oShell = New-Object -ComObject Shell.Application
    $oShell.Namespace("$TargetShellObject").Self.InvokeVerb("PinToHome")
    

    在此处输入图像描述

    更新

    根据评论。使用 $env:windir,我得到了同样的结果。无论视图设置如何,都没有 GUID,保存仍然只显示路径的 Tiles。

    在此处输入图像描述 正如演示的那样,这一切都是在 Windows Sandbox 原始环境中完成的。

    • 1
  2. Best Answer
    w32sh
    2022-09-19T04:08:39+08:002022-09-19T04:08:39+08:00

    Src:使用 InvokeVerb 将回收站固定到快速访问

    尝试这个:

    $RBPath = 'HKCU:\Software\Classes\CLSID\{645FF040-5081-101B-9F08-00AA002F954E}\shell\pintohome\command\'
    $name = "DelegateExecute"
    $value = "{b455f46e-e4af-4035-b0a4-cf18d2f6f28e}"
    New-Item -Path $RBPath -Force | out-null
    New-ItemProperty -Path $RBPath -Name $name -Value $value -PropertyType String -Force | out-null
    $oShell = New-Object -ComObject Shell.Application
    $trash = $oShell.Namespace("shell:::{645FF040-5081-101B-9F08-00AA002F954E}")
    $trash.Self.InvokeVerb("PinToHome")
    Remove-Item -Path "HKCU:\Software\Classes\CLSID\{645FF040-5081-101B-9F08-00AA002F954E}" -Recurse
    
    • 1

相关问题

  • 将前景颜色添加到 Powershell 配置文件?

  • 禁用后无法启用 Microsoft Print to PDF

  • 我可以让这个 PowerShell 脚本接受逗号吗?

  • 资源管理器侧面板中的桌面外壳快捷方式

  • 在多个文件上打开方式?

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    如何减少“vmmem”进程的消耗?

    • 11 个回答
  • Marko Smith

    从 Microsoft Stream 下载视频

    • 4 个回答
  • Marko Smith

    Google Chrome DevTools 无法解析 SourceMap:chrome-extension

    • 6 个回答
  • Marko Smith

    Windows 照片查看器因为内存不足而无法运行?

    • 5 个回答
  • Marko Smith

    支持结束后如何激活 WindowsXP?

    • 6 个回答
  • Marko Smith

    远程桌面间歇性冻结

    • 7 个回答
  • Marko Smith

    子网掩码 /32 是什么意思?

    • 6 个回答
  • Marko Smith

    鼠标指针在 Windows 中按下的箭头键上移动?

    • 1 个回答
  • Marko Smith

    VirtualBox 无法以 VERR_NEM_VM_CREATE_FAILED 启动

    • 8 个回答
  • Marko Smith

    应用程序不会出现在 MacBook 的摄像头和麦克风隐私设置中

    • 5 个回答
  • Martin Hope
    Saaru Lindestøkke 为什么使用 Python 的 tar 库时 tar.xz 文件比 macOS tar 小 15 倍? 2021-03-14 09:37:48 +0800 CST
  • Martin Hope
    CiaranWelsh 如何减少“vmmem”进程的消耗? 2020-06-10 02:06:58 +0800 CST
  • Martin Hope
    Jim Windows 10 搜索未加载,显示空白窗口 2020-02-06 03:28:26 +0800 CST
  • Martin Hope
    v15 为什么通过电缆(同轴电缆)的千兆位/秒 Internet 连接不能像光纤一样提供对称速度? 2020-01-25 08:53:31 +0800 CST
  • Martin Hope
    andre_ss6 远程桌面间歇性冻结 2019-09-11 12:56:40 +0800 CST
  • Martin Hope
    Riley Carney 为什么在 URL 后面加一个点会删除登录信息? 2019-08-06 10:59:24 +0800 CST
  • Martin Hope
    zdimension 鼠标指针在 Windows 中按下的箭头键上移动? 2019-08-04 06:39:57 +0800 CST
  • Martin Hope
    jonsca 我所有的 Firefox 附加组件突然被禁用了,我该如何重新启用它们? 2019-05-04 17:58:52 +0800 CST
  • Martin Hope
    MCK 是否可以使用文本创建二维码? 2019-04-02 06:32:14 +0800 CST
  • Martin Hope
    SoniEx2 更改 git init 默认分支名称 2019-04-01 06:16:56 +0800 CST

热门标签

windows-10 linux windows microsoft-excel networking ubuntu worksheet-function bash command-line hard-drive

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve