問題タブ [pscustomobject]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
arrays - 配列/カスタム オブジェクト
TL;DR: 理想的にはこのように見える、条件に基づいたヘッダーを持つ配列を構築しようとしています。
私はそれをさまざまな方法で試してきましたが、ここに私の最近の2つの試みがあります:
これにより、すべての行の最後の行が出力されます (ステートメント$array += $list
内にあるため)。if..else
ただし、外側にあるif..else
場合は null 値になります。に を追加し$list
ても$array
うまくいかないようです (何か間違ったことをしています)。
次の試行では文字列を使用して値を格納しますが、文字列にヘッダーを配置できず、結果として書式設定が存在しません。利点は、少なくとも期待する値が表示されるため、条件が機能することがわかります。
私が間違っている場所について何か考えはありますか?
powershell - ExpandProperty - パイプラインにないオブジェクト
次のようなパイプラインにいくつかのオブジェクトがあります。
結果:
小道具を展開し、展開されたすべてのプロパティをオブジェクト名と一緒にリストする必要があります。これ以上簡単なことはありません:
結果:
ここまでは順調ですね。問題は、パイプライン内の一部のオブジェクトに props がない場合に始まります。
結果:
今、私はそのコマンドを期待します:
次のような結果が返されます (obj2 の追加の props はありませんが、「デフォルト」プロパティ objname でまだパイプラインにあります):
代わりに obj2 がありません:
展開するものが何もない場合、ExpandProperty がオブジェクトをそのままにしないのはなぜですか?
powershell - Powershell でのカスタム オブジェクトのスコープ設定
そのため、簡単に解決できると思われるpowershellの問題がありますが、自分で解決するのに苦労しています。
たとえば、次のプログラムを見てください。
これは正常に機能し、次の出力が得られます。
...しかし、これを関数に配置し、$MyFavoriteAnimals をグローバルとしてスコープしようとすると、New-Object コマンドが機能しなくなります。
...そして、次のエラーが表示されます。
powershell - PowerShell 型アクセラレータ: PSObject と PSCustomObject の比較
PowerShell v3.0PSCustomObject
で導入されました。のようPSObject
ですが、より良いです。その他の改善 (例: プロパティの順序が維持される) の中でも、ハッシュテーブルからのオブジェクトの作成が簡素化されています。
これで、次のステートメントは明らかなようです。
PSCustomObject
完全な名前空間 + クラス名の「エイリアス」であるため、同じように機能します。代わりに、エラーが発生します。
タイプ "System.Collections.Hashtable" の "System.Collections.Hashtable" 値をタイプ "System.Management.Automation.PSCustomObject" に変換できません。
両方のタイプのオブジェクトのアクセラレータをリストしました。
そして、両方が同じクラスを参照していることを発見しました。PSObject
これは、アクセラレータを使用すると、コードを短くするだけでなく、他の多くのことができることを意味します。
この問題に関する私の質問は次のとおりです。
- アクセラレータを使用する場合と完全な型名を使用する場合の違いについて、興味深い例はありますか?
- アクセラレータが一般的なベスト プラクティスとして利用できる場合は常に、完全な型名の使用を避けるべきですか?
- おそらくリフレクションを使用して、アクセラレータが基になるクラスを指す以外のことを行うかどうかを確認する方法は?
json - JSON から生成された PS カスタム オブジェクト プロパティの値へのアクセス
このような JSON の場合:
PS カスタム オブジェクトに変換して $data 変数に保存すると、次のように特定の「ツアー」の「トーナメント」の下の値にアクセスできます。
しかし、「ツアー」の下に「コード」または「名前」の値を指定して、「トーナメント」のプロパティと値にアクセスすることは可能ですか? そのようなもの、多分:
実際、PSスクリプトでは、「ツアー」の下の「コード」でデータをフィルタリングし、基になる「トーナメント」を取得します(「ツアー」の特定の「コード」の「トーナメント」を取得します)。
arrays - powershellでrefを使用して関数から値を返す
$AllMailboxes
オブジェクトを作成して変数に保持する関数 DoWork があります。次に、その関数内で別の関数 ProcessEmail を実行します。この関数は、参照によって変数を取得$Mailbox
し、それにいくつかのフィールドを追加して、更新または更新されたフィールドを持つすべての $Mailbox を保持する新しいものを作成します。$AllMailboxes
$AllMailboxes
$collection
個別の変数を作成して、ref を使用せずに ref を使用して複数のアプリケーションを試しましたが、何らかの理由で $collection またはProcessEmail
関数の外にある他の手段で何かを表示することはできません。私は何かが欠けていると確信しています。
arrays - Powershellは列を無視して選択します
私はPowershellを初めて使用し、ConvertTo-Htmlを使用できるように互換性のある繰り返し出力を取得しようとしています。PSCustomObject といくつかの配列に文字列があります。次を使用して非正規化しようとしていますが、このように期待どおりにタイトルプロパティが繰り返されません
編集- 以下に出力
最後の選択行を見逃したので編集しました(ここでは、配列が拡大するにつれて各行でタイトルが繰り返されることを期待しています)
これにより、次の出力が返されます
こんにちは
さよなら
私が使用する場合
私は次のことを得る
タイトル コメント 色
----- ------- ------
[文字列]Hello World {hello, bye} {blue, green, red}
文字列キャストありとなしの両方を試しました。どんなアイデアでも大歓迎です。