Top-Themen

Aktuelle Themen (A bis Z)

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 PowerShell String zerlegen in Array, DataTable, Hashtable speichern

Mitglied: derhoeppi

derhoeppi (Level 2) - Jetzt verbinden

12.07.2016 um 10:18 Uhr, 980 Aufrufe, 7 Kommentare

Guten Morgen,

leider habe wieder ein Thema beim zerlegen eines Strings. Folgendes Problem:

Die Rückgabe eines Admintools liefert mir einen sehr langen String. In der Dokumentation steht, dass die Ausgabe per Komma getrennt ist und 54 Spalten umfasst. Die Ausgabe kann leider nicht modifiziert werden. Um diese Daten zu verarbeiten habe ich nun eine DataTable gebildet, die diese Daten nach einem Split entgegennimmt. Mein Problem ist nun die weitere Verarbeitung der Daten.
Wenn ich Daten aus der DataTable in ein neues Array schreibe (ist aus meiner Sicht nicht einmal notwendig), dann schreibt er mir die Daten als System.Data.DataRow ins Array. Damit kann ich aber wiederum nicht filtern und vergleichen.

01.
$dt = New-Object System.Data.DataTable
02.
$dt.Columns.Add('jobid') | Out-Null
03.
$dt.Columns.Add('jobtype') | Out-Null
04.
$dt.Columns.Add('state') | Out-Null
05.
...
06.
$dt.Columns.Add('status') | Out-Null
07.
$dt.Columns.Add('backupid') | Out-Null
08.
$dt.Columns.Add('killable') | Out-Null
09.
$dt.Columns.Add('controllinghost') | Out-Null
10.

11.

12.
$Output = @()
13.
$Output = bpdbjobs -report -most_columns
14.
$Array_Jobs = @()
15.
for ($i=0;$i -lt $Output.Count;$i++){
16.
    $cols = $Output[$i].Trim() -split "," 
17.
    $dt.Rows.Add($cols[0], $cols[1], $cols[2], $cols[3], $cols[4], $cols[5], $cols[6], $cols[7], $cols[8], $cols[9], $cols[10], $cols[11], $cols[12], $cols[13], $cols[14], $cols[15], $cols[16], $cols[17], $cols[18], $cols[19], $cols[20], $cols[21], $cols[22], $cols[23], $cols[24], $cols[25], $cols[26], $cols[27], $cols[28], $cols[29], $cols[30], $cols[31], $cols[32], $cols[33], $cols[34], $cols[35], $cols[36], $cols[37], $cols[38], $cols[39], $cols[40], $cols[41], $cols[42], $cols[43], $cols[44], $cols[45], $cols[46], $cols[47], $cols[48], $cols[49], $cols[50], $cols[51], $cols[52], $cols[53]) | Out-Null
18.
	} 
19.
[array]$Failed_Jobs = @()
20.
$Failed_Jobs = $dt | ?{$_.status -ne 0} | Select -expand jobid, status, client
21.
Write-Host $Failed_Jobs.count
22.
Write-Host
23.
Write-Host $Failed_Jobs
Mein Ziel ist die Daten in der DataTable via $dt.jobid anzusprechen und diese zu sortieren. Bis jetzt muss ich aber in der DataTable die Zeile mitgeben $dt.jobid[1].
Wo liegt mein Fehler?
Mitglied: 129813
12.07.2016, aktualisiert um 10:46 Uhr
You need to give a single array to the add function, not 53 single parameters!
So
01.
$dt.Rows.Add($cols)
is enough instead of line 17

Regards
Bitte warten ..
Mitglied: 129813
12.07.2016, aktualisiert um 10:45 Uhr
p.s. You don't need a datatable all the time.

You can create custom objects in powershell very easily:
01.
$arrayOfObjects = @()
02.
$arrayOfObjects += [pscustomobject] @{Column1 = "Data1";Column2 = "Data2";ColumnN = "DataN"}
03.
$arrayOfObjects
and with Add-Member you can add properties (columns) to the object afterwards if you need more.
Bitte warten ..
Mitglied: derhoeppi
12.07.2016 um 12:57 Uhr
Hi,


Zitat von 129813:

$dt.Rows.Add($cols)

Powershell returns that are more than one columns are defined - so it is not possible to add this row.




Zitat von 129813:

01.
> $arrayOfObjects = @()
02.
> $arrayOfObjects += [pscustomobject] @{Column1 = "Data1";Column2 = "Data2";ColumnN = "DataN"}
03.
> $arrayOfObjects
04.
> 

This was my first try. The result if i try to access a value like them $arrayOfObjects i got a message that it is a hashtable.
Bitte warten ..
Mitglied: 129813
12.07.2016, aktualisiert um 13:16 Uhr
Zitat von derhoeppi:
Powershell returns that are more than one columns are defined - so it is not possible to add this row.
?? Sure, works as designed, if the number of columns equals your array count...!

This was my first try. The result if i try to access a value like them $arrayOfObjects i got a message that it is a hashtable.
?? No, the above is an array of objects!!!
Bitte warten ..
Mitglied: derhoeppi
12.07.2016, aktualisiert 13.07.2016
Zitat von 129813:

Zitat von derhoeppi:
Powershell returns that are more than one columns are defined - so it is not possible to add this row.
?? Sure, works as designed ...!
Thats the error message: "Exception calling "Add" with "1" argument(s): "Input array is longer than the number of columns in this table.""


Zitat von 129813:

This was my first try. The result if i try to access a value like them $arrayOfObjects i got a message that it is a hashtable.
?? No, the above is an array of objects!!!
Okay but that's the retun value: "System.Collections.Hashtable"

Thats the actual code:

01.
foreach($i in $Output){
02.
	$cols = $i -split "," 
03.
	$report += [pscustomobject] @{"jobid"=$cols[0];"jobtype"=$cols[1];"state"=$cols[2];"status"=$cols[3];"class"=$cols[4];"schedule"=$cols[
04.
}
$report.jobid is emtpy
$report[1] is empty
and $report is a hashtable.
Bitte warten ..
Mitglied: 129813
LÖSUNG 12.07.2016, aktualisiert um 13:41 Uhr
Zitat von derhoeppi:
Thats the error message: "Exception calling "Add" with "1" argument(s): "Input array is longer than the number of columns in this table.""
That's what i said, the array has to be the same length as the count of columns ...so that's normal and is a must.

Okay but that's the retun value: "System.Collections.Hashtable"
No .... you have to query the column (property) you want to access!
01.
$report.jobid
You should definitely read more about custom objects ....
Working With Custom Objects

Powershell is an object oriented scripting language ...

$report must be an object array of kind
System.Management.Automation.PSCustomObject

This shortcut works starting on PS 3.0.

On PS 2.0 you have to use this form
$report += new-Object PSObject -Property @{.............}
Bitte warten ..
Mitglied: derhoeppi
13.07.2016 um 07:15 Uhr
Sorry but i want to try this one, because it's new for me (instead of $report += new-Object PSObject -Property @{.............}).


Zitat von 129813:

p.s. You don't need a datatable all the time.

You can create custom objects in powershell very easily:
01.
> $arrayOfObjects = @()
02.
> $arrayOfObjects += [pscustomobject] @{Column1 = "Data1";Column2 = "Data2";ColumnN = "DataN"}
03.
> $arrayOfObjects
04.
> 
and with Add-Member you can add properties (columns) to the object afterwards if you need more.

I forgot that the script is not running on my normal scripting Workstation, so i read out the psversiontable. At the host where i'm running the script is only PS Version 2.0 installed.
This one "$report += new-Object PSObject -Property @{.............}" was my first try before i wrote this thread. But the content of $Report was not readable for me so i went to find another solution. Now it's working!
Bitte warten ..
Ähnliche Inhalte
Batch & Shell
PowerShell Array Replace()
gelöst Frage von derhoeppiBatch & Shell2 Kommentare

Hallo, ich habe ein Array, dass derzeit Daten aus einer CSV Datei importiert. Der Aufbau der CSV sieht so ...

Batch & Shell
Powershell matching string
gelöst Frage von noname69Batch & Shell7 Kommentare

Moin Entwickler, bin derzeit dabei, zwei txt Dateien zu analysieren. Die eine ist (namentlich) zeitlich gesehen der Vorgänger und ...

Datenbanken
MongoDB Update String to Array
Frage von Phreak87Datenbanken

Hallo, ich möchte in einer MongoDB via VB.Net mittels Query/Update ein Update auf ein Feld machen. Problem ist dass ...

Batch & Shell
Powershell String formatieren
gelöst Frage von derhoeppiBatch & Shell1 Kommentar

Hallo, ich habe ein Skript das einen Netzwerkswitch ausliest. Das hat bis dato auch funktioniert, aber mit einem Firmwareupdate ...

Neue Wissensbeiträge
Windows Server

Active Directory ESE Version Store Changes in Server 2019

Information von Dani vor 2 TagenWindows Server

Moin, Last month at Microsoft Ignite, many exciting new features rolling out in Server 2019 were talked about. But ...

Exchange Server

Microsoft Extending End of Support for Exchange Server 2010

Information von Dani vor 2 TagenExchange Server3 Kommentare

Moin, After investigating and analyzing the deployment state of an extensive number of Exchange customers we have decided to ...

Schulung & Training

Humble Book Bundle: Network and Security Certification 2.0

Tipp von NetzwerkDude vor 3 TagenSchulung & Training

Abend, bei HumbleBundle gibts mal wider ein schönes Paket e-books: sind verschiedene Zertifizierungen wie MCSA, CCNA, CompTIA etc., für ...

Voice over IP

Telekom Umstellung von ISDN Anlagenanschluss auf IP-Telefonie

Erfahrungsbericht von NixVerstehen vor 6 TagenVoice over IP10 Kommentare

Hallo zusammen, nachdem nun vor ein paar Tagen die zwangsweise Umstellung von ISDN auf IP-Telefonie problemlos über die Bühne ...

Heiß diskutierte Inhalte
VB for Applications
Euro-Zeichen in jedem neu erstellten Brief mit Word automatisch entfernen
gelöst Frage von imebroVB for Applications23 Kommentare

Hallo, ich habe ein Problem mit Word, bzw. mit dem €-Zeichen, welches bei Erstellung eines Word-Briefes automatisch eingesetzt wird. ...

Batch & Shell
Regedit eintrad ändern als Admin
Frage von cyberworm83Batch & Shell19 Kommentare

Hallo zusammen, ich bin derzeit als Rollout Techniker unterwegs und muss täglich bei zig Rechnern einen Registry Einträg ändern ...

Visual Studio
Prüfen, ob Programm schon disposed wurde
Frage von MarcoBornVisual Studio17 Kommentare

Hallo Forum, ich habe in VB.NET ein Programm geschrieben, welches Word startet und dort Daten ausliest. Obwohl ich die ...

LAN, WAN, Wireless
Gebäude mit LWL-Anschlüssen ausstatten - VorNachteile?
Frage von staybbLAN, WAN, Wireless17 Kommentare

Hallo zusammen, es gibt ja mittlerweile viele Firmen die nicht nur ihre Backbones mit FibreChannel anbinden sondern auch direkt ...