Как закрепить на панели задач с помощью PowerShell - PullRequest
16 голосов
/ 16 марта 2012

Как я могу закрепить некоторые программы на панели задач в Windows 7, используя PowerShell? Пожалуйста, объясните шаг за шагом.

И как изменить следующий код, чтобы закрепить папку на панель задач? Например

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

По этому пути example именованная папка.

Ответы [ 3 ]

22 голосов
/ 16 марта 2012

Вы можете вызвать Verb (Pin to Taskbar), используя COM-объект Shell.Application.Вот пример кода:

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

Пример несколько сложен.Вот упрощенная версия:

$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()}
17 голосов
/ 22 февраля 2014

Другой способ

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

или открепить

$pn.invokeverb('taskbarunpin')

Примечание: notepad.exe не может быть под %windir%, он может существовать под %windir%\system32 для серверных ОС.

9 голосов
/ 02 августа 2015

Поскольку мне нужно было сделать это через PowerShell, я использовал методы, предоставленные здесь другими. Это моя реализация, которую я добавил в модуль PowerShell:


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')
}

Пример использования для сценария обеспечения:


# 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
}
...