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 回答