derwowusste
Goto Top

Win10: wie unpin from start ohne Deinstallation

Moin.

Hat jemand schon folgendes skripten können: unpinnen einer modern app (z.B. des Stores) vom Startmenü ohne diese zu deinstallieren und ohne gleich ein komplettes Layout per GPo vorgeben zu müssen.

Content-Key: 287348

Url: https://administrator.de/contentid/287348

Printed on: April 19, 2024 at 02:04 o'clock

Member: colinardo
Solution colinardo Nov 03, 2015 updated at 09:17:49 (UTC)
Goto Top
Hi DWW,
ich habe mir neulich eine Methode durch Nachforschen selbst erarbeitet (wollte dazu schon einen Tipp schreiben, war aber noch nicht dazu gekommen), und zwar verwendet sie den speziellen Apps-Systemordner um an die Verknüpfungen der Modern-Apps zukommen. Das ist der folgende:
%windir%\explorer.exe shell:::{4234d49b-0245-4df3-b780-3893943456e1}
Mit diesem Ordnerpfad haben wir schon die halbe Miete, der mich zu dieser Funktion geführt hat
function UnPin-App([string]$appname){
    try{
        ((New-Object -Com Shell.Application).NameSpace('shell:::{4234d49b-0245-4df3-b780-3893943456e1}').Items() | ?{$_.Name -eq $appname}).Verbs() | ?{$_.Name.replace('&','') -match 'Von "Start" lösen|Unpin from Start'} | %{$_.DoIt()}  
    }catch{}
}
Benutzt wird das ganze dann so:
UnPin-App "Name der App"
um also bspw. die Kalender-App zu "unpinnen"
UnPin-App "Kalender"
Funktioniert hier testweise auf einem Windows 10 Enterprise hervorragend.

Hoffe das hilft dir und auch anderen, die bestimmt schon lange nach so einer Lösung suchen.
Grüße Uwe

Falls der Beitrag gefällt, seid so nett und unterstützt mich durch eine kleine Spende / If you like my contribution please support me and donate
Member: DerWoWusste
DerWoWusste Nov 03, 2015 at 09:08:27 (UTC)
Goto Top
Sieht klasse aus, Uwe!

Vielen Dank
Mitglied: 122990
122990 Nov 03, 2015 at 09:09:46 (UTC)
Goto Top
Zitat von @colinardo:
Hoffe das hilft dir und auch anderen, die bestimmt schon lange nach so einer Lösung suchen.
Double ThumbsUp face-smile
Genial, genau das hat mir noch gefehlt !

Vielen Dank @colinardo

Gruß grexit
Member: colinardo
colinardo Nov 03, 2015 at 09:38:28 (UTC)
Goto Top
Member: emeriks
emeriks Nov 08, 2015 at 16:25:42 (UTC)
Goto Top
Hi,
noch ein Hinweis aus eigener Erfahrung, falls mal jemand auf die Idee kommen sollte, dass auch umgekehrt zu nutzen.
Wir manchen das schon länger so, allerdings unter Windows 2008 R2 als TS (also nicht mit Apps sondern mit "richtigen"face-wink Programmen) und mit VBscript, und wir pinnen an. Wir hatten den Effekt, dass es dabei vorkam, dass manche Pins mehrfach erschienen, teilweise mit selben Name und teilweise mit "...(2)", "....(3)" usw. im Namen. Ich habe damals entsprechende Prüfungen ins Script eingebaut.

@uwe: Vielleicht kann man (Duface-wink) das in PS "schlanker" umsetzen.

Hier der Code, falls es interessiert.
(Hinweis: Berücksichtigt bloß Deutsch, dafür aber auch Taskleiste.)

On Error Resume Next
Dim WshShell : Set WshShell = CreateObject("Wscript.Shell")  
Dim FSO : Set FSO = CreateObject("Scripting.FileSystemObject")  
Dim WshNetwork : Set WshNetwork = CreateObject("Wscript.Network")  

Dim AllUsersStartMenu : AllUsersStartMenu = WshShell.SpecialFolders("AllUsersStartMenu")  
Dim gAppDataPath : gAppDataPath = WshShell.ExpandEnvironmentStrings("%AppData%")  

'------------------------------------------------------------------------------  
'Start  

'das Problem mit den Mehrfach-Pins beseitigen  
'1. Schritt  
'alle Pins mit "(..)" im Namen unpinnen  
For Each Base In Array("TaskBar","StartMenu")  
  BaseDir = gAppDataPath & "\Microsoft\Internet Explorer\Quick Launch\User Pinned\" & Base  
  For Each File In FSO.GetFolder(BaseDir).Files
    If InStr(File.Name, "(") > 0 Then  
      'Datei mit Klammer  
      If Base = "TaskBar" Then  
        UnPinFromTaskbar BaseDir, File.Name
      ElseIf Base = "StartMenu" Then  
        UnPinFromStartMenu BaseDir, File.Name
      End If
    End If
  Next
Next
'2. Schritt  
'alle Dateien im Pin-Ordner, welche NICHT pinned sind, löschen  
For Each Base In Array("TaskBar","StartMenu")  
  BaseDir = gAppDataPath & "\Microsoft\Internet Explorer\Quick Launch\User Pinned\" & Base  
  For Each File In FSO.GetFolder(BaseDir).Files
    If Base = "TaskBar" Then  
      DeleteIfNotTaskbarPinned BaseDir, File.Name
    ElseIf Base = "StartMenu" Then  
      DeleteIfNotStartmenuPinned BaseDir, File.Name
    End If
  Next
Next

'jetzt die regulär gewünschten Pins organisieren  
UnPinFromStartMenu AllUsersStartMenu, "zugeordnete Drucker aktualisieren.lnk"  
PinToStartMenu AllUsersStartMenu, "zugeordnete Drucker aktualisieren.lnk"  

UnPinFromTaskbar "C:\Windows\system32\WindowsPowerShell\v1.0", "powershell.exe"  
UnPinFromTaskbar "C:\Windows\system32", "ServerManager.msc"  

WScript.Quit(0)
'Ende  


'==============================================================================    
'=== Subroutinen ==============================================================  
'==============================================================================    
Sub PinToStartMenu(FolderPath, FileName)
  On Error Resume Next
  Dim objShell
  Dim objFolder
  Dim objFolderItem
  Dim colVerbs
  Dim objVerb

  Set objShell = CreateObject("Shell.Application")  
  Set objFolder = objShell.Namespace(FolderPath) 
  Set objFolderItem = objFolder.ParseName(FileName) 
  
  If Not objFolderItem Is Nothing Then
    Set colVerbs = objFolderItem.Verbs 
    For Each objVerb in colVerbs 
      If Replace(objVerb.name, "&", "") = "An Startmenü anheften" Then  
        objVerb.DoIt 
      End If
    Next
  End If
End Sub
'------------------------------------------------------------------------------  
Sub PinToTaskBar(FolderPath, FileName)
  On Error Resume Next
  Dim objShell
  Dim objFolder
  Dim objFolderItem
  Dim colVerbs
  Dim objVerb

  Set objShell = CreateObject("Shell.Application")  
  Set objFolder = objShell.Namespace(FolderPath) 
  Set objFolderItem = objFolder.ParseName(FileName) 
  
  If Not objFolderItem Is Nothing Then
    Set colVerbs = objFolderItem.Verbs 
    For Each objVerb in colVerbs 
      If Replace(objVerb.name, "&", "") = "An Taskleiste anheften" Then  
        objVerb.DoIt 
      End If
    Next
  End If
End Sub
'------------------------------------------------------------------------------  
Sub UnPinFromTaskbar(FolderPath, FileName)
  On Error Resume Next
  Dim objShell
  Dim objFolder
  Dim objFolderItem
  Dim colVerbs
  Dim objVerb

  Set objShell = CreateObject("Shell.Application")  
  Set objFolder = objShell.Namespace(FolderPath) 
  Set objFolderItem = objFolder.ParseName(FileName) 
  
  If Not objFolderItem Is Nothing Then
    Set colVerbs = objFolderItem.Verbs 
    For Each objVerb in colVerbs 
      If InStr(Replace(objVerb.name, "&", ""), "Taskleiste lösen") > 0 Then  
        objVerb.DoIt 
      End If
    Next
  End If
End Sub
'------------------------------------------------------------------------------  
Sub UnPinFromStartMenu(FolderPath, FileName)
  On Error Resume Next
  Dim objShell
  Dim objFolder
  Dim objFolderItem
  Dim colVerbs
  Dim objVerb

  Set objShell = CreateObject("Shell.Application")  
  Set objFolder = objShell.Namespace(FolderPath) 
  Set objFolderItem = objFolder.ParseName(FileName) 
  
  If Not objFolderItem Is Nothing Then
    Set colVerbs = objFolderItem.Verbs 
    For Each objVerb in colVerbs 
      If InStr(Replace(objVerb.name, "&", ""), "Startmenü lösen") > 0 Then  
        objVerb.DoIt 
      ElseIf InStr(Replace(objVerb.name, "&", ""), "Liste entfernen") > 0 Then  
        objVerb.DoIt 
      End If
    Next
  End If
End Sub
'------------------------------------------------------------------------------  
Sub DeleteIfNotStartmenuPinned(FolderPath, FileName)
  On Error Resume Next
  Dim objShell
  Dim objFolder
  Dim objFolderItem
  Dim colVerbs
  Dim objVerb
  Dim IsPinned
  
  IsPinned = False
  Set objShell = CreateObject("Shell.Application")  
  Set objFolder = objShell.Namespace(FolderPath) 
  Set objFolderItem = objFolder.ParseName(FileName) 
  
  If Not objFolderItem Is Nothing Then
    Set colVerbs = objFolderItem.Verbs 
    For Each objVerb in colVerbs 
      If InStr(Replace(objVerb.name, "&", ""), "Startmenü lösen") > 0 Then  
        IsPinned = True
        Exit For
      End If
    Next
  End If
  If Not IsPinned Then
    CreateObject("Scripting.FileSystemObject").DeleteFile FolderPath & "\" & FileName, True  
  End If
End Sub
'------------------------------------------------------------------------------  
Sub DeleteIfNotTaskbarPinned(FolderPath, FileName)
  On Error Resume Next
  Dim objShell
  Dim objFolder
  Dim objFolderItem
  Dim colVerbs
  Dim objVerb
  Dim IsPinned
  
  IsPinned = False
  Set objShell = CreateObject("Shell.Application")  
  Set objFolder = objShell.Namespace(FolderPath) 
  Set objFolderItem = objFolder.ParseName(FileName) 
  
  If Not objFolderItem Is Nothing Then
    Set colVerbs = objFolderItem.Verbs 
    For Each objVerb in colVerbs 
      If InStr(Replace(objVerb.name, "&", ""), "Taskleiste lösen") > 0 Then  
        IsPinned = True
        Exit For
      End If
    Next
  End If
  If Not IsPinned Then
    CreateObject("Scripting.FileSystemObject").DeleteFile FolderPath & "\" & FileName, True  
  End If
End Sub
'------------------------------------------------------------------------------  


E.