Telnet Output auf mehreren Zeilen
Hallo Zusammen
Ich habe etwas Probleme mit der Ausgabe eines bestimmten Scripts, so ist es jetzt:
Soweit funktioniert es, nur ist die Ausgabe eine einzelne Zeile und nicht wirklich leserlich. Deswegen würde ich gerne für jede IP-Adresse mit den drei Werten eine neue Zeile beginnen. Das habe ich versucht:
Der Versuch war, die ausgabe ($csvRow += ($ampere + ";") | Export-CSV -Path C:\users\output.csv -Append) mit Export-CSV auszugeben, damit neue Zeilen erstellt werden, aber irgendwie werden nur irgendwelche zufälligen Zahlen ausgegeben.
Könnt ihr mir sagen, was ich falsch mache?
Besten Dank für eure Auskunft.
Gruss,
Gabriel
Ich habe etwas Probleme mit der Ausgabe eines bestimmten Scripts, so ist es jetzt:
#This script retrieves ampere figures from APC-PDUs based on telnet/TCP.
$TelnetServers = @("10.202.77.244","10.202.77.247","10.202.77.243","10.202.77.242","10.202.77.251","10.202.77.241","10.202.77.239","10.202.77.240","10.202.77.236","10.202.77.237","10.202.77.235","10.202.77.234","10.202.77.237","10.202.77.233","10.202.77.232","10.202.77.231")
$TelnetPort = "23"
$CsvFilePath = $PSCommandPath.substring(0, $PSCommandPath.length - 4) + ".csv"
$csvRow = (Get-Date -Format "dd.MM.yyyy HH:mm;")
Foreach($TelnetServer in $TelnetServers)
{
Write-Output("Processing PDU with IP " + $TelnetServer)
$tcpConnection = New-Object System.Net.Sockets.TcpClient($TelnetServer, $TelnetPort)
$tcpStream = $tcpConnection.GetStream()
$tcpReader = New-Object System.IO.StreamReader($tcpStream)
$tcpWriter = New-Object System.IO.StreamWriter($tcpStream)
Start-Sleep -Milliseconds 200
$tcpWriter.WriteLine("apc") | Out-Null
$tcpWriter.Flush()
Start-Sleep -Milliseconds 200
$tcpWriter.WriteLine("apc") | Out-Null
$tcpWriter.Flush()
Start-Sleep -Milliseconds 200
$tcpWriter.WriteLine("Phreading all current") | Out-Null
$tcpWriter.Flush()
Start-Sleep -Milliseconds 200
$searching = $true
while ($searching) {
$tcpWriter.WriteLine("")
$tcpWriter.Flush()
Start-Sleep -Milliseconds 200
while ($tcpStream.DataAvailable)
{
$text = $tcpReader.ReadLine()
if ($text.StartsWith("1: ") -or $text.StartsWith("2: ") -or $text.StartsWith("3: "))
{
if ($text.StartsWith("3: "))
{
$searching = $false
}
$ampere = $text.Substring(3, $text.length - 5)
$csvRow += ($ampere + ";") #| Export-CSV -Path C:\users\output.csv -Append
Write-Output $ampere
}
}
}
$tcpWriter.WriteLine("exit")
$tcpWriter.Flush()
Start-Sleep -Milliseconds 200
$tcpReader.Close()
$tcpWriter.Close()
$tcpConnection.Close()
}
Add-Content $CsvFilePath $csvRow
Soweit funktioniert es, nur ist die Ausgabe eine einzelne Zeile und nicht wirklich leserlich. Deswegen würde ich gerne für jede IP-Adresse mit den drei Werten eine neue Zeile beginnen. Das habe ich versucht:
#This script retrieves ampere figures from APC-PDUs based on telnet/TCP.
$TelnetServers = @("10.202.77.244","10.202.77.247","10.202.77.243","10.202.77.242","10.202.77.251","10.202.77.241","10.202.77.239","10.202.77.240","10.202.77.236","10.202.77.237","10.202.77.235","10.202.77.234","10.202.77.237","10.202.77.233","10.202.77.232","10.202.77.231")
$TelnetPort = "23"
$CsvFilePath = $PSCommandPath.substring(0, $PSCommandPath.length - 4) + ".csv"
$csvRow = (Get-Date -Format "dd.MM.yyyy HH:mm;")
Foreach($TelnetServer in $TelnetServers)
{
Write-Output("Processing PDU with IP " + $TelnetServer)
$tcpConnection = New-Object System.Net.Sockets.TcpClient($TelnetServer, $TelnetPort)
$tcpStream = $tcpConnection.GetStream()
$tcpReader = New-Object System.IO.StreamReader($tcpStream)
$tcpWriter = New-Object System.IO.StreamWriter($tcpStream)
Start-Sleep -Milliseconds 200
$tcpWriter.WriteLine("apc") | Out-Null
$tcpWriter.Flush()
Start-Sleep -Milliseconds 200
$tcpWriter.WriteLine("apc") | Out-Null
$tcpWriter.Flush()
Start-Sleep -Milliseconds 200
$tcpWriter.WriteLine("Phreading all current") | Out-Null
$tcpWriter.Flush()
Start-Sleep -Milliseconds 200
$searching = $true
while ($searching) {
$tcpWriter.WriteLine("")
$tcpWriter.Flush()
Start-Sleep -Milliseconds 200
while ($tcpStream.DataAvailable)
{
$text = $tcpReader.ReadLine()
if ($text.StartsWith("1: ") -or $text.StartsWith("2: ") -or $text.StartsWith("3: "))
{
if ($text.StartsWith("3: "))
{
$searching = $false
}
$ampere = $text.Substring(3, $text.length - 5)
$csvRow += ($ampere + ";") | Export-CSV -Path C:\users\output.csv -Append
Write-Output $ampere
}
}
}
$tcpWriter.WriteLine("exit")
$tcpWriter.Flush()
Start-Sleep -Milliseconds 200
$tcpReader.Close()
$tcpWriter.Close()
$tcpConnection.Close()
}
#Add-Content $CsvFilePath $csvRow
Der Versuch war, die ausgabe ($csvRow += ($ampere + ";") | Export-CSV -Path C:\users\output.csv -Append) mit Export-CSV auszugeben, damit neue Zeilen erstellt werden, aber irgendwie werden nur irgendwelche zufälligen Zahlen ausgegeben.
Könnt ihr mir sagen, was ich falsch mache?
Besten Dank für eure Auskunft.
Gruss,
Gabriel
Please also mark the comments that contributed to the solution of the article
Content-ID: 612353
Url: https://administrator.de/contentid/612353
Printed on: October 15, 2024 at 02:10 o'clock
2 Comments
Latest comment
Moin,
die Funktion Export-CSV nimmt ein Objekt und wandelt dieses dann in eine CSV um. Du versuchst hier aber bereits deinen fertigen CSV-String in die Funktion zu übergeben. Das funktioniert so aber nicht.
Entweder du packst deine Daten in ein Objekt(-Array) und nutzt dann die Export-CSV oder aber du schreibst deinen Plaintext in die Datei.
Siehe hier: https://docs.microsoft.com/en-us/powershell/module/microsoft.powershell. ...
und hier: https://docs.microsoft.com/en-us/powershell/module/microsoft.powershell. ...
Für einen der beiden Wege musst du dich entscheiden, der Mix klappt nicht.
VG
die Funktion Export-CSV nimmt ein Objekt und wandelt dieses dann in eine CSV um. Du versuchst hier aber bereits deinen fertigen CSV-String in die Funktion zu übergeben. Das funktioniert so aber nicht.
Entweder du packst deine Daten in ein Objekt(-Array) und nutzt dann die Export-CSV oder aber du schreibst deinen Plaintext in die Datei.
Siehe hier: https://docs.microsoft.com/en-us/powershell/module/microsoft.powershell. ...
und hier: https://docs.microsoft.com/en-us/powershell/module/microsoft.powershell. ...
Für einen der beiden Wege musst du dich entscheiden, der Mix klappt nicht.
VG