書いたモジュール(https://github.com/joxz/PSEXOS)の関数(Invoke-EXOScommand)から何らかの奇妙な動作が発生しています。このモジュールは、JSONRPC経由で私のネットワークスイッチに接続するように設計されています。モジュールから呼び出されたときのオブジェクトの動作が異なります
エラーや作業のシナリオはJSONとの主旨の両方である:https://gist.github.com/joxz/195d6ec6d211f6e00421cf13436411fd
これまでのところは良い、私はレスポンスとしてJSONを取得し、PowerShellのオブジェクトにConvertFrom-JSONでそれを変換しています。
{
"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"
}
]
}
意図したとおり、私はコピーしていたとき/ PowerShellウィンドウに関数を貼り付け、それは動作します:
私は私のモジュールをインストールし、私はパースエラーを取得する関数を呼び出す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
========= ===== =========== =========== =========== =========== =========== =========== =========== ===========
:
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
どちらの場合も、私は「CLIoutput」をNotePropertyとして持っているので、モジュールから呼び出されたときになぜそれが認識されないのですか?これは範囲の問題ですか?すべての機能は.psm1ファイルにドット区切りされています。また
モジュールで2つのその他の機能は、(取得-VLANのは、Get-VlanPortInfo)をsmiliarように設計し、仕事を...あなたのJSONで
この問題では単純な方法でコードを記述できますか?だから人々はリンクをたどる必要はありませんし、他の人がこの質問を探すときには、ある時点で死んだリンクに関する問題はありません。 – Hayt
プロジェクト全体が多少あるかもしれませんが、その2つの例はそれをカバーしているかもしれません。 – joxz
あなたのコードを編集したり、モジュール内の関数を編集したことはありますか?モジュールを削除して-Forceで再インポートすることで、キャッシュの問題を解消してください。私は過去にこの問題に苦しんできました。 'Get-Command | 'を実行すると、インポートされたモジュールが実際にあなたの関数の最新バージョンを実行していることを確認できます。関数の内容を画面にダンプする必要があります。 'Get-Vlans'、' Get-VlanPortInfo'がうまくいっているのに、問題のある$ CLIoutputが含まれていないことに注意する価値があります。 –
Robin