Powershell noob尝试显示来自多个阵列的关联数据

时间:2012-06-18 21:23:35

标签: powershell

虽然这可能不是很难做到,但我已经遇到了一些障碍。我对任何语言的编程经验都很少,所以请善待。

我的目标是创建一个简单的(工作?)函数,该函数将阻止给定主机上每个接口的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的东西而没有太大的成功。考虑到我几乎完全缺乏编程知识,我还没有找到一个不太复杂的教程。话虽如此,如果我能找到一些可以帮助我绕过它的东西,我并不反对使用它。任何可能使我朝着正确方向前进的提示或提示都将非常感激。

1 个答案:

答案 0 :(得分:1)

Plz在发布之前验证代码是否一切正常。

            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代码中。

最好的方法是返回一个Object,它会给你很多灵活性,然后你可以轻松地按照自己的意愿操作数据。

在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

希望这对你有所帮助。

最好的问候