0

これを行うのはそれほど難しいことではありませんが、ちょっとした壁にぶつかりました。私はどの言語でもプログラミング経験がほとんどないので、親切にしてください。

私の目的は、特定のホストの各インターフェイスの IP とサブネットのペアを取得する単純な (機能する?) 関数を作成することです。これ自体はケーキウォークであり、非常にうまく機能します。私が抱えている問題は、数十または数百の IP を持つ多くのホストがあることです。これを表示するのは現実的ではないか使用できないので、それを CSV ファイルにダンプして、PS からのデータを直接操作したり、必要なプログラムやエディターで CSV を開いたりできるようにすることにしました。

私の問題は、すべてを正しくリストすることができないことです。情報を取得してそれをまとめた後の私の論理には、かなり欠陥があるか、完全に間違っていると感じており、専門家の助けが必要です.

これは、動作しているように見えるコードの安定した部分です。

function Get-IPConfig
{
    $op_file_location = $args[0]
    $op_file = (Import-Csv -Header ID $op_file_location)
        if (! $op_file_location) {Write-Host "Please try again in the following format: Get-IPConfig c:\full\file\path\here.csv"}       

        else {
            Foreach ($op_file.ID in $op_file)
            {
            Try {
                $SysConfig = @(gwmi -Class Win32_ComputerSystem -ComputerName $op_file.ID) 
                $NetConfig = @(gwmi -class Win32_NetworkAdapterConfiguration -ComputerName $op_file.ID -Filter "IPEnabled='TRUE'")
                }
            Catch [System.Exception] {
                    Write-Host $op_file.ID "is not responding correctly. It may be offline, or you may not have permission to access it."
                  }
                $ResultsIP = $NetConfigItem.IPAddress
                $ResultsSubnet = $NetConfigItem.IPSubnet
                $Results = $ResultsIP + $ResultsSubnet
                Foreach ($NetConfigItem in $NetConfig)
                {
                    Write-Host "Target Description:" $op_file.ID
                    Write-Host "NIC Description:" $NetConfigItem.Description
                    Foreach ($IP in $ResultsIP){Write-Host $IP}
                    Foreach ($IPSub in $ResultsSubnet) {Write-Host $IPSub}
                }
            }}
}

すぐに耳にするであろう悪いコーディング慣行やその他の恐ろしいこと以外に、これらの配列を組み合わせて CSV にダンプする準備をするにはどうすればよいでしょうか? 私の問題は、この場合、データの書き込み方法ではなく、データの準備方法に関係していると思います。どちらもかなりの影響力があると思いますが。明確にするために、私は psObject のものを試しましたが、あまり成功しませんでした。プログラミングの知識がほぼ完全に不足していることを考えると、それほど複雑ではないチュートリアルをまだ見つけていません。そうは言っても、頭を包み込むのに役立つ何かを見つけることができれば、それを使用することに反対しているわけではありません. 私を正しい方向に導くヒントやヒントは、非常に高く評価されます。

4

1 に答える 1

1

投稿する前に、コードに問題がないかどうかを確認してください。

            Foreach ($NetConfigItem in $NetConfig)
            {
               $ResultsIP = $NetConfigItem.IPAddress
                $ResultsSubnet = $NetConfigItem.IPSubnet
                $Results = $ResultsIP + $ResultsSubnet
                Write-Host "Target Description:" $op_file.ID
                Write-Host "NIC Description:" $NetConfigItem.Description
                Foreach ($IP in $ResultsIP){Write-Host $IP}
                Foreach ($IPSub in $ResultsSubnet) {Write-Host $IPSub}
            }

結果セクションは Foreach コード内にあります。

最良の方法は、オブジェクトを返すことです。これにより、多くの柔軟性が得られ、必要に応じてデータを簡単に操作できます。

foreach 内で PSCustomObject を生成します

$OutputObject = New-Object psobject
$OutputObject | Add-Member -Name "TargetDescription" -MemberType NoteProperty -Value $op_file.ID
$OutputObject | Add-Member -Name "NICDescription:" -MemberType NoteProperty -Value $NetConfigItem.Description

IP アドレスを使用して、4 つの IP アドレスなど、次のような最大数の値を指定します。

$OutputObject | Add-Member -Name "IPaddress1" -MemberType NoteProperty -Value $IP

次に、$OutPutObject を、次のように早期に宣言されたコンテナーに追加するだけです: $OutputContainer = @()

そしてそれを追加するだけです

$OutputContainer += $OutputObject

これがお役に立てば幸いです。

宜しくお願いします

于 2012-06-19T07:50:49.623 に答える