Quantcast
Channel: Windows PowerShell Forum
Viewing all articles
Browse latest Browse all 2314

Object-Array 'Object[]' richtig verwenden

$
0
0
Hallo Forum!

ich habe ein Problem bei der Speicherung von Objekten vom Typ System.IO.Ports.SerialPort in einem Object-Array, wenn ich diesen mit 'Add-Member' Properties hinzufüget habe. Ich zeige hier mal was ich meine:

Function OpenComPorts-ForGrblConnection {
param (
    [ValidateSet(300, 600, 1200, 1800, 2400, 4800, 7200, 9600, 14400, 19200, 38400, 57600, 115200, 230400, 460800, 921600)] [Int] $Baudrate = 115200,
    [ValidateSet(7, 8)] [Int] $DataBits = 8,
    [ValidateSet('Even', 'Mark', 'None', 'Odd', 'Space')] [String] $Parity   = 'None',
    [ValidateSet('None', 'One', 'OnePointFive', 'Two')]   [String] $StopBits = 'One'
)
    $PortNames = [System.IO.Ports.SerialPort]::GetPortNames()
    $A = New-Object 'Object[]' $PortNames.Count
    For ($i=0; $i -le $PortNames.Count - 1; $i++) {
        $c = New-Object -TypeName System.IO.Ports.SerialPort $Port,$Baudrate,$Parity,$Databits,$StopBits
        #$A[$i] = $c
        $c.PortName = $PortNames[$i]
        $c.Open()
        If ($c.IsOpen) {
            $c.WriteLine('$I')
            $Response = $c.ReadExisting()
            $Response = $Response -split "\r\n"
            If ($Response[1] -eq "ok") {
                Add-Member -InputObject $c -MemberType NoteProperty -Name "GrblOk" -Value $true #-TypeName Bool
                If ($Response[0] -match "\d{8}") {
                    $BuildDate = [System.DateTime]::ParseExact($Matches[0],"yyyyMMdd", $null)
                    Add-Member -InputObject $c -MemberType NoteProperty -Name "BuildDate" -Value $BuildDate #-TypeName DateTime
                    If ($Response[0] -match "\d{1}\.\d{1}[a-z]{1}") {
                        Add-Member -InputObject $c -MemberType NoteProperty -Name "BuildVersion" -Value ($Matches[0]) #-TypeName String
                        $A[$i] = $c
                    }
                }
            } else {
                $c.Close()
            }
        }
    }
    Return $A
}

Okay - der Code lässt sich nur sinnvoll mit entsprechender Hardware am Comport betreiben, aber das Prinzip sollte klar sein. Es werden nacheinander alle Comports geöffnet und bei der Kommunikation bestimmte Antworten erwartet. Add-Member fügt entsprechend NoteProperties zu den Serial-Objekten hinzu. Die Objektereferenz befinden sich zu dem Zeitpunkt noch nicht im Array, aber wenn ich die Zuweisung '$A[$i] = $c' mache gerät alles durcheinander.

Vermutlich mache ich mit dem Array etwas Grundsätzliches falsch. Hat jemand die Checkung :-)



Michael L.


Viewing all articles
Browse latest Browse all 2314


<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>