Powershell nur eine Zeile eines Befehl-Outputs ausgeben?

3 Antworten

Vom Fragesteller als hilfreich ausgezeichnet

erstmal nur das ermitteln des Wlanschüssels:

(netsh wlan show profile WLAN-NAME key=clear|?{$_ -like '*Sicherheitsschl*'}) -split '\s+:\s+'|select -last 1

was macht diese Zeile....

  • filtert aus dem Output des netsh wlan... -Befehls die Zeile mit dem String: "Sicherheitsschlüssel"
  • Die Zeile wird an "ein/mehrereLeerzeichen :ein/mehrereLeerzeichen" zerlegt
  • ...davon wählen wir das letzte Stück

auf Änderung prüfen etc:

$WlanName = 'DemoWlan'
$PasswordFile = "$WlanName.txt"

 #wenn Datei bereits existiert Password einlesen (wenn nicht  ignorieren
$lastPassword = Get-Content $PasswordFile -ErrorAction SilentlyContinue
  #Passwort  aus Profil lesen
(netsh wlan show profile $WlanName key=clear|?{$_ -like '*Sicherheitsschl*'}) -split '\s+:\s+'|
  select -last 1|
  ?{$_ -ne $lastPassword}|
  %{
       #wenn das nicht zu dem aus der Datei passt...
      Write-Host Passwort hat sich geaendert: $_ -fo red
      Set-Content $_ -Path $PasswordFile  #in Datei schreiben
    } 
  pause
Woher ich das weiß:eigene Erfahrung – Ich mach das seit 30 Jahren
SirFabio413 
Fragesteller
 12.12.2022, 13:38

Wow!

0

Um das gewünschte Ziel zu erreichen, kannst du ein Skript in einer Skriptsprache wie Python oder Bash erstellen. Im Folgenden finden Sie ein Beispiel für ein Skript in Bash, das den gewünschten Zweck erfüllen könnte:

#!/bin/bash # Ausführen des Befehls "netsh wlan show profile name=blabla key=clear" und speichern des Ausgabestrings in einer Variablen output=$(netsh wlan show profile name=blabla key=clear)

# Extraktion der Zeile mit dem Schlüsselinhalt aus dem Ausgabestring

key_line=$(echo "$output" | grep "Key Content") # Überprüfung, ob der Schlüsselinhalt sich geändert hat if [ "$key_line" != "$previous_key_line" ]; then

# Wenn sich der Schlüsselinhalt geändert hat, schreiben wir ihn in eine Datei echo "$key_line" > key.txt

# Speichern des aktuellen Schlüsselinhalts für den Vergleich beim nächsten Ausführen des Skripts previous_key_line="$key_line" fi

Bitte beachte, dass dies nur ein Beispiel ist und an Ihre spezifischen Bedürfnisse angepasst werden muss.

Zunächst musst du das Skript auf Ihrem Computer erstellen und dann den Befehl "chmod +x [Skriptname]" ausführen, um es ausführbar zu machen. Anschließend können Sie das Skript ausführen, indem Sie den Befehl "./[Skriptname]" im Terminal eingeben.

Ich hoffe, dass dies hilfreich ist!

SirFabio413 
Fragesteller
 12.12.2022, 11:30

Das ist seehr kompliziert ich kenne mich leider nicht gut aus und möchte am liebsten im Powershell selbst bleiben wenn das geht. Aber danke für die Ausführliche Antwort.

0
Kurator92  12.12.2022, 13:20
@SirFabio413

Mit powershell kannst du folgende Schritte ausführen:

  1. Führe das folgende Kommando aus, um die Zeile mit dem Schlüsselinhalt auszugeben und in eine Datei zu schreiben:

$output = netsh wlan show profile name=blabla key=clear | Select-String -pattern "Schlüsselinhalt:"

$output | Out-File -FilePath "C:\Dateiname.txt"

  1. Erstelle ein Skript, das den Inhalt der Datei "Dateiname.txt" ausliest und überprüft, ob sich der Schlüsselinhalt geändert hat. Wenn sich der Schlüsselinhalt geändert hat, soll das Skript den neuen Schlüsselinhalt auslesen und in die Datei schreiben.

$oldKey = Get-Content "C:\Dateiname.txt"

$newKey = netsh wlan show profile name=blabla key=clear | Select-String -pattern "Schlüsselinhalt:"

if ($oldKey -ne $newKey) {

$newKey | Out-File -FilePath "C:\Dateiname.txt"

}

  1. Führe dann das Skript aus, um zu überprüfen, ob sich der Schlüsselinhalt geändert hat und ihn ggf. auszulesen und in die Datei zu schreiben.

.\Skriptname.ps1

0
Erzesel  12.12.2022, 12:58

Echt mal?

Warum sollte man mit Python oder Bash herummurksen , wenn man Powershell auf dem Rechner hat?

Beide von Dir angegebenen Sprachen müssten zudem erstmal installiert werden. Beide Sprachen sind Leistungsschwächer als Powershell.

grep "Key Content" ist Müll, da netsh einen lokalisierten Output hat. der Filter wäre "Sicherheitsschlüssel"

0