121851
Goto Top

Automatischer Login per Telnet

Hallo zusammen,

ich habe folgendes Problem. Erstmal bin ich nicht so fit was Programmieren angeht.
Gibt es eine möglichkeit eine Batch-Datei zuschreiben die z.B einen Neustart eines Gerätes durchführt?
Das Gerät hat eine feste IP, einen Benutzernamen und ein Passwort.
Ist es möglich das Listen mässig abzuarbeiten?

Anbei mal ein Bild wie das ganze Aussieht.
35744d9566c68b04d2b335c9cd502bb7

Vielen Dank schon mal für eure Hilfe.

Mit freundlichen Grüßen
fuddel18

Content-Key: 270997

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

Ausgedruckt am: 29.03.2024 um 05:03 Uhr

Mitglied: Lochkartenstanzer
Lochkartenstanzer 04.05.2015 aktualisiert um 08:16:53 Uhr
Goto Top
Zitat von @121851:

Gibt es eine möglichkeit eine Batch-Datei zuschreiben die z.B einen Neustart eines Gerätes durchführt?
Das Gerät hat eine feste IP, einen Benutzernamen und ein Passwort.

Ja,

Ist es möglich das Listen mässig abzuarbeiten?

Ja.

Anbei mal ein Bild wie das ganze Aussieht.

???

Moin,

So was kann man z.B. mit expect scripten.

lks

PS: Es gibt auch Windows-versione von tcl/tk, mit dem expect unter windows läuft oder man nimmt expect.net.
Mitglied: 114757
114757 04.05.2015 um 09:03:57 Uhr
Goto Top
Mitglied: 121851
121851 04.05.2015 um 11:54:47 Uhr
Goto Top
Sorry, bild vergessen einzufügen. Kann jemand den Code mal schreiben?
Mitglied: colinardo
colinardo 04.05.2015 aktualisiert um 19:08:00 Uhr
Goto Top
Moin zusammen,
Kann jemand den Code mal schreiben?
habe ich gerade als Powershell-Script da.
Hostname, Username, Password werden in der letzen Zeile angepasst.

Da ich es für deinen Fall nicht testen kann unverbindlich und ohne Gewähr. Eventuell musst du die waittime (ms) erhöhen falls es nicht klappen sollte.
function Invoke-Telnet{
param(
    [parameter(mandatory=$true)][string]$hostname,
    [int]$port = 23,
    [parameter(mandatory=$true)][string]$username,
    [parameter(mandatory=$true)][string]$password,
    [string[]]$commands,
    [int]$waittime = 1000
)
    $tcpclient = new-object System.Net.Sockets.TcpClient($hostname,$port)
    if ($tcpClient.Connected){
        write-host "Connected to $hostname" -ForegroundColor Green  
        $stream = $tcpclient.GetStream()
        $writer = new-Object System.IO.StreamWriter($stream)
        $buffer = new-Object Byte 1024
        $encoding = new-Object System.Text.ASCIIEncoding
        
        # Login
        write-host "Login..." -ForegroundColor Green  
        sleep -Milliseconds $waittime
        $writer.WriteLine($username)
        $writer.Flush()
        sleep -Milliseconds $waittime
        $writer.WriteLine($password)
        $writer.Flush()
        sleep -Milliseconds $waittime
        
        # invoke remote commands
        $commands | %{
            write-host "Invoking Command: $_" -ForegroundColor Yellow  
            $writer.WriteLine($_)
            $writer.Flush()
            sleep -Milliseconds $waittime
        }
        $output = ""  
        while ($stream.DataAvailable){
            [int32]$bytes = $stream.Read($buffer,0,$buffer.length)
            $output += $encoding.GetString($buffer,0,$bytes)
        }
        # release resources
        $writer.Close();$writer.Dispose()
        # return output
        write-host "Response:`n" -ForegroundColor Black -BackgroundColor Yellow  
        return $output
    }else{
        write-host "Could not connect to $hostname on Port $port" -ForegroundColor Red  
    }
    $tcpclient.Close()
    $tcpclient.Dispose()
}

Invoke-Telnet -hostname '169.254.102.184' -username 'bssaudio' -password 'GEHEIM' -commands 'reboot'  
Grüße Uwe
Mitglied: 121851
121851 04.05.2015 um 17:06:40 Uhr
Goto Top
Hallo colinardo,

Vielen Dank schon mal.
Sorry für mein unwissen kann, ich das in eine Batch-Datei kopieren, ändern und es geht?

Gruß
fuddel18
Mitglied: colinardo
colinardo 04.05.2015 aktualisiert um 18:26:12 Uhr
Goto Top
Zitat von @121851:
kann, ich das in eine Batch-Datei kopieren, ändern und es geht?
Nein, sonst hätte ich ja nicht geschrieben das es Powershell ist face-wink Lässt sich aber eigentlich in 1 Minute ergoogeln ....

Da mir die Frage öfter gestellt wird:
back-to-topAnleitung: Wie starte ich Powershell-Scripte
  • Zuerst speichert man den Code in einer Textdatei mit der Endung .ps1.
  • Wenn man zum ersten mal Powershell-Scripte ausführt, musst man einmalig vorher noch das Ausführen von Scripten im User-Account freischalten. Dazu öffnet man eine administrative Powershell-Konsole und gibt dort den Befehl Set-ExecutionPolicy RemoteSigned -Force ein. Um diese Policy für alle User auf dem Rechner zu setzen muss man diesen Befehl in einer Powershell-Konsole mit Admin-Rechten starten. Noch ein Hinweis für 64-Bit-Systeme: Hier sollte sowohl für die 32bit und 64Bit Variante der Powershell die Policy in einer Admin-Konsole gesetzt werden: Set-ExecutionPolicy RemoteSigned -Force; start-job { Set-ExecutionPolicy RemoteSigned -Force } -RunAs32
  • Jetzt kann das Powershell-Script wie weiter unten erläutert in einer Powershell-Konsole oder aus einer CMD-Fenster heraus ausgeführt werden. Wer lieber mit der Maus arbeitet macht einen Rechtsklick auf die Script-Datei und wählt: Mit Powershell ausführen.
back-to-topStarten eines Scriptes in einer Powershell-Konsole
Immer den kompletten Pfad zum Script angeben, und wenn er Leerzeichen beinhaltet in Anführungszeichen einschließen:
"C:\Pfad\script.ps1"
Liegt das Script im selben Verzeichnis in dem man sich gerade befindet, kann man es auch so abkürzen:
.\script.ps1
back-to-topStarten von PS-Scripten aus Batch und Kommandozeilen heraus:
Hier gibt es unterschiedliche Methoden, je nach Anforderungen gibt es hier einige Besonderheiten vor allem bei Leerzeichen in Pfaden zu beachten!
Der einfachste Aufruf sieht hier so aus:
powershell.exe -File "C:\Pfad\Script.ps1"
Wenn man dem Script Parameter übergeben möchte:
powershell.exe -File "C:\Pfad\Script.ps1" "Parameter 1" "Parameter 2"
Wenn man "benannte" Parameter übergeben möchte (die einfachen Hochkommas um den Scriptpfad werden benötigt wenn er Leerzeichen beinhaltet):
powershell.exe -command "&'C:\Pfad\Script.ps1' -par1 'Wert1' -par2 'Wert2'"
Man kann auch mehrere Scripte hintereinander ausführen lassen:
powershell.exe -command "&'C:\Pfad\Script1.ps1';&'C:\Pfad\Script2.ps1'"
Weitere Parameter zeigt einem ein powershell -? in einer Konsole an.
back-to-topStarten von PS-Scripten in der Aufgabenplanung (Taskplaner)
In der jeweiligen Aktion unter "Programm/Script" trägt man powershell.exe ein und unter "Argumente hinzufügen (optional)" trägt man wie oben geschrieben alles was hinter powershell.exe kommt ein - also z.B. -File "C:\Pfad\Script.ps1" "Parameter 1" "Parameter 2"