#Jako prametr będzie przekazywany identyfikator wiadomości. param ( $MsgID ) #Tworzymy .netowe gniazdko. Serwer jest wpisany na sztywno ale też oczywiście można go przekazać jako parametr albo np. brać z pliku $sock = new-object System.Net.Sockets.TcpClient("news.rivnet", 119) #Kojarzymy z nim strumień $stream = $sock.GetStream() #Zakładamy, że posty będą w ISO-8859-2 i tak będziemy dekodować $kodowanie = [System.Text.Encoding]::GetEncoding("iso-8859-2") #Tworzymy obiekty do odczytywania strumienia i zapisywania $reader = new-object System.IO.StreamReader($stream, $kodowanie) $writer = new-object System.IO.StreamWriter($stream) #ReadLine() czeka na nawiązanie połączenia i na koniec linii wysyłanej przez serwer. Tę linię olewamy bo to tylko baner serwera. $line = $reader.ReadLine() #Wysyłamy zapytanie o dany post. $writer.WriteLine("ARTICLE " + $MsgID) #Flush zapewnia natychmiastowe wysłanie zapytania. $writer.Flush() #Ustawiamy zmienne używane potem przy kolorowaniu. $body = $false $sig = $false #Czytamy linie dopóki nie natrafimy na linię zawierającą tylko kropkę, oznacza ona koniec posta. while ($line -ne ".") { #Pobieramy kolejną linię $line = $reader.ReadLine() #Pierwsza pusta linia oznacza początek treści wiadomości. W tym prostym skrypcie nie zajmujemy się nagłówkami. if ($line -eq "") { $body=$true} #Wykrywamy początek sygnaturki if ($line -eq "-- ") { $sig=$true} #Wyświetlamy linie oprócz linii oznaczającej koniec posta. if ($line -ne ".") { #Jeśli sygnaturka to wyświetlamy ją na żółto. if ($sig) { write-host -ForeGroundColor Yellow $line} else { if ($body) { #Jeśli linia ma conajmniej jeden znak, sprawdzamy czy jest cytatem. if ($line.length -gt 1) { if ($line.SubString(0,1) -eq ">") { #W przypadku cytatu wyświetlamy go na niebiesko. write-host -ForeGroundColor Blue $line } else { #Wyświetlenie zwykłego tekstu. write-host $line } } else { #Puste linie też wyświetlamy. write-host } } } } } #Zamykamy połączenie. $sock.close()