xxxviperxxx
Goto Top

Programm - Verknüpfungen auf dem Desktop, Taskleiste, Startmenü per Skript auslesen? - Win7

Guten Tag,

ich bin neu hier und noch in der Lehre zum Fachinformatiker.

Ich wollte fragen, ob es möglich ist per Skript Verknüpfungen, die sich auf dem Desktop, Taskleiste, Startmenü befinden auszulesen,
und am besten noch den jeweiligen Zielpfad der Verknüpfung auszulesen.

Ich soll bei einem Kunden, ein bestimmtes Programm - dessen Verknüpfung, den Zielpfad auslesen von allen sich beim Client befindenden Verknüpfungen
des speziellen Programms. Über 100 Client Rechner.

Wie ich auslese welche Verknüpfungen auf den Desktop sind, dies hab ich schon herausgefunden. Allerdings finde ich nichts, wie man Programmverknüpfungen auf der Taskleiste oder dem Startmenü auslese. Hat da jmd eine Idee?

Bisher hab i dies gefunden bzgl Zielpfad auslesen:

$sh = New-Object -COM Wscript.Shell

$targetPath = $sh.CreateShortcut('C:\Users\Benutzer\Desktop\XXX.lnk').TargetPath

Write-Host $targetPath

Über Hilfe wäre ich sehr dankbar.

LG

Content-Key: 330295

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

Ausgedruckt am: 19.03.2024 um 11:03 Uhr

Mitglied: xxxViperxxx
xxxViperxxx 23.02.2017 um 13:41:45 Uhr
Goto Top
Ok, also Verknüpfungen in Taskleiste, Startmenü, Desktop hab ich nun hinbekommen:

$user = [Environment]::Username

$desk ="C:\Users" + "\$user" + "\Desktop"

$taskbar = "C:\Users\" + "$user" + "\AppData\Roaming\Microsoft\Internet Explorer\Quick Launch\User Pinned\TaskBar"

$StartMenueRoaming = "C:\Users\" + "$user" + "\AppData\Roaming\Microsoft\Internet Explorer\Quick Launch\User Pinned\StartMenu"

$StartMenue = "C:\Users\" + "$user" + "\AppData\Roaming\Microsoft\Windows\Start Menu"

$StartPrograms = "C:\Users\" + "$user" + "\AppData\Roaming\Microsoft\Windows\Start Menu\Programs"


Get-ChildItem -Path $taskbar > C:\LOG.txt

Get-ChildItem -Path $StartMenue -filter *.lnk >> C:\LOG.txt

Get-ChildItem -Path $StartPrograms -filter *.lnk >> C:\LOG.txt

Get-ChildItem -Path $StartMenueRoaming -filter *.lnk >> C:\LOG.txt


Get-ChildItem -Path $desk -filter *.lnk >> C:\LOG.txt


Get-ChildItem -Path 'C:\Users\public\Desktop' -filter *.lnk >> C:\LOG.txt


So nun brauch ich nur noch eine Möglichkeit, dass ich dann aus der Verknüpfung, die mich eigentlich interessiert, diese auswähle und von der dann jeweils das Ziel auslese.
Hmm, dafür habe ich noch keinen Ansatz...
Hat jmd eine Idee?

Lg
Viper
Mitglied: 132272
Lösung 132272 23.02.2017 aktualisiert um 13:53:20 Uhr
Goto Top
Hmm, dafür habe ich noch keinen Ansatz...
Die Lösung hast du doch schon oben face-smile brauchst nur eine Foreach-Schleife über die Links laufen lassen :
$sh = New-Object -COM Wscript.Shell
Get-ChildItem -Path $desk -filter *.lnk | %{
    new-Object psobject -Property @{TargetPath=$sh.CreateShortCut($_.Fullname).TargetPath;Link=$_.Fullname}
} ft -Auto -Wrap
oder auch so
$sh = New-Object -COM Wscript.Shell
Get-ChildItem -Path $desk -filter *.lnk | select Fullname,@{n='TargetPath';e={$sh.CreateShortCut($_.Fullname).TargetPath}} | ft -Auto -Wrap  

Gruß
Mitglied: xxxViperxxx
xxxViperxxx 23.02.2017 um 14:01:37 Uhr
Goto Top
Hi,

danke für deine Antwort.
Puhh ich versuch mal des zu verstehen ^^. Also in deiner unteren Lösung gibst du alle Verknüpfungen aus die sich in der Variablen $desk befinden über ne Pipe machst du dann genau was? also ich schätze mal Ziel ausgeben, aber wie genau funktioniert das? und dann lässt du es durch ft (= format table? ) formatieren?

In deiner oberen Lösung kommt nach der Pipe ein Foreach soweit ich das erkennen kann, und was macht das new-Object psobject etc.? Kannst du mir als Laien das vielleicht kurz erklären? ;)

Danke.

Lg
Mitglied: 132272
Lösung 132272 23.02.2017 aktualisiert um 14:12:49 Uhr
Goto Top
Zitat von @xxxViperxxx:

Hi,

danke für deine Antwort.
Puhh ich versuch mal des zu verstehen ^^. Also in deiner unteren Lösung gibst du alle Verknüpfungen aus die sich in der Variablen $desk befinden über ne Pipe machst du dann genau was?
Das ist eine sogenannte Calculated-Property

und dann lässt du es durch ft (= format table? ) formatieren?
Jepp.
In deiner oberen Lösung kommt nach der Pipe ein Foreach soweit ich das erkennen kann,
Jepp
und was macht das new-Object psobject etc.? Kannst du mir als Laien das vielleicht kurz erklären?
Das erzeugt ein custom object mit zwei Eigenschaften, einmal den Pfad des Links und die zweite das Ziel des Links.
Vorteil bei Verwendung von custom objects ist das die Weiterverabeitung sehr flexibel gestalltbar ist, denn Powershell ist objektorientiert und die Vorteile sollte man auch nutzen.
Mitglied: xxxViperxxx
xxxViperxxx 23.02.2017 um 14:17:36 Uhr
Goto Top
Danke für deine Antwort, schon versteh ich mehr davon ;)

Des werd ich morgen in der Testumgebung beim Kunden gleich mal ausprobieren ^^

Lg