Pregunta Pin del programa a la barra de tareas usando PS en Windows 10


Estoy intentando anclar un programa a la barra de tareas en Windows 10 (RTM) usando este código:

$shell = new-object -com "Shell.Application"  
$folder = $shell.Namespace((Join-Path $env:SystemRoot System32\WindowsPowerShell\v1.0))
$item = $folder.Parsename('powershell_ise.exe')
$item.invokeverb('taskbarpin');

Esto funcionó en Windows 8.1, pero ya no funciona en Windows 10.

Si ejecuto $item.Verbs(), Obtengo estos:

Application Parent Name
----------- ------ ----
                   &Open
                   Run as &administrator
                   &Pin to Start

                   Restore previous &versions

                   Cu&t
                   &Copy
                   Create &shortcut
                   &Delete
                   Rena&me
                   P&roperties

Como puede ver, no hay ningún verbo para fijarlo a la barra de tareas. Sin embargo, si hago clic derecho en ese archivo específico, la opción está allí:
Available verbs in UI

Preguntas:
¿Me estoy perdiendo de algo?
¿Hay alguna forma nueva en Windows 10 de fijar un programa en la barra de tareas?


28
2017-07-30 09:56


origen


Respuestas:


Tengo el mismo problema y todavía no sé cómo manejarlo, pero esta pequeña herramienta de línea de comandos sí lo hace:

http://www.technosys.net/products/utils/pintotaskbar

Puedes usarlo en línea de comandos así:

syspin "path/file.exe" c:5386

para fijar un programa a la barra de tareas y

syspin "path/file.exe" c:5387

para desanclarlo Esto funciona bien para mi.


2
2017-12-09 15:03



En Windows 10, Microsoft agregó una simple comprobación antes de mostrar el verbo. El nombre del ejecutable debe ser explorer.exe. Puede estar en cualquier carpeta, solo el nombre está marcado. Entonces, la manera fácil en C # o en cualquier programa compilado sería simplemente cambiar el nombre de tu programa.

Si eso no es posible, puede engañar al objeto shell para que piense que su programa se llama explorer.exe. Escribí una publicación aquí sobre cómo hacerlo en C # cambiando la ruta de la imagen en el PEB.


2
2017-08-10 17:46



Aquí está la solución vbscript de Humberto portada a PowerShell:

Param($Target)

$KeyPath1  = "HKCU:\SOFTWARE\Classes"
$KeyPath2  = "*"
$KeyPath3  = "shell"
$KeyPath4  = "{:}"
$ValueName = "ExplorerCommandHandler"
$ValueData =
    (Get-ItemProperty `
        ("HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\" + `
            "CommandStore\shell\Windows.taskbarpin")
    ).ExplorerCommandHandler

$Key2 = (Get-Item $KeyPath1).OpenSubKey($KeyPath2, $true)
$Key3 = $Key2.CreateSubKey($KeyPath3, $true)
$Key4 = $Key3.CreateSubKey($KeyPath4, $true)
$Key4.SetValue($ValueName, $ValueData)

$Shell = New-Object -ComObject "Shell.Application"
$Folder = $Shell.Namespace((Get-Item $Target).DirectoryName)
$Item = $Folder.ParseName((Get-Item $Target).Name)
$Item.InvokeVerb("{:}")

$Key3.DeleteSubKey($KeyPath4)
if ($Key3.SubKeyCount -eq 0 -and $Key3.ValueCount -eq 0) {
    $Key2.DeleteSubKey($KeyPath3)
}

2
2018-02-11 05:29



Perdón por resucitar algo tan viejo.

No sé cómo hacer esto en powershell, pero en vbscript puedes hacer este método que desarrollé. Funciona independientemente del idioma del sistema.

Funciona en Windows 8.xy 10.

Guión

If WScript.Arguments.Count < 1 Then WScript.Quit
'----------------------------------------------------------------------
Set objFSO = CreateObject("Scripting.FileSystemObject")
objFile    = WScript.Arguments.Item(0)
sKey1      = "HKCU\Software\Classes\*\shell\{:}\\"
sKey2      = Replace(sKey1, "\\", "\ExplorerCommandHandler")
'----------------------------------------------------------------------
With WScript.CreateObject("WScript.Shell")
    KeyValue = .RegRead("HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer" & _
        "\CommandStore\shell\Windows.taskbarpin\ExplorerCommandHandler")

    .RegWrite sKey2, KeyValue, "REG_SZ"

    With WScript.CreateObject("Shell.Application")
        With .Namespace(objFSO.GetParentFolderName(objFile))
            With .ParseName(objFSO.GetFileName(objFile))
                .InvokeVerb("{:}")
            End With
        End With
    End With

    .Run("Reg.exe delete """ & Replace(sKey1, "\\", "") & """ /F"), 0, True
End With
'----------------------------------------------------------------------

Línea de comando:

pin and unpin: taskbarpin.vbs [fullpath]

Example: taskbarpin.vbs "C:\Windows\notepad.exe"

2
2017-10-05 19:59



¡Muy agradable! Hice algunos pequeños ajustes al ejemplo de PowerShell, espero que no te moleste :)

param (
    [parameter(Mandatory=$True, HelpMessage="Target item to pin")]
    [ValidateNotNullOrEmpty()]
    [string] $Target
)
if (!(Test-Path $Target)) {
    Write-Warning "You freaking dumbass!!! $Target does not exist"
    break
}

$KeyPath1  = "HKCU:\SOFTWARE\Classes"
$KeyPath2  = "*"
$KeyPath3  = "shell"
$KeyPath4  = "{:}"
$ValueName = "ExplorerCommandHandler"
$ValueData =
    (Get-ItemProperty `
        ("HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\" + `
            "CommandStore\shell\Windows.taskbarpin")
    ).ExplorerCommandHandler

$Key2 = (Get-Item $KeyPath1).OpenSubKey($KeyPath2, $true)
$Key3 = $Key2.CreateSubKey($KeyPath3, $true)
$Key4 = $Key3.CreateSubKey($KeyPath4, $true)
$Key4.SetValue($ValueName, $ValueData)

$Shell = New-Object -ComObject "Shell.Application"
$Folder = $Shell.Namespace((Get-Item $Target).DirectoryName)
$Item = $Folder.ParseName((Get-Item $Target).Name)
$Item.InvokeVerb("{:}")

$Key3.DeleteSubKey($KeyPath4)
if ($Key3.SubKeyCount -eq 0 -and $Key3.ValueCount -eq 0) {
    $Key2.DeleteSubKey($KeyPath3)
}

0
2018-04-06 16:27