Jump to content

wie mit PS Dateien suchen und in Variable speichern


Recommended Posts

Hallo zusammen

 

Frage: Bei uns in der Firma werden über GPOs für diverse Programm im User Autostart Menü auf dem Windows 10 Notebook eine Verknüpfung in diesem Pfad gespeichert. 

Folgende Verknüpfungen werden z.B. im User Autostart von Win10 gespeichert:

 

- Verknüpfung von Outlook 2016

- Verknüpfung von Microsoft Edge

- Verknüpfung einer Telefonsoftware, damit der Softclient automatisch nach dem User Login gestartet wird usw.

 

Nun, wenn Jemand mit einem solchen NB zu Hause im Homeoffice arbeitet oder sonst wo extern ist, werden natürlich diese Programme nach einem erfolgreichen User Login am PC auch immer gestartet, nur leider bringt das dem User nichts, weil der NB nicht mit dem Geschäfts Netzwerk verbunden werden kann oder verbunden wird (wir nutzen kein VPN).

 

Wir haben bei uns in der IT-Infrastruktur eine VDI Umgebung. Darum sollen die Benutzer mit Ihrem Notebook, nach erfolgreichem User Login einfach nur den VMware View Client starten, damit Sie auf unsere, interne VDI Umgebung sich verbinden können.

 

Darum möchte ich die Sache soweit bereinigen, dass immer wenn das NB NICHT am Geschäfts Netzwerk hängt, entsprechend ein Mechanismus angestossen wird, welcher lokal auf dem NB das Autostart Menü (alle Programm Verknüpfungen) löscht und oder sucht, in eine Variable speichert (z.B. $Outlook = Outlook Verknüpfung oder Variable $Edge = Microsoft Edge Verknüpfung) und ich dann so am Schluss noch einen Lösch Befehl für z.B. $Outlook via PS Skript absetzen könnte.

 

Lässt sich sowas via PS irgendwie machen?

Ich habe es versucht, indem ich gesagt habe, durchsuche den %AppData%\Roaming\Microsoft\Windows\Start Menu\Programs\Startup nach der Verknüpfung Microsoft Edge.Ink z.B. aber das PS hat mir keinen Inhalt in diesem Pfad aufgelistet, obwohl ja was drin ist?!

 

cheers

Andrew

Link to post
Posted (edited)

Hi MurdocX

 

So habe ich mein PS angefangen 

-------------

### zu durchsuchender Pfad
$Suchpfad = "$env:ProgramData\microsoft\windows\Start Menu\Programs\startup"

 

### gesuchte Dateien
$Outlook = Get-ChildItem -Path $Suchpfad -Include "Outlook"

$Edge = Get-ChildItem -Patch $Suchpfad -Include "Edge"

--------------

 

Wenn es was in die Variablen geschrieben hätte, hätte ich als nächsten Schritt irgendwie eine Zeile zusammengebastelt, welche sagen würde, lösch mal die $Varialbe $Outlook als Beispiel usw.

 

Die dahinter war, so Verknüpfungen aus dem Autostart Menü löschen zu wollen, weil ich so gezielt Objekte herauslöschen kann :-)

Edited by andrew
Link to post
vor 57 Minuten schrieb andrew:

PS hat mir keinen Inhalt in diesem Pfad aufgelistet, obwohl ja was drin ist?!

 

vor 4 Minuten schrieb andrew:

$Outlook = Get-ChildItem -Path $Suchpfad -Include "Outlook"

Deine Ausgabe landet in der Variable $Outlook. Versuch den Teil weg zu lassen, damit die Ausgabe direkt im Fenster erscheint.

 

Microsoft schreibt zum -Include Parameter Quelle: Get-ChildItem (Microsoft.PowerShell.Management) - PowerShell | Microsoft Docs folgendes:

Zitat

When the Include parameter is used, the Path parameter needs a trailing asterisk (*) wildcard to specify the directory's contents. For example, -Path C:\Test\*.

Demensprechend musst du den Suchpfad oben anpassen. Ich würde in dem Fall eher nach *.lnk suchen, um die Verknüpfungen in dem Verzeichnis allgemein abzufragen und im Nachhinein zu sortieren/filtern.

Link to post

So, nun habe ich mal einen Zeilencode, welcher die entsprechenden Verknüpfungen in entsprechenden Variablen abspeichert. 

Ich scheitere im Moment nur noch am Löschen der Verknüpfungen. Mein Skript sieht im Moment nun so aus:

 

### Verzeichnis, welches durchsucht wird

$Suchverzeichnis = "$Env:APPData\Microsoft\Windows\Start Menu\Programs\Startup"

 

### gesuchte Dateien

$Outlook = Get-ChildItem - Path $Suchverzeichnis -Recurse | Where-Object {$_.FullName -match "Outlook"}

$Edge = Get-ChildItem -Path $Suchverzeichnis -Recurse | Where-Object {$_.FullName -match "Edge"}

 

### Dateien ermitteln und löschen

Get-ChildItem -Path $Suchverzeichnis\* -Include $Outlook $Edge | Remove-Item -Force -Confirm

 

PowerShell gibt keinen Fehler aus, aber wenn ich im Autostartmenü nachschaue, sind die beiden Verknüpfungen immer noch da, was mache ich falsch?

Oder muss ich einen anderen Befehl nehmen als Get-ChildItem?

Link to post

Wenn Du in $Outlook und $Edge schon die richtigen Datei-Objekte hast, warum nicht einfach

$Outlook , $Edge  | Remove-Item -Force -Confirm:$False

?

 

In Kurzform:

Get-ChildItem - Path "$Env:APPData\Microsoft\Windows\Start Menu\Programs\Startup" -Recurse | Where-Object {$_.Name -match "Outlook|Edge"} | Remove-Item -Force -Confirm:$False

 

 

 

 

Edited by daabm
Link to post

Vielen Dank daabm

 

Habe vielleicht zuweist gesucht, versuche es später nach deinem Vorschlag: -)

Du hast mir 2 Lösungen präsentiert und ich habe mich für die kürzere Version entschieden

$Outlook , $Edge  | Remove-Item -Force -Confirm:$False

 

Das hat funktioniert, super Sache :-)

thx

Link to post
vor 20 Stunden schrieb MurdocX:

Der liebe Herr Kollege war schneller

 

Wenn ich schon mal zu meinen Forumsbesuchszeitfenstern mal eine offene Frage erwische, muss ich ja zugreifen :aetsch3:

Link to post

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Create New...