Ich bekomme seltsames Verhalten von einer Funktion (Invoke-EXOScommand) in einem Modul, das ich geschrieben habe (https://github.com/joxz/PSEXOS). Das Modul wurde entwickelt, um über JSONRPC mit meinen Netzwerk-Switches verbunden zu werden.Objekt Verhalten unterscheidet sich beim Aufruf von Modul
Der Fehler und Arbeitsszenarien sind sowohl im Kern mit der json: https://gist.github.com/joxz/195d6ec6d211f6e00421cf13436411fd
So weit so gut, ich bin eine JSON als Antwort bekommen und wandeln es mit ConvertFrom-Json zu Powershell-Objekte.
{
"id": "10",
"jsonrpc": "2.0",
"result": [
{
"CLIoutput": "Port Link Tx Pkt Tx Byte Rx Pkt Rx Byte Rx Pkt Rx Pkt Tx Pkt
Tx Pkt\n State Count Count Count Count Bcast Mcast Bcast M
cast\n========= ===== =========== =========== =========== =========== =========== =========== =========== ===========\n1
R 0 0 0 0 0 0 0 0\n========
= ===== =========== =========== =========== =========== =========== =========== =========== ===========\n > in
Port indicates Port Display Name truncated past 8 characters\n > in Count indicates value exceeds column width.
Use 'wide' option or '0' to clear.\n Link State: A-Active, R-Ready, NP-Port Not Present, L-Loopback\n"
},
{
"show_ports_stats": {
"dot1dTpPortInDiscards": 0,
"dot1dTpPortInFrames": 0,
"dot1dTpPortMaxInfo": 1500,
"dot1dTpPortOutFrames": 0,
"linkState": 0,
"port": 1,
"portList": 1,
"portNoSnmp": 1,
"rxBcast": 0,
"rxByteCnt": 0,
"rxMcast": 0,
"rxPktCnt": 0,
"txBcast": 0,
"txByteCnt": 0,
"txMcast": 0,
"txPktCnt": 0
},
"status": "SUCCESS"
}
]
}
Wenn ich Kopieren/Einfügen der Funktion in einem Powershell-Fenster funktioniert wie beabsichtigt:
VERBOSE:
TypeName: System.Management.Automation.PSCustomObject
Name MemberType Definition
---- ---------- ----------
Equals Method bool Equals(System.Object obj)
GetHashCode Method int GetHashCode()
GetType Method type GetType()
ToString Method string ToString()
CLIoutput NoteProperty string CLIoutput=Port Link Tx Pkt Tx Byte Rx Pkt Rx Byte Rx
Pk...
Port Link Tx Pkt Tx Byte Rx Pkt Rx Byte Rx Pkt Rx Pkt Tx Pkt Tx Pkt
State Count Count Count Count Bcast Mcast Bcast Mcast
========= ===== =========== =========== =========== =========== =========== =========== =========== ===========
Wenn ich mein Modul installieren und rufen Sie die Funktion, die ich ein Parsing-Fehler erhalten:
VERBOSE:
TypeName: System.Management.Automation.PSCustomObject
Name MemberType Definition
---- ---------- ----------
Equals Method bool Equals(System.Object obj)
GetHashCode Method int GetHashCode()
GetType Method type GetType()
ToString Method string ToString()
CLIoutput NoteProperty System.String CLIoutput=Port Link Tx Pkt Tx Byte Rx Pkt Rx Byte
...
Property 'CLIoutput' cannot be found on this object. Make sure that it exists.
At C:\maintenance\PSEXOS\Functions\Invoke-EXOScommand.ps1:114 char:9
+ $clioutput = $responseobj.result.CLIoutput
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : NotSpecified: (:) [], PropertyNotFoundException
+ FullyQualifiedErrorId : PropertyNotFoundStrict
In beiden Fällen habe ich "CLIoutput" als eine NoteProperty, also warum wird es nicht erkannt, wenn es vom Modul aufgerufen wird? Ist das ein Problem mit dem Umfang? Alle Funktionen sind in der .psm1-Datei mit Punkten versehen.
Auch die 2 anderen Funktionen im Modul (Get-Vlans, Get-VlanPortInfo) in einer smiliar Weise entworfen und Arbeit tun ...
Können Sie Ihren Code in vereinfachter Weise in dieser Frage zu stellen? Also müssen die Leute den Links nicht folgen und wenn andere nach dieser Frage suchen, wird es irgendwann keine Probleme mit toten Links geben. – Hayt
Sicher! Das ganze Projekt mag ein bisschen viel sein, aber diese 2 Beispiele können es abdecken ... – joxz
Hast du an deinem Code herumgebastelt/die Funktion im Modul bearbeitet? Versuchen Sie Caching-Probleme zu beseitigen, indem Sie das Modul entfernen und mit -Force erneut importieren. Ich habe in der Vergangenheit unter diesem Problem gelitten. Sie können bestätigen, dass das importierte Modul tatsächlich die neueste Version Ihrer Funktion ausführt, indem Sie "Get-Command |" ausführen fl 'und es sollte den Inhalt der Funktion auf dem Bildschirm ausgeben. Bemerkenswert für den Fall, dass "Get-Vlans", "Get-VlanPortInfo" funktionieren, enthalten sie nicht die problematische $ CLIoutput. –
Robin