2012-03-16 17 views
12

Windows 7'de PowerShell kullanarak bazı programları görev çubuğuna nasıl sabitleyebilirim? Lütfen adım adım açıklayın.PowerShell kullanarak görev çubuğuna nasıl bağlanır

Ve bir klasöre görev çubuğunu bağlamak için aşağıdaki kodu nasıl değiştirebilirim? Bu yolda

$folder = $shell.Namespace('D:\Work') 

, example adlı klasör Örnek

için.

cevap

22

Shell.Application COM nesnesini kullanarak Verb (Görev Çubuğuna Pin) çağrısı yapabilirsiniz. İşte bazı örnek kod:

http://gallery.technet.microsoft.com/scriptcenter/b66434f1-4b3f-4a94-8dc3-e406eb30b750

örnek biraz karmaşıktır.

$shell = new-object -com "Shell.Application" 
$folder = $shell.Namespace('C:\Windows')  
$item = $folder.Parsename('notepad.exe') 
$verb = $item.Verbs() | ? {$_.Name -eq 'Pin to Tas&kbar'} 
if ($verb) {$verb.DoIt()} 
+0

yazım hatası ya da 'Pin Tas & kbar için' 'Pin görev çubuğuna' Bu benim bir PowerShell modülüne ekleyerek sona erdi benim uygulamasıdır? –

+0

Aslında '&' özelliği, dosyanın sağ tıklama içerik menüsünde basabileceğiniz kısayol tuşu için kullanılır. –

+0

tamam, ancak bağlantıdaki işlevler bir $ verb.replace ("&", "") gösteriyor ... Şimdi test edemiyorum .. –

14

$sa = new-object -c shell.application 
$pn = $sa.namespace($env:windir).parsename('notepad.exe') 
$pn.invokeverb('taskbarpin') 

Ya

$pn.invokeverb('taskbarunpin') 

Not sabitlemeyi kaldırmak bir başka yolu: Burada basitleştirilmiş versiyonu notepad.exe %windir% altında olmayabilir, bu sunucu işletim sistemi platformu %windir%\system32 altında bulunabilir .

6

Bunu PowerShell ile yapmam gerektiğinden, burada başkaları tarafından sağlanan yöntemleri kullandım.


function Get-ComFolderItem() { 
    [CMDLetBinding()] 
    param(
     [Parameter(Mandatory=$true)] $Path 
    ) 

    $ShellApp = New-Object -ComObject 'Shell.Application' 

    $Item = Get-Item $Path -ErrorAction Stop 

    if ($Item -is [System.IO.FileInfo]) { 
     $ComFolderItem = $ShellApp.Namespace($Item.Directory.FullName).ParseName($Item.Name) 
    } elseif ($Item -is [System.IO.DirectoryInfo]) { 
     $ComFolderItem = $ShellApp.Namespace($Item.Parent.FullName).ParseName($Item.Name) 
    } else { 
     throw "Path is not a file nor a directory" 
    } 

    return $ComFolderItem 
} 

function Install-TaskBarPinnedItem() { 
    [CMDLetBinding()] 
    param(
     [Parameter(Mandatory=$true)] [System.IO.FileInfo] $Item 
    ) 

    $Pinned = Get-ComFolderItem -Path $Item 

    $Pinned.invokeverb('taskbarpin') 
} 

function Uninstall-TaskBarPinnedItem() { 
    [CMDLetBinding()] 
    param(
     [Parameter(Mandatory=$true)] [System.IO.FileInfo] $Item 
    ) 

    $Pinned = Get-ComFolderItem -Path $Item 

    $Pinned.invokeverb('taskbarunpin') 
} 

Örnek kullanımını bir provizyon komut dosyası için: üzerinde


# The order results in a left to right ordering 
$PinnedItems = @(
    'C:\Program Files\Oracle\VirtualBox\VirtualBox.exe' 
    'C:\Program Files (x86)\Mozilla Firefox\firefox.exe' 
) 

# Removing each item and adding it again results in an idempotent ordering 
# of the items. If order doesn't matter, there is no need to uninstall the 
# item first. 
foreach($Item in $PinnedItems) { 
    Uninstall-TaskBarPinnedItem -Item $Item 
    Install-TaskBarPinnedItem -Item $Item 
} 
+0

Çalışmıyor gibi görünüyor Tamam Win Server 2016 DataCenter. – stej

İlgili konular