Jump to content

wie mit PS Dateien suchen und in Variable speichern


Der letzte Beitrag zu diesem Thema ist mehr als 180 Tage alt. Bitte erstelle einen neuen Beitrag zu Deiner Anfrage!

Empfohlene Beiträge

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 zu diesem Kommentar

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 :-)

bearbeitet von andrew
Link zu diesem Kommentar
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 zu diesem Kommentar

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 zu diesem Kommentar

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

 

 

 

 

bearbeitet von daabm
Link zu diesem Kommentar
Der letzte Beitrag zu diesem Thema ist mehr als 180 Tage alt. Bitte erstelle einen neuen Beitrag zu Deiner Anfrage!

Schreibe einen Kommentar

Du kannst jetzt antworten und Dich später registrieren. Falls Du bereits ein Mitglied bist, logge Dich jetzt ein.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung jetzt entfernen

  Only 75 emoji are allowed.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor-Fenster leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

×
×
  • Neu erstellen...