2

私はPoShの経験がかなり浅いですが、noob回路で自分自身を保持できると思います. PowerShell を介して SQL テーブル内のサーバーのリストから直接接続ストレージ (DAS) を取得するメカニズムに取り組もうとしています。DAS を取得するコマンドは、DAS が接続されているサーバーからローカルで実行する必要があります。各サーバーには複数の DAS デバイスを接続できるため、サーバーごとに配列を作成し、その配列に各 DAS ユニットのオブジェクトを設定することにしました。私はプロセスを釘付けにし、各サーバーを反復処理し、各サーバーでコマンドをリモートで実行し、(リモート セッション内で) 必要なデータをキャプチャすることができますが、オブジェクトの配列を元に戻すのに問題があります。これにより、このデータをデータベース テーブルに書き込むことができます。呼び出しコマンド スクリプト ブロック内で配列を呼び出すと、すべて問題なく、必要なデータを取得できます。それは、後で呼び出そうとしたときだけです。データを書き込むためにこれらのサーバー (数百) のそれぞれで SQL セッションを確立する予定はないので、これを実行しているマシンから行うことをお勧めします。

このデータはデータベースに直接書き込まれるため、ファイルや csv などのエクスポート/インポートをいじるよりも、同じスクリプト内の PowerShell 内でネイティブに活用することもお勧めします。

PowerShell がネットワーク上でオブジェクトをシリアル化することは理解していますが、ローカル マシンに戻ると復元されると理解しています。私が達成しようとしていることは可能ですか、それとも単に頭がおかしくなっているだけですか?

関連するコードは次のとおりです。

    $result = invoke-command -computer $FQDN -credential $mycred -ArgumentList $FQDN -scriptblock {
        param($FQDN)
        $DASArray = @() 
    $OMReport = get-wmiobject -class win32_product | where-object {$_.Name -like 'Dell OpenManage*'}
        if (!$OMReport)
        {
        }
        else
        {

            [xml]$DAS = omreport storage enclosure -fmt xml

            $Nodelist = $DAS.SelectNodes("/OMA/Enclosures/DCStorageObject")
            foreach ($Node in $Nodelist | where-object {($_.SelectSingleNode("EnclosureType").get_InnerXML()) -ne 1})
            {
                $DASValues = New-Object PSObject
                $DASValues | Add-Member –MemberType NoteProperty –Name FQDN –Value $FQDN 
                $DASValues | Add-Member –MemberType NoteProperty –Name ID –Value $Node.selectsinglenode("ObjID").get_InnerXML()
                $DASValues | Add-Member –MemberType NoteProperty –Name Model –Value $Node.selectsinglenode("AssetName").get_InnerXML()
                $DASValues | Add-Member –MemberType NoteProperty –Name EnclosureType –Value $Node.selectsinglenode("EnclosureType").get_InnerXML()
                $DASValues | Add-Member –MemberType NoteProperty –Name ServiceTag –Value $Node.selectsinglenode("ServiceTag").get_InnerXML()

            $DASArray += $DASValues

            }
         }

     } 
$result
if (!$DASArray)
{
}
else
{
$DASArray
}                   
}

スクリプトブロック内から呼び出された場合の出力例:

FQDN               : server1
ID                 : 16777237
Model              : MD1200
EnclosureType      : 7
ServiceTag         : XXXXX1   
PSComputerName     : server1
RunspaceId         : 999231e0-5be1-4b8b-8cf1-6462a9fccad3
PSShowComputerName : True

FQDN               : server1
ID                 : 16777238
Model              : MD1200
EnclosureType      : 7
ServiceTag         : XXXXX2   
PSComputerName     : server1
RunspaceId         : 999231e0-5be1-4b8b-8cf1-6462a9fccad3
PSShowComputerName : True

FQDN               : server1
ID                 : 16777239
Model              : MD1200
EnclosureType      : 7
ServiceTag         : XXXXX3   
PSComputerName     : server1
RunspaceId         : 999231e0-5be1-4b8b-8cf1-6462a9fccad3
PSShowComputerName : True

FQDN               : server2
ID                 : 16777240
Model              : MD1200
EnclosureType      : 7
ServiceTag         : XXXXXX4  
PSComputerName     : server2
RunspaceId         : 999231e0-5be1-4b8b-8cf1-6462a9fccad3
PSShowComputerName : True

何かご意見は?

4

0 に答える 0