0

xml である入力ファイルを読み取る必要がありました (以下を参照)。

<Parent>
  <Child>
    <grandchilditem1>Server1</grandchilditem1>
    <grandchilditem2>Database1</grandchilditem2>
  </Child>
</Parent>
<Parent>
  <Child>
    <grandchilditem1>Server1</grandchilditem1>
    <grandchilditem2>Database1</grandchilditem2>
  </Child>
</Parent>

メインの PowerShell スクリプトは xml を解析し、各子の foreach ループで入力パラメーターを使用してオブジェクトを作成し、各子アイテムから作成されたオブジェクトとして引数を使用して別の PowerShell スクリプトを呼び出します。これは、異なるコンソールでスクリプトを並行して実行するために必要です。

$Child.ChildNodes.GetEnumerator()|ForEach-Object{
  $InputOBJ = New-Object PSObject -Property @{
        Server = $_.grandchilditem1
        Database = $_.grandchilditem2
    }
  $psfilepath = Get-Location
  Start-Process -filepath "powershell.exe" -ArgumentList @("-NoExit", "$psfilepath\ls.ps1 $InputOBJ") -WindowStyle Normal
}

私の問題は、これは正常に実行され、2 つの子ノードに対して 2 つの異なるコンソールが開きますが、$inputobj が完全に渡されないことです。切り捨てられます。ただし、個々のパラメーターを文字列値として渡すと、すべてが受け入れられます。

オブジェクトが正しく渡されない理由を知りたいです。

開いた新しいコンソールでは、出力は最初の項目のみになります。たとえば、私の ls.ps1 にはステートメントがあります

write-host $inputobj 

出力します、これだけです。

@{サーバー=サーバー1;

オブジェクト構造も損なわれます。オブジェクトではなく文字列として送信されていると思います。

これについて詳しい方がいらっしゃいましたら教えてください。

4

1 に答える 1