dpole86
Goto Top

String einer Variable in ein Tabellenformat Wandeln Powershell

Guten Morgen zusammen

Ich habe folgende Variable mit folgendem Inhalt

$Rsync_Name
Inhalt:
NBAPS99NBAPS96NBAPS94NBAPS87NBAPS86NBAPS85NBAPS84NBAPS83NBAPS77NBAPS76NBAPS71NBAPS69NBAPS57NBAPS53NBAPS50NBAPS49NBAPS47NBAPS44NBAPS201NBAPS200NBAPS199NBAPS198NBAPS185NBAPS183NBAPS182NBAPS181NBAPS179NBAPS1
78NBAPS173NBAPS170NBAPS169NBAPS166NBAPS165NBAPS164NBAPS163NBAPS158NBAPS157NBAPS156NBAPS151NBAPS147NBAPS146NBAPS145NBAPS144NBAPS143NBAPS141NBAPS140NBAPS139NBAPS138NBAPS137NBAPS136NBAPS135NBAPS134NBAPS133NB
APS131NBAPS130NBAPS128NBAPS123NBAPS122NBAPS121NBAPS118NBAPS115NBAPS114NBAPS112NBAPS110NBAPS109NBAPS106
Gibt es eine Möglichkeit das mir die Ausgabe untereinander angezeigt wird?

Über $Rsync_name | format-table geht es nicht.

Grüße und Danke

Roman

Content-ID: 223876

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

Ausgedruckt am: 25.11.2024 um 03:11 Uhr

colinardo
colinardo 06.12.2013 aktualisiert um 09:43:28 Uhr
Goto Top
Hallo Roman,
wenn der Inhalt deiner Variablen einzelne Objekte sind:
$Rsync_name | format-list
so wie du den Inhalt hier gepostet hast muss da aber noch ein Split zum trennen der Namen rein oder hast du hier Mist gepostet ?
Wenn der Inhalt tatsächlich als String so aussieht ist dir aber beim extrahieren im vorherigen Schritt ein gewaltiger Fehler unterlaufen ...

Grüße Uwe
Dpole86
Dpole86 06.12.2013 um 09:59:23 Uhr
Goto Top
Guten Morgen Uwe face-smile

Wie immer danke für deine Antwort.

Mein code bis dahin lautet:

Remove-PSDrive spwodb
$Date = Get-Date -Format "yyMMdd";  
$Startzeit = Get-Date -Format "HHmmss";  
$Mailsubject = "Auswertung RoadWarriors " + $Date;  
$Filename = "aps_export_devices_" + $Date + ".html";  
$Filename_csv = "aps_export_devices_" + $Date + ".csv";  
#$Folder_rsync = "\\apsv254\c$\Program Files (x86)\ICW\"; 
$Data_spwo = @();
$Data_rsync=@();
$Data_rsync_compared=@();
$Data_spwo_compared=@();

#Rsync Anfang 

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

#Vergleiche die beiden Variablen und gebe die unterschiede aus. 

#$Data_rsync = $logins | ?{(get-date $_.Date) -gt (get-date).AddDays(-21)} | sort Name,Date,Time -Descending | group Name | %{$_.Group} | select Name,Date,Time

$Data_rsync_compared = Compare-Object -ReferenceObject $Data_rsync -DifferenceObject $Output -Property Name -PassThru | ?{$_.Sideindicator -eq "=>"}| select Name  


# Teile die Daten aus $Data_Rsync in einzelne Spalten auf.
$Rsync_Clients = @();
$Rsync_Zeit = @();
$Rsync_Datum = @();

foreach($row in $Data_rsync)
{
   $Rsync_Name += $row.Name;
   $Rsync_Zeit += $row.Time;
   $Rsync_Datum += $row.Date;

}

Wenn ich eine Split anweisung mache, also $rsync_name.split('/N') wird aber das 'N' abgeschnitten.
Ich bekomme dann zwar auch eine tabelle nur ohne 'N'

ich müsste von N bis zum nächsten N splitten

ich muss allerdings zugeben ich habe keine ahnung wie ich das anstelle.

Im Grunde kann ich doch das Split nehmen, hochzählen bis zum nächsten N und da abschneiden.
oder ist mein ansatz falsch?
colinardo
colinardo 06.12.2013 aktualisiert um 10:10:43 Uhr
Goto Top
Dein Ansatz ist nicht gut, ich sehe hier z.B. nicht wo die Variable $output erzeugt wird, da liegt wahrscheinlich der "Hammer" begraben ...
Wenn ich eine Split anweisung mache, also $rsync_name.split('/N') wird aber das 'N' abgeschnitten.
das ist klar das das nicht geht, aber bei deiner extrahierung der Namen ist komplett was schief gelaufen. Wenn das ein Unix-String mit für Windows unsichtbaren Zeilenumbrüchen ist, lassen sich die Namen via $Rsync_name.Split("`n") in ein Array wandeln.
Wann ziehst du dir endlich die Powershell-Doku-Seiten rein die ich dir geschickt habe ?
Dpole86
Dpole86 06.12.2013 um 10:17:58 Uhr
Goto Top
Habe es mit einem Kollegen durch folgenden Code gelöst face-smile

$string = $Rsync_Name
$chars = $string.ToCharArray()
[int]$i = -1
$computers = @()

foreach ($c in $chars){

  if(($c -eq 'N') -or ($c -eq 'n')){  
    $i++
    $computers += $c
  }else{
    $computers[$i] += $c
  }
}
colinardo
colinardo 06.12.2013 um 10:21:00 Uhr
Goto Top
naja wenn mans direkt richtig extrahiert hätte, wäre das nicht nötig gewesen ...