2013-09-03 9 views
13

Tôi đang sửa đổi các tập lệnh Chocolatey để bao gồm chức năng Uninstall-ChocolateyPinnedTaskBarItem.Làm cách nào để bỏ ghim thư mục "Thư viện" khỏi Thanh tác vụ bằng Powershell?

này hoạt động tốt với các lệnh sau

# WORKS 
Uninstall-ChocolateyPinnedTaskBarItem "$env:ProgramFiles\Internet Explorer\iexplore.exe" 

Nhưng nó không làm việc với

# DOESN'T WORK 
Uninstall-ChocolateyPinnedTaskBarItem "$env:SystemRoot\explorer.exe" 

Làm thế nào tôi có thể thoát khỏi những mặc định gắn "Thư viện" thư mục sử dụng Powershell độc quyền?

Đây là tập lệnh Gỡ cài đặt.

function Uninstall-ChocolateyPinnedTaskBarItem { 
<# 
.SYNOPSIS 
Removes an item from the task bar linking to the provided path. 

.PARAMETER TargetFilePath 
The path to the application that should be launched when clicking on the task bar icon. 

.EXAMPLE 
Uninstall-ChocolateyPinnedTaskBarItem "${env:ProgramFiles(x86)}\Microsoft Visual Studio 11.0\Common7\IDE\devenv.exe" 

This will remove the Visual Studio task bar icon. 

#> 
param(
    [string] $targetFilePath 
) 

    Write-Debug "Running 'Uninstall-ChocolateyPinnedTaskBarItem' with targetFilePath:`'$targetFilePath`'"; 

    if (test-path($targetFilePath)) { 
    $verb = "Unpin from Taskbar" 
    $path= split-path $targetFilePath 
    $shell=new-object -com "Shell.Application" 
    $folder=$shell.Namespace($path)  
    $item = $folder.Parsename((split-path $targetFilePath -leaf)) 
    $itemVerb = $item.Verbs() | ? {$_.Name.Replace("&","") -eq $verb} 
    if($itemVerb -eq $null){ 
     Write-Host "TaskBar verb not found for $item. It may have already been unpinned" 
    } else { 
     $itemVerb.DoIt() 
    } 
    Write-Host "`'$targetFilePath`' has been unpinned from the task bar on your desktop" 
    } else { 
    $errorMessage = "`'$targetFilePath`' does not exist, not able to unpin from task bar" 
    } 
    if($errorMessage){ 
    Write-Error $errorMessage 
    throw $errorMessage 
    } 
} 
+0

Hoạt động hoàn hảo trong Windows 7 với Powershell v3. Bạn đang chạy phiên bản Windows và Powershell nào? –

+1

Tôi vừa sử dụng chức năng này để xóa một mục được ghim trên Win8/PowerShell 3.0. –

+1

các mục được ghim là tốt ... hoạt động tốt. Những gì không hoạt động là bỏ trống *** Thư mục Thư viện *** –

Trả lời

1

Sau khi vấp ngã trên một vấn đề tương tự, trải nghiệm của tôi khiến tôi tin rằng vấn đề này chỉ xảy ra trong Windows 8.x và IMHO, đó là lỗi.

tl; dr: Dưới khóa đăng ký [HKEY_CLASSES_ROOT\CLSID\{52205fd8-5dfb-447d-801a-d0b52f2e83e1}, thêm các phím shellex\ContextMenuHandlers\{90AA3A4E-1CBA-4233-B8BB-535773D48449}.

.reg phiên bản file:

Windows Registry Editor Version 5.00 

[HKEY_CLASSES_ROOT\CLSID\{52205fd8-5dfb-447d-801a-d0b52f2e83e1}\shellex\ContextMenuHandlers\{90AA3A4E-1CBA-4233-B8BB-535773D48449}] 

SỰ TỪ BỎ: [HKEY_CLASSES_ROOT\CLSID\{52205fd8-5dfb-447d-801a-d0b52f2e83e1}] là một TrustedInstaller bảo vệ chủ chốt. Sử dụng phán đoán tốt nhất của bạn.


Dưới đây là các bước mà tôi đã có:

Để bắt đầu chẩn đoán vấn đề, tôi đã viết chức năng này mà lấy những file lnk gắn hoặc, tùy chọn, các mục tiêu của các tập tin lnk:

function Get-UserPinnedItems([switch]$Target) 
{ 
    $userPinnedPath = "$env:APPDATA\Microsoft\Internet Explorer\Quick Launch\User Pinned\Taskbar" 
    $shellApp  = New-Object -ComObject 'Shell.Application' 
    $items   = $shellApp.Namespace($userPinnedPath).Items() | where { $_.IsLink } 

    if ($Target) 
    { 
     return $items | foreach { $_.GetLink.Target } 
    } 
    $items 
} 

Chạy trên với công tắc -target trên Windows 8.1, tôi nhận được trở lại này:

PS> Get-UserPinnedItems -Target 

Application : System.__ComObject 
Parent  : System.__ComObject 
Name   : File Explorer 
Path   : ::{52205FD8-5DFB-447D-801A-D0B52F2E83E1} 
GetLink  : 
GetFolder : 
IsLink  : False 
IsFolder  : False 
IsFileSystem : False 
IsBrowsable : False 
ModifyDate : 12/30/1899 12:00:00 AM 
Size   : 0 
Type   : System Folder 

Thông báo Đường dẫn là ::{52205FD8-5DFB-447D-801A-D0B52F2E83E1}. Đây rõ ràng là một CLSID mới cho File Explorer mà rất ít thông tin có sẵn. Tìm kiếm hướng dẫn này trong sổ đăng ký (hoặc thậm chí internet) không mang lại nhiều kết quả. Trên Windows 7, tôi lấy lại đường dẫn hệ thống tập tin "C: \ Windows \ explorer.exe", đó là lý do tại sao tôi nghĩ đây là vấn đề chỉ có ở Win8.

Bây giờ, Ghim/Bỏ ghim các mục vào thanh tác vụ được xử lý bởi IStartMenuPinnedList interface có CLSID {90AA3A4E-1CBA-4233-B8BB-535773D48449}. Tìm kiếm mã này guid trong sổ đăng ký mang lại nhiều kết quả. Hầu hết các trường hợp xảy ra khi một loại tệp cụ thể cần có chức năng Ghim/Bỏ ghim. Vì vậy, kể từ khi File Explorer thiếu chức năng này, việc thêm ContextMenuHandler có vẻ như là một ý tưởng hay, và chắc chắn đủ, nó hoạt động như một sự quyến rũ, ít nhất là đối với tôi. ymmv. Nếu nó không làm việc cho người khác, có lẽ nó sẽ ít nhất cung cấp một số khách hàng tiềm năng.


Bên cạnh: OP cho biết thư mục "Thư viện" được ghim là vấn đề.Tôi không nghĩ rằng điều này là hoàn toàn chính xác dựa trên thực tế các mục được ghim có File Explorer CLSID {52205FD8-5DFB-447D-801A-D0B52F2E83E1} và không phải là thư viện CLSID {031E4825-7B94-4dc3-B131-E946B44C8DD5}.

Trong khi chạy Shell:::{031E4825-7B94-4dc3-B131-E946B44C8DD5} luôn mở thư mục Libraries, chạy Shell:::{52205FD8-5DFB-447D-801A-D0B52F2E83E1} có thể mở Thư viện hoặc thư mục PC này, tùy thuộc vào người dùng có bật tùy chọn "Hiển thị thư viện" hay không. Dựa trên đó, tôi sẽ đổi tên bài để nói "File Explorer" thay vì "Library". Ngoài ra, tôi sẽ nói hệ điều hành nào tôi đang sử dụng.