Top-Themen

AppleEntwicklungHardwareInternetLinuxMicrosoftMultimediaNetzwerkeOff TopicSicherheitSonstige SystemeVirtualisierungWeiterbildungZusammenarbeit

Aktuelle Themen

Administrator.de FeedbackApache ServerAppleAssemblerAudioAusbildungAuslandBackupBasicBatch & ShellBenchmarksBibliotheken & ToolkitsBlogsCloud-DiensteClusterCMSCPU, RAM, MainboardsCSSC und C++DatenbankenDatenschutzDebianDigitiales FernsehenDNSDrucker und ScannerDSL, VDSLE-BooksE-BusinessE-MailEntwicklungErkennung und -AbwehrExchange ServerFestplatten, SSD, RaidFirewallFlatratesGoogle AndroidGrafikGrafikkarten & MonitoreGroupwareHardwareHosting & HousingHTMLHumor (lol)Hyper-VIconsIDE & EditorenInformationsdiensteInstallationInstant MessagingInternetInternet DomäneniOSISDN & AnaloganschlüsseiTunesJavaJavaScriptKiXtartKVMLAN, WAN, WirelessLinuxLinux DesktopLinux NetzwerkLinux ToolsLinux UserverwaltungLizenzierungMac OS XMicrosoftMicrosoft OfficeMikroTik RouterOSMonitoringMultimediaMultimedia & ZubehörNetzwerkeNetzwerkgrundlagenNetzwerkmanagementNetzwerkprotokolleNotebook & ZubehörNovell NetwareOff TopicOpenOffice, LibreOfficeOutlook & MailPapierkorbPascal und DelphiPeripheriegerätePerlPHPPythonRechtliche FragenRedHat, CentOS, FedoraRouter & RoutingSambaSAN, NAS, DASSchriftartenSchulung & TrainingSEOServerServer-HardwareSicherheitSicherheits-ToolsSicherheitsgrundlagenSolarisSonstige SystemeSoziale NetzwerkeSpeicherkartenStudentenjobs & PraktikumSuche ProjektpartnerSuseSwitche und HubsTipps & TricksTK-Netze & GeräteUbuntuUMTS, EDGE & GPRSUtilitiesVB for ApplicationsVerschlüsselung & ZertifikateVideo & StreamingViren und TrojanerVirtualisierungVisual StudioVmwareVoice over IPWebbrowserWebentwicklungWeiterbildungWindows 7Windows 8Windows 10Windows InstallationWindows MobileWindows NetzwerkWindows ServerWindows SystemdateienWindows ToolsWindows UpdateWindows UserverwaltungWindows VistaWindows XPXenserverXMLZusammenarbeit
GELÖST

Batch Skript als Powershell Skript

Frage Entwicklung Batch & Shell

Mitglied: Dpole86

Dpole86 (Level 1) - Jetzt verbinden

27.11.2013, aktualisiert 05.12.2013, 2238 Aufrufe, 23 Kommentare

Hallo Zusammen.

Ich dachte eigentlich das die Shell auch die Batch Commands versteht. Leider ist das aber nicht der Fall

echo "Client","Date","Time">test.csv
FOR /F "tokens=1,2,3,6 delims= " %%a IN ('type C:\win\bat\rsyncd.log^|findstr NBAPS^|findstr /V not^|findstr /V NBAPSV') DO @ECHO "%%d", %%a,"%%b">> C:\win\bat\test.csv

Wäre jemand so nett und könnte mir das auf die schnelle übersetzt? :D

Mitglied: Snowman25
LÖSUNG 27.11.2013, aktualisiert 05.12.2013
01.
write-output '"Client","Date","Time"' | out-file -path .\test.csv -encoding ASCII 
02.
.\create_csv.bat
create_csv.bat:
01.
@Echo off 
02.
SET logfile=test.log 
03.
SET outputfile=test.csv 
04.
SET searchstring=NBAPS 
05.
SET searchexclude=not 
06.
 
07.
FOR /F "tokens=1-6 delims= " %%a IN ('type %logfile%^|findstr %searchstring%^|findstr /V %searchexclude%') DO ( 
08.
	@ECHO Rechner %%f gemeldet am %%a um %%b. %%c 
09.
	@Echo "%%d",%%a;"%%b">>%outputfile% 
10.
)
Bitte warten ..
Mitglied: Dpole86
27.11.2013 um 13:29 Uhr
Hi snowman und danke für deine Antwort

Ich weis passt zwar nicht zum thema, aber kann ich etwas was in der Pipe steht, zurück in eine Variable schreiben?

01.
$csv = Import-CSV "C:\Users\admrd\Desktop\test\bat\test.csv" -Delimiter ","  
02.
$csv | ?{(get-date $_.Date) -gt (get-date).AddDays(-7)} | sort Client,Date,Time -Descending | group Client | %{$_.Group[0]}  
03.
$rsync_result=$csv
Bitte warten ..
Mitglied: colinardo
LÖSUNG 27.11.2013, aktualisiert 05.12.2013
Zitat von Dpole86:
Ich weis passt zwar nicht zum thema, aber kann ich etwas was in der Pipe steht, zurück in eine Variable schreiben?
klar
01.
$rsync_result = $csv | ?{(get-date $_.Date) -gt (get-date).AddDays(-7)} | sort Client,Date,Time -Descending | group Client | %{$_.Group[0]}
und wenn du das ganze dann wieder in eine CSV-Datei zurückschreiben willst machst du es dann so:
01.
$rsync_result | export-csv -Path "C:\Temp\export.csv" -Delimiter "," -NoTypeInformation -Encoding UTF8
aber warum das gedöns mit dem auslesen via Batch in Powershell ?
Schick mir mal nen Auschnitt aus dem Rsync-Log dann bau ich dir das direkt mit Powershell, ohne Umweg über Batch.
Uwe
Bitte warten ..
Mitglied: Dpole86
28.11.2013, aktualisiert um 09:46 Uhr
Hi uwe und guten Morgen

Ok dann schicke ich dir mal ein Teil

Grüße und Danke Roman
Bitte warten ..
Mitglied: colinardo
LÖSUNG 28.11.2013, aktualisiert 05.12.2013
mach sofort die email aus deinem Post weg !!
Bitte warten ..
Mitglied: Dpole86
28.11.2013 um 09:45 Uhr
tut mir leid...war echt keine absicht.
dachte ich habe das Posting noch nicht abgeschickt.
Mist.
Bitte warten ..
Mitglied: colinardo
LÖSUNG 28.11.2013, aktualisiert 05.12.2013
Hier das äquivalente Script zum auslesen des Log-Files:
01.
$logfile = "C:\Temp\rsyncd.log" 
02.
$content = gc $logfile 
03.
$logins = @() 
04.
foreach($line in $content){ 
05.
    if ($line -cmatch "connect from NBAPS[\d]+"){ 
06.
        $arrLine = $line.Split(" ") 
07.
        $logins += New-Object PSObject -Property @{"Client"=$arrLine[5];"Date"=$arrLine[0];"Time"=$arrLine[1]} 
08.
    }      
09.
10.
$rsync_result = $logins | ?{(get-date $_.Date) -gt (get-date).AddDays(-7)} | sort Client,Date,Time -Descending | group Client | %{$_.Group[0]} | select Client,Date,Time
Grüße Uwe
Bitte warten ..
Mitglied: Dpole86
28.11.2013 um 13:17 Uhr
Hi Uwe und Danke für das Script

mal wieder zur verständnis...was bedeuten die[1] etc hinter $arrline?
den rest versteh ich xD

ach und noch eine Frage

$Data += $rsync_result;
$Data += $spwo_result;

ich habe in der Hashtabelle $Data 2 resultate mit unterswchiedlichem content.

wie kriege ich es hin das er mir beide "werte" nebeneinander in einer csv und oder HTML ausgibt?

HTML ausgabe klappt soweit ganz gut allerdings nicht aus einer CSV sondern direkt aus den Daten heraus (aber auch nur jeweils 1 Tabelle)

also es sollte im Nachhinein einfach so aussehen

Auswertung Spiceworks Auswertung Rsync
name updated_on ID Client Date Time

also name, updated_on und ID in den ersten 3 spalten und Client Date und Time in den nächsten 3 Spalten.

Grüße Roman
Bitte warten ..
Mitglied: colinardo
LÖSUNG 28.11.2013, aktualisiert 05.12.2013
Zitat von Dpole86:
mal wieder zur verständnis...was bedeuten die[1] etc hinter $arrline?
$arrline ist ein Array und mit der Nummer sprichst du jeweils die Array-Elemente an.

HTML-Ausgabe nebeneinander:
01.
$rsync_html = $rsync_result | ConvertTo-Html -Fragment 
02.
$spwo_html = $spwo_result | ConvertTo-Html -Fragment 
03.
$html = @" 
04.
    <!DOCTYPE HTML> 
05.
    <html> 
06.
    <head> 
07.
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> 
08.
    <title>Ausgabe</title> 
09.
    </head> 
10.
    <body> 
11.
    <table border="0" width=""><tr><td>$($rsync_html)</td><td>$($spwo_html)</td></tr></table> 
12.
    </body> 
13.
    </html> 
14.
"@ 
15.
$html | Out-File "C:\export.html"
Falls du dich jetzt wieder fragst was das @" "@ schon wieder für eine Schei..e ist . Dies ist ein sogenannter Here-String

Grüße Uwe
Bitte warten ..
Mitglied: Dpole86
29.11.2013 um 10:11 Uhr
Guten Morgen uwe

Mal wieder ein dankeschön

Sag mal... ich habe zwar im netz gesucht aber nichts gefunden...
Wie kann ich die Werte aus der Hashtabelle in einzelne Spalten aufteilen?

Dann kann ich das Schöner in HTML Formatieren.

Grüße Roman
Bitte warten ..
Mitglied: colinardo
LÖSUNG 29.11.2013, aktualisiert 05.12.2013
Hallo Roman,
ich glaube du verwechselst da was. Eine Hashtable ist so etwas:
@{Key="Wert";Key2="Wert2";Key3="Wert3"}
während das hier ein Powershell-Array ist
@("Wert1","Wert2","Wert3") 
#oder anstatt mit Strings kann dies auch Objekte enthalten 
@($hashtable1,$hashtable2,$hashtable3)
Beispiel:
das ist eine Hashtable:
Name        Value 
----        ----- 
Key1        Wert1 
Key2        Wert2
und das hier macht aus der Hashtable ein Object mit Eigenschaften:
01.
$ht = @{Key1="Wert1";Key2="Wert2"} 
02.
New-Object PSObject -Property $ht
das dann so aussieht:
Key1       Key2     
-------    -------  
Wert1      Wert2   
Möchtest du nun mehrere Objekte die die selben Eigenschaften besitzen zusammenfassen machst du das indem du die Hashtable's zu einem Array hinzufügst
01.
$ht1 = @{Key1="Mercedes";Key2="schwarz"} 
02.
$ht2 = @{Key1="VW";Key2="grün"} 
03.
$array = @() 
04.
$array += New-Object PSObject -Property $ht1 
05.
$array += New-Object PSObject -Property $ht2 
06.
$array
wenn du dann das Array ausgibst sind alle Hashtable's zusammengefasst:
Key2       Key1     
----       ----     
schwarz    Mercedes 
grün       VW     
leider werden die Spalten dabei immer verkehrt herum angeordnet, das kannst du aber mit einem select wieder beheben:
$array | select Key1,Key2
Siehe dazu auch :http://blogs.msdn.com/b/powershell/archive/2009/12/05/new-object-psobje ...

Hoffe das war soweit klar ...

Grüße Uwe

p.s. suche bei deinen Recherchen nach Powershell mit Englisch, das bringt wesentlich mehr Treffer!
Bitte warten ..
Mitglied: Dpole86
29.11.2013, aktualisiert um 11:57 Uhr
Hi Uwe .. Ja das war mir verständlich allerdings bekomme ich aus dem Link von dir keine genaueren Informationen. Der code der dort abgebildet ist, ist irgendwie unverständlich für mich.

Dabei hast du das schon mal gemacht odeR?
und zwar mit diesem code.

Zitat von colinardo:

Hier das äquivalente Script zum auslesen des Log-Files:

$logfile = "C:\Temp\rsyncd.log"
$content = gc $logfile

Hier deklarierst du eine Hashtabelle odeR?

$logins = @()

also dachte ich mir das ich den unten stehen code einfach kopieren kann?

foreach($line in $content){
if ($line -cmatch "connect from NBAPS[\d]+"){
$arrLine = $line.Split(" ")
$logins += New-Object PSObject -Property

Und hier dann @{"Client"=$arrLine[5];"Date"=$arrLine[0];"Time"=$arrLine[1]} mach
zusammen mit @{"Client"=$arrLine[2];"updated_on"=$arrLine[3];"ID"=$arrLine[4]}

also Ich gehe davon aus, das du mit dem $arrline[2] die spalte "client" speicherst. ?
@{"Client"=$arrLine[5];"Date"=$arrLine[0];"Time"=$arrLine[1]}
}
}


Dementsprechend habe ich mir den Code dann so vorgestellt

01.
  
02.
 foreach($line in $rsync_result){     # ist ja eine Hashtable? 
03.
 $arrLine = $line.Split(" ") 
04.
 $rsync_result += New-Object PSObject -Property 
05.
@{"Client"=$arrLine[5];"Date"=$arrLine[0];"Time"=$arrLine[1]}


damit hätte ich dann die spalten Client Date und Time oder nicht?

und das dann in HTML:

01.
  
02.
$rsync1_html = $arrline[2] | ConvertTo-Html -Fragment 
03.
 
04.
 
05.
$html = @" 
06.
    <!DOCTYPE HTML> 
07.
    <html> 
08.
    <head> 
09.
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> 
10.
<link rel="stylesheet" href="Scripts/menu_style.css" type="text/css" /> 
11.
<script type="text/javascript" src="Scripts/jsFlashVer.js"></script> 
12.
<title> Auswertung </title> 
13.
</head> 
14.
 
15.
    <body> 
16.
    <table width="1000" height="260" border="0" align="center"> 
17.
    <tr> 
18.
    <td> 
19.
    <div align="left"> 
20.
    <div align="left"><img src ="C:\Users\admrd\Desktop\test\bat\Logo\apsolut_Firmenlogo_Farbe.jpg"></div> 
21.
    </td> 
22.
    </tr> 
23.
    </table> 
24.
    <table border="1" border-width: 1px;border-style: solid;border-color: orange;border-collapse: collapse;> 
25.
    <tr><td>$($rsync1_html)</td></tr></table> 
26.
    </html> 
27.
"@ 
28.
$html | Out-File $Filename 
29.
 
Ich habe es nicht getestet nur ist das so meine Vorstellung.

Grüße Roman
Bitte warten ..
Mitglied: Dpole86
04.12.2013 um 09:33 Uhr
Zitat von colinardo:

Hier das äquivalente Script zum auslesen des Log-Files:
01.
> $logfile = "C:\Temp\rsyncd.log" 
02.
> $content = gc $logfile 
03.
> $logins = @() 
04.
> foreach($line in $content){ 
05.
>     if ($line -cmatch "connect from NBAPS[\d]+"){ 
06.
>         $arrLine = $line.Split(" ") 
07.
>         $logins += New-Object PSObject -Property 
08.
> @{"Client"=$arrLine[5];"Date"=$arrLine[0];"Time"=$arrLine[1]} 
09.
>     }      
10.
> } 
11.
> $rsync_result = $logins | ?{(get-date $_.Date) -gt (get-date).AddDays(-7)} | sort Client,Date,Time -Descending | group Client | 
12.
> %{$_.Group[0]} | select Client,Date,Time 
13.
> 
Grüße Uwe


Hi Uwe

Ich habe dein Skript so wie es ist genommen und bei mir mit einer kleinen änderung getestet:
allerdings bekomme ich eine Endlosschleife des Prozesses?

mein Code lautet:

01.
$logfile = "C:\Users\admrd\Desktop\test\bat\rsyncd.log" 
02.
$content = gc $logfile 
03.
foreach($line in $content){ 
04.
    if ($line -cmatch "connect from NBAPS[\d]+"){ 
05.
        $arrLine = $line.Split(" ") 
06.
        $logins += New-Object PSObject -Property @{"Name"=$arrLine[5];"Date"=$arrLine[0];"Time"=$arrLine[1]} 
07.
    }      
08.
09.
$Data_rsync | ?{(get-date $_.Date) -gt (get-date).AddDays(-7)} | sort Name,Date,Time -Descending | group Name | %{$_.Group[0]} | select Name,Date,Time
Hast du ne idee wo derFehler liegt?

Grüße und Danke
Roman
Bitte warten ..
Mitglied: colinardo
LÖSUNG 04.12.2013, aktualisiert 05.12.2013
Dein Logfile ist ziemlich groß, über 100MB da kann das schon so einige Zeit dauern. Ich würde mal über ein Splitting des Logfiles nachdenken !!
Grüße Uwe
Bitte warten ..
Mitglied: Dpole86
04.12.2013 um 09:49 Uhr
Zitat von colinardo:

Dein Logfile ist ziemlich groß, über 100MB da kann das schon so einige Zeit dauern. Ich würde mal über ein
Splitting des Logfiles nachdenken !!
Grüße Uwe

Hi Uwe

Das Logfile ist 60 MB Groß

Das Programm allerdings hängt sich mit einer Auslastung von 2,3 GB auf oO
Bitte warten ..
Mitglied: colinardo
LÖSUNG 04.12.2013, aktualisiert 05.12.2013
wie gesagt,
Ich würde mal über ein Splitting des Logfiles nachdenken !!
Bitte warten ..
Mitglied: Dpole86
05.12.2013 um 13:29 Uhr
Hi Uwe


du hattest recht es lag wirklich am Logfile.

Allerdings habe ich nun eine neue Frage.

Ich bekomme nicht mehr die einträge der Letzten 7 Tage sondern alle Einträge die Existieren.

01.
$logins | ?{(get-date $_.Date) -gt (get-date).AddDays(-7)} | sort Client,Date,Time -Descending | group Client | %{$_.Group[0]} | select Client,Date,Time
Wenn ich die Daten aus $logins in $Rsync_result reinportiere ist $Data_rsync Leer oO

01.
$rsync_result = $logins | ?{(get-date $_.Date) -gt (get-date).AddDays(-7)} | sort Client,Date,Time -Descending | group Client | %{$_.Group[0]} | select Client,Date,Time
GesamtCode
01.
 
02.
# Lese das Log ein, suche nach NBAPS und erstelle ein neues Objekt in $Data_rsync 
03.
 $logfile = "C:\Users\admrd\Desktop\test\bat\rsyncd.log" 
04.
 $content = gc $logfile 
05.
 $logins = @(); 
06.
 foreach($line in $content){ 
07.
     if ($line -cmatch "connect from NBAPS[\d]+"){ 
08.
         $arrLine = $line.Split(" ") 
09.
         $logins += New-Object PSObject -Property @{"Name"=$arrLine[5];"Date"=$arrLine[0];"Time"=$arrLine[1]} 
10.
     }      
11.
12.
$Data_rsync = $logins | ?{(get-date $_.Date) -gt (get-date).AddDays(-7)} | sort Name,Date,Time -Descending | group Name | %{$_.Group[0]} | select Name,Date,Time

Danke schonmal im Vorraus
Bitte warten ..
Mitglied: colinardo
LÖSUNG 05.12.2013, aktualisiert um 14:30 Uhr
bei mir geht's einwandfrei ...
Bitte warten ..
Mitglied: Dpole86
05.12.2013 um 14:32 Uhr
Und was geht bei dir Einwandfrei?

Ich benutze den Powershell ISE (nur als Info)

Ich bekomme zwar die einträge... Das ist auch nicht das Thema
ich bekomme nur nich die Einträge der letzten X-Tage

danke für deine Hilfe...
Bitte warten ..
Mitglied: colinardo
LÖSUNG 05.12.2013, aktualisiert um 14:44 Uhr
Zitat von Dpole86:

Und was geht bei dir Einwandfrei?
Dein "GesamtCode" in Kombination mit einem Auschnitt deiner originalen Log-Datei
Ich benutze den Powershell ISE (nur als Info)
dito PSVersion 3.0
Bitte warten ..
Mitglied: Dpole86
05.12.2013 um 14:44 Uhr
Hi Sorry mein Fehler

der Letzte Eintrag im Log ist vom 26.10.2013

wenn ich nun 05.12.2013 -7 tage mach komm ich auf den 28\29

da es in dem Fall keine Daten gibt ist auch die Variable Leer.

Danke
Bitte warten ..
Mitglied: Dpole86
06.12.2013 um 14:23 Uhr
Hi Uwe

Ich habe mal wieder ein seltenes Problem -.-

bei dem code

01.
  
02.
 $logfile = "C:\Users\admrd\Desktop\test\bat\rsyncd.log" 
03.
 $content = gc $logfile 
04.
 $logins = @(); 
05.
 foreach($line in $content){ 
06.
     if ($line -cmatch "connect from NBAPS[\d]+"){ 
07.
         $arrLine = $line.Split(" ") 
08.
         $logins += New-Object PSObject -Property @{"Name"=$arrLine[5];"Date"=$arrLine[0];"Time"=$arrLine[1]} 
09.
     }      
10.
11.
 
12.
$logins | ?{(get-date $_.Date) -gt (get-date).AddDays(-21)} | sort Name,Date,Time -Descending | group Name | %{$_.Group[0]} | select Name,Date,Time 
13.
 
14.
$Data_rsync = $logins 
Wenn ich die Variable $logins pipe, bekomme ich das Ergebniss.

Allerdings ist das Ergebniss nicht von dauer
den sobald ich nur die Variable ausgebe, bekomme ich die gesamte liste...

auch ein
01.
$rsync_data = $logins | ?{(get-date $_.Date) -gt (get-date).AddDays(-21)} | sort Name,Date,Time -Descending | group Name | %{$_.Group[0]} | select Name,Date,Time
bringt nicht das ergebniss aus der Pipe.

wo ist der Fehler?
Bitte warten ..
Mitglied: colinardo
LÖSUNG 06.12.2013, aktualisiert 09.12.2013
Ich habe mal wieder ein seltenes Problem -.-
nee, das Problem ist das du dir die Doku nicht reinziehst ...

Das hier ist ja auch Quatsch und kann nicht funktionieren... du weißt ja keiner Variablen das Ergebnis zu sondern gibst es nur auf der Konsole aus.
Zitat von Dpole86:
$logins | ?{(get-date $_.Date) -gt (get-date).AddDays(-21)} | sort Name,Date,Time -Descending | group Name | %{$_.Group[0]} |
select Name,Date,Time

$Data_rsync = $logins
</code>

Dein zweiter Teil hier ist korrekt, das Ergebnis wird in $rsync_data gespeichert, wird aber nicht in der Console ausgegeben !
01.
$rsync_data = $logins | ?{(get-date $_.Date) -gt (get-date).AddDays(-21)} | sort Name,Date,Time -Descending | group Name | %{$_.Group[0]} | select Name,Date,Time
dazu musst du die Variable explizit auf der Konsole mit
$rsync_data
ausgeben ... dann werden die Daten auch auf dem Bildschirm erscheinen

Grüße Uwe
Bitte warten ..
Neuester Wissensbeitrag
Windows 10

Powershell 5 BSOD

(1)

Tipp von agowa338 zum Thema Windows 10 ...

Ähnliche Inhalte
Windows 7
gelöst Batch-Skript oder VBS Skript zum Sichern von Office Vorlagen (2)

Frage von Ceejaay zum Thema Windows 7 ...

Entwicklung
gelöst Mit Batch,VBS,Powershell Windows einrichten (1)

Frage von Justin98 zum Thema Entwicklung ...

Batch & Shell
gelöst Batch-Skript für Druckerzuweisung auf Terminalserver - Variablenproblem (3)

Frage von BirdyB zum Thema Batch & Shell ...

Heiß diskutierte Inhalte
LAN, WAN, Wireless
gelöst Server erkennt Client nicht wenn er ausserhalb des DHCP Pools liegt (28)

Frage von Mar-west zum Thema LAN, WAN, Wireless ...

Outlook & Mail
Outlook 2010 findet ost datei nicht (18)

Frage von Floh21 zum Thema Outlook & Mail ...

Windows Server
Server 2008R2 startet nicht mehr (Bad Patch 0xa) (18)

Frage von Haures zum Thema Windows Server ...