2013-09-03 9 views
13

Sto modificando gli script Chocolatey per includere la funzionalità Uninstall-ChocolateyPinnedTaskBarItem.Come sbloccare la cartella "Libreria" dalla barra delle applicazioni usando Powershell?

Questa grande opera con il seguente comando

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

Ma non funziona con

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

Come posso liberarmi di quello predefinito appuntato "Library" cartella utilizzando Powershell esclusivamente?

Ecco lo script di disinstallazione.

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

Funziona perfettamente in Windows 7 con Powershell v3. Quali versioni di Windows e PowerShell sono in esecuzione? –

+1

Ho appena usato la funzione per rimuovere un elemento aggiunto su Win8/PowerShell 3.0. –

+1

gli oggetti appuntati vanno bene ... funziona alla grande. Quello che non funziona è sbloccare il *** Cartella Biblioteca *** –

risposta

1

Dopo imbattersi in un problema simile, la mia esperienza mi porta a credere che questo problema si verifica solo in Windows 8.x, e, secondo me, si tratta di un bug.

tl; dr: Sotto la chiave di registro [HKEY_CLASSES_ROOT\CLSID\{52205fd8-5dfb-447d-801a-d0b52f2e83e1}, aggiungere le chiavi shellex\ContextMenuHandlers\{90AA3A4E-1CBA-4233-B8BB-535773D48449}.

versione del file .reg:

Windows Registry Editor Version 5.00 

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

NOTA BENE: [HKEY_CLASSES_ROOT\CLSID\{52205fd8-5dfb-447d-801a-d0b52f2e83e1}] è una chiave TrustedInstaller protetta. Usa il tuo miglior giudizio.


qui sono i passi che mi arrivati:

Per iniziare diagnosticare il problema, ho scritto questa funzione, che recupera i file LNK appuntato o, opzionalmente, gli obiettivi dei file 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 
} 

Esecuzione del di cui sopra con l'interruttore -Target su Windows 8.1, torno questo:

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 

Avviso il percorso è ::{52205FD8-5DFB-447D-801A-D0B52F2E83E1}. Questo è apparentemente un nuovo CLSID per File Explorer per il quale sono disponibili pochissime informazioni. La ricerca di questo guid nel registro (o anche in Internet) non riporta molti risultati. In Windows 7 torno al percorso del file system "C: \ Windows \ explorer.exe", motivo per cui penso che questo sia un problema solo per Win8.

Ora, gli elementi Pinning/Unpinning sulla barra delle applicazioni sono gestiti dallo IStartMenuPinnedList interface che ha il CLSID {90AA3A4E-1CBA-4233-B8BB-535773D48449}. La ricerca di questo guid nel Registro di sistema produce diversi risultati. La maggior parte delle istanze si verifica quando un particolare tipo di file richiede la funzionalità Pin/Unpin.

Quindi, dal momento che File Explorer manca questa funzionalità, l'aggiunta di ContextMenuHandler mi è sembrata una buona idea, e sicuramente, ha funzionato come un incantesimo, almeno per me. YMMV. Se non funziona per gli altri, forse fornirà almeno dei lead.


parte: L'OP afferma la cartella appuntato "Library" è il problema.Non penso che questo sia completamente corretto in base al fatto che l'elemento aggiunto ha il CLSID File Explorer {52205FD8-5DFB-447D-801A-D0B52F2E83E1} e non il CLSID delle Librerie {031E4825-7B94-4dc3-B131-E946B44C8DD5}.

Durante l'esecuzione di Shell:::{031E4825-7B94-4dc3-B131-E946B44C8DD5} apre sempre la cartella Librerie, in esecuzione Shell:::{52205FD8-5DFB-447D-801A-D0B52F2E83E1} potrebbe aprire le Librerie o la cartella Questo PC, a seconda se l'utente ha l'opzione "Mostra librerie" attivata. Sulla base di ciò, vorrei rinominare il post per dire "Esplora file" anziché "Libreria". Inoltre, vorrei dire quale sistema operativo stavo usando.

Problemi correlati