[解決済み] OutVariableを使用してArrayListを作成する
質問
このようなことが起こる正当な理由があると思うのですが、それが何なのかわかりません。 次のようなコードがあります。
$Deleted = $Items[0].ParentNode.RemoveChild($Items[0])
Write-Output $Deleted
このコードを
Do-Something -OutVariable Test
期待通りに画面上と変数に出力されるのですが、変数が
ArraryList
の型である単一の要素を持つ
XmlElement
その代わりに
$Test = Do-Something
予想通り画面には出力されず、返された出力は1つのオブジェクトで、型は
XmlElement
なぜ
OutVariable
は
ArrayList
を返すのではなく、関数が返す単一の項目を返すのですか?
ありがとうございます。
解決方法は?
PowerShell [Core] 7.0時点の情報です。
-
PowerShell が予期せず ではない をアンラップして、コマンドの シングル -オブジェクトの出力に
-OutVariable
: つまり、たとえあるコマンドが 一 オブジェクトを作成すると、そのオブジェクトは予期せず 配列 (配列リスト) に渡されるターゲット変数で、その変数名が共通パラメータ-OutVariable
パラメータ(またはそのエイリアス。-ov
). -
さらに ターゲット変数に格納される値の型は常に
[System.Collections.ArrayList]
の場合、配列 リスト である。 一貫性がない によってマルチオブジェクトの出力を変数に取り込むこととは異なります。 正規の割り当て となり、その結果System.Object[]
, a レギュラー 配列 .
参照 このGitHubの課題 .
ここで 簡潔なテスト で、この問題を実証しています。
$null = Get-Date -OutVariable ov; $ov.GetType().FullName
上記のバージョンでは、このように出力されます。
System.Collections.ArrayList
が出力されるだけであるにもかかわらず、(概念的な)出力は
シングル
[datetime]
(
[System.DateTime]
) のインスタンスです。
通常の課題とは対照的です。
$v = Get-Date; $v.GetType().FullName
収穫
System.DateTime
.
は
ワークアラウンド
は、出力変数の参照を部分式演算子でラップして (
$(...)
この場合、通常の出力(成功)ストリームを経由した場合と同じ出力が得られます。
- 単一要素のコレクションがアンラップされる(要素そのもののみ出力)
-
複数要素のコレクションは
System.Object[]
の配列です。
# Note the $(...) around $ov
PS> $null = Get-Date -OutVariable ov; $($ov).GetType().FullName
System.DateTime # 1-element System.Collections.ArrayList unwrapped
もちろん
$ov[0]
もし、単一の出力オブジェクトしか期待しないのであれば。
この回避策は、複数要素の出力にも有効であることを示すものです。
PS> $null = Get-ChildItem / -OutVariable ov; $($ov).GetType().FullName
System.Object[] # multi-element System.Collections.ArrayList converted to array
関連
-
[解決済み】Powershell: 引数 "xxx" を受け入れる位置パラメーターが見つからない。
-
[解決済み] Send-MailMessage - リモートサーバーに接続できません。
-
[解決済み] Powershellスクリプトから7-Zipを実行する
-
[解決済み] リモートサーバーへのEnter-PSSessionが "access is denied "で失敗する。
-
[解決済み] Powershell - 空のパイプ要素は許可されません。
-
[解決済み] PowerShellでショートカットを作成する方法
-
[解決済み] PowerShellで使用できるすべての色のリスト?
-
[解決済み] PowerShellで改行するには?
-
[解決済み] Windows PowerShellでファイルが存在するかどうかをチェックする?
-
[解決済み] 呼び出しが1つのオブジェクトしか返さない場合、Powershellが配列を返すように強制するにはどうすればよいですか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] powershellでパラメータ'Path'がNULLのため引数を結合できないエラーの取得
-
[解決済み] Powershellスクリプトから7-Zipを実行する
-
[解決済み] [System.Web.Security.Membership]::GeneratePassword() - Type Not found
-
[解決済み] PowerShellにおけるセット(データ構造)
-
[解決済み] PowerShellでデータをCSVにエクスポートする方法は?
-
[解決済み] PowerShellを使用してSFTPにファイルをアップロードする
-
[解決済み] PowerShellスクリプトから終了コードを返す
-
[解決済み] PowerShellで変数とその型がBooleanであることを宣言する方法は?[重複している]をクリックします。
-
[解決済み] Get-MSolUserのフィルタリング方法
-
[解決済み] Powershell プロセスの開始、タイムアウトによる待機、Kill、終了コードの取得