gpt4 book ai didi

windows - 使用 PowerShell 根据快捷方式目标路径取消固定任务栏快捷方式

转载 作者:可可西里 更新时间:2023-11-01 13:23:45 26 4
gpt4 key购买 nike

某些 PowerShell 出现问题。基本上,我试图根据快捷方式路径/exe 文件删除某些任务栏快捷方式。

我的以下代码从 AppData 文件夹中获取固定的快捷方式及其名称:

Function Get-TaskbarShortcuts
{
Begin{
Clear-Host
$Path = "C:\Users\username\AppData\Roaming\Microsoft\Internet Explorer\Quick Launch\User Pinned\TaskBar"
$x=0
} # End of Begin

Process
{
$TaskbarShortcuts = Get-ChildItem $Path -Recurse -Include *.lnk
ForEach($ShortCut in $TaskbarShortcuts)
{
$Shell = New-Object -ComObject WScript.Shell
$Properties = @{
ShortcutName = $Shortcut.Name
LinkTarget = $Shell.CreateShortcut($Shortcut).targetpath
}
New-Object PSObject -Property $Properties
$x ++
Write-Host $ShortCut
} #End of ForEach
[Runtime.InteropServices.Marshal]::ReleaseComObject($Shell) | Out-Null
} # End of Process
End{}
}

我需要修改此代码以删除某些快捷方式...例如,用户固定了“C:\Windows\notepad.exe”但称快捷方式名称有些奇怪。我如何从任务栏中删除实际的图钉(而不仅仅是删除快捷方式文件)?

最佳答案

从“C:\Users\用户名\AppData\Roaming\Microsoft\Internet Explorer\Quick Launch\User Pinned\TaskBar”中删除快捷方式会保留任务栏上的图标但处于无法使用的状态,单击它会弹出一个错误它不存在并询问您是否要删除它。我猜这是您想避免的。

似乎没有一种简单的方法可以做到这一点,但 TechNet 脚本中心中有一个模块可以解决这个问题:

Pin and unpin applications from the taskbar and Start-menu

###########################################################################" 
#
#
# NAME: PinnedApplications.psm1
#
# AUTHOR: Jan Egil Ring, Crayon
#
# DATE : 06.08.2010
#
# COMMENT: Module with the ability to pin and unpin programs from the taskbar and the Start-menu in Windows 7 and Windows Server 2008 R2.
#
# This module are based on the Add-PinnedApplication script created by Ragnar Harper and Kristian Svantorp:
# http://blogs.technet.com/kristian/archive/2009/04/24/nytt-script-pin-to-taskbar.aspx
# http://blog.crayon.no/blogs/ragnar/archive/2009/04/17/pin-applications-to-windows-7-taskbar.aspx
#
# Johan Akerstrom`s blog: http://cosmoskey.blogspot.com
#
# For more information, see the following blog post:
# http://blog.crayon.no/blogs/janegil/archive/2010/02/26/pin-and-unpin-applications-from-the-taskbar-and-start-menu-using-windows-powershell.aspx
#
# VERSION HISTORY:
# 1.0 17.04.2009 - Initial release by Ragnar Harper and Kristian Svantorp
# 1.1 26.02.2010 - Update by Jan Egil Ring. Added the capability to unpin applications.
# 1.2 06.08.2010 - Update by Johan Akerstrom. Added full MUI support.
#
###########################################################################"


function Set-PinnedApplication
{
<#
.SYNOPSIS
This function are used to pin and unpin programs from the taskbar and Start-menu in Windows 7 and Windows Server 2008 R2
.DESCRIPTION
The function have to parameteres which are mandatory:
Action: PinToTaskbar, PinToStartMenu, UnPinFromTaskbar, UnPinFromStartMenu
FilePath: The path to the program to perform the action on
.EXAMPLE
Set-PinnedApplication -Action PinToTaskbar -FilePath "C:\WINDOWS\system32\notepad.exe"
.EXAMPLE
Set-PinnedApplication -Action UnPinFromTaskbar -FilePath "C:\WINDOWS\system32\notepad.exe"
.EXAMPLE
Set-PinnedApplication -Action PinToStartMenu -FilePath "C:\WINDOWS\system32\notepad.exe"
.EXAMPLE
Set-PinnedApplication -Action UnPinFromStartMenu -FilePath "C:\WINDOWS\system32\notepad.exe"
#>
[CmdletBinding()]
param(
[Parameter(Mandatory=$true)][string]$Action,
[Parameter(Mandatory=$true)][string]$FilePath
)
if(-not (test-path $FilePath)) {
throw "FilePath does not exist."
}

function InvokeVerb {
param([string]$FilePath,$verb)
$verb = $verb.Replace("&","")
$path= split-path $FilePath
$shell=new-object -com "Shell.Application"
$folder=$shell.Namespace($path)
$item = $folder.Parsename((split-path $FilePath -leaf))
$itemVerb = $item.Verbs() | ? {$_.Name.Replace("&","") -eq $verb}
if($itemVerb -eq $null){
throw "Verb $verb not found."
} else {
$itemVerb.DoIt()
}

}
function GetVerb {
param([int]$verbId)
try {
$t = [type]"CosmosKey.Util.MuiHelper"
} catch {
$def = [Text.StringBuilder]""
[void]$def.AppendLine('[DllImport("user32.dll")]')
[void]$def.AppendLine('public static extern int LoadString(IntPtr h,uint id, System.Text.StringBuilder sb,int maxBuffer);')
[void]$def.AppendLine('[DllImport("kernel32.dll")]')
[void]$def.AppendLine('public static extern IntPtr LoadLibrary(string s);')
add-type -MemberDefinition $def.ToString() -name MuiHelper -namespace CosmosKey.Util
}
if($global:CosmosKey_Utils_MuiHelper_Shell32 -eq $null){
$global:CosmosKey_Utils_MuiHelper_Shell32 = [CosmosKey.Util.MuiHelper]::LoadLibrary("shell32.dll")
}
$maxVerbLength=255
$verbBuilder = new-object Text.StringBuilder "",$maxVerbLength
[void][CosmosKey.Util.MuiHelper]::LoadString($CosmosKey_Utils_MuiHelper_Shell32,$verbId,$verbBuilder,$maxVerbLength)
return $verbBuilder.ToString()
}

$verbs = @{
"PintoStartMenu"=5381
"UnpinfromStartMenu"=5382
"PintoTaskbar"=5386
"UnpinfromTaskbar"=5387
}

if($verbs.$Action -eq $null){
Throw "Action $action not supported`nSupported actions are:`n`tPintoStartMenu`n`tUnpinfromStartMenu`n`tPintoTaskbar`n`tUnpinfromTaskbar"
}
InvokeVerb -FilePath $FilePath -Verb $(GetVerb -VerbId $verbs.$action)
}

Export-ModuleMember Set-PinnedApplication

关于windows - 使用 PowerShell 根据快捷方式目标路径取消固定任务栏快捷方式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25041205/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com