1

変なタイトルですみません、質問の言い方がわかりませんでした。私はPowershellに比較的慣れていないので、プログラムを書いています。基本的に、ユーザーが設定を選択した配列、または「$settings_array」に格納された GWMI クエリから「選択」したい配列があります。結果をCSVに出力したい。実行しようとすると、最初の Select ステートメントだけが CSV に出力されます。テキストボックスへの出力は正常に機能します。各反復で配列に格納される方法と関係があることはわかっています。$resultList は配列として初期化されます ($resultList = @())。フォームやその他の関数には何百行ものコードがありますが、関連するコードは次のとおりです。助けてくれてありがとう!さらにコードを投稿する必要がある場合はお知らせください。

$colItems = GWMI Win32_NetworkAdapterConfiguration -computername $PCname -namespace "root\CimV2" -filter "IpEnabled = TRUE"
ForEach ($objItem in $colItems)
{ 
    ForEach ($objItem2 in $settings_array)
    {
        $resultList += $objItem  | Select $objItem2
        $richTextBox1.Appendtext("$objItem2" + ": " + $objItem.$objItem2 + "`r`n")
        $richtextbox1.ScrollToCaret()
    }
}
$resultList | export-csv "$ScriptDir\Exports\$Outputfile" 
4

2 に答える 2

1

CSV は行と列で構成されます。エクスポートする配列内の各オブジェクトは行を取得し、各オブジェクトは各プロパティの列値を取得します。毎回単一のプロパティを持つ新しいレコード/オブジェクトを結果リストに追加します (すべてのオブジェクトにはプロパティが 1 つしかありません)。最初のものだけを取得する理由は、レコードに異なるプロパティ名が含まれているためです。この「非静的プロパティ名」の問題を解決するために、powershell は最初のオブジェクトのプロパティを csv ファイルのテンプレートとして取得します。object2、object3 などは同じプロパティが含まれていないため、空白になります。ただし、最初のオブジェクトが持っていたのと同じプロパティを持つ別のオブジェクトをヒットすると、値も含まれます。元。すべてのネットワーク アダプターの Name プロパティを取得しますが、残りの値は空白です。

あなたのサンプルには情報がありません。どのよう$settings_arrayに構築されます。次のような通常の文字列配列の場合:

$settings_array = "Name", "DisplayName", "Test"

また

$settings_array = @("Name", "DisplayName", "Test")

次に、配列全体を に渡すことができますselect

$colItems = GWMI Win32_NetworkAdapterConfiguration -computername $PCname  -namespace "root\CimV2" -filter "IpEnabled = TRUE"
ForEach ($objItem in $colItems)
{ 
    #Write to screen
    ForEach ($objItem2 in $settings_array)
    {
        $richTextBox1.Appendtext("$objItem2" + ": " + $objItem.$objItem2 + "`r`n")
        $richtextbox1.ScrollToCaret()
    }
}
#Save to CSV
$colItems | Select-Object -Property $settings_array | export-csv "$ScriptDir\Exports\$Outputfile" 

最後の行に注目してください。これで、foreach ループは textbox-content にのみ使用され、最後の行は CSV を適切にフォーマットします。

EDITこれを試して設定を取得してください:

Function GetSettings { 
    $out = @()
    Foreach ($objItem in $chklstGetMIPRet.CheckedItems) {
        $out += $objItem.ToString()
    } 
    $out
}
$settings_array = GetSettings
于 2013-02-27T20:49:29.560 に答える