将自定义对象数组传递给函数

时间:2012-11-20 21:02:09

标签: powershell psobject

我正在尝试将一组自定义对象传递给函数,以便进一步处理这些对象。

这是我创建自定义对象数组的函数:

Function GetNetworkAdapterList
{
    # Get a list of available Adapters
    $hnet = New-Object -ComObject HNetCfg.HNetShare
    $netAdapters = @()
    foreach ($i in $hnet.EnumEveryConnection)
    {   
        $netconprop = $hnet.NetConnectionProps($i)
        $inetconf = $hnet.INetSharingConfigurationForINetConnection($i)

        $netAdapters += New-Object PsObject -Property @{
                Index = $index
                Guid = $netconprop.Guid
                Name = $netconprop.Name
                DeviceName = $netconprop.DeviceName
                Status = $netconprop.Status
                MediaType = $netconprop.MediaType
                Characteristics = $netconprop.Characteristics
                SharingEnabled = $inetconf.SharingEnabled
                SharingConnectionType = $inetconf.SharingConnectionType
                InternetFirewallEnabled = $inetconf.InternetFirewallEnabled
                SharingConfigurationObject = $inetconf
                }
        $index++
    }   
    return $netAdapters
}

然后在我的主代码中,我调用上面的函数:

$netAdapterList = GetNetworkAdapterList

$ netAdapterList返回预期的数据,我可以执行以下操作:

$netAdapterList | fl Name, DeviceName, Guid, SharingEnabled

到目前为止一切顺利。

现在我想调用传递$ netAdapterList

的函数

我创建了一个这样的虚拟函数:

Function ShowAdapters($netAdapterListParam)
{
   $netAdapterListParam | fl Name, DeviceName, Guid, SharingEnabled
}

当我这样调用它时:

ShowAdapters $netAdapterList

什么都没打印出来。

我尝试过更改功能的签名但仍然没有运气:

Function ShowAdapters([Object[]]$netAdapterListParam)

Function ShowAdapters([Object]$netAdapterListParam)

Function ShowAdapters([PSObject[]]$netAdapterListParam)    

Function ShowAdapters([array]$netAdapterListParam)

谁知道我做错了什么?如何在函数内部访问自定义对象?

2 个答案:

答案 0 :(得分:0)

我可以这样说:

1-我已将GetNetworkAdapterList功能复制并粘贴到我的PowerShell控制台中。

2-我将$netAdapterList = GetNetworkAdapterList复制并粘贴到我的powershell控制台

3-我已将ShowAdapters功能复制并粘贴到我的PowerShell控制台

4- executeD ShowAdapters $netAdapterList

并获得扩展结果:由Name, DeviceName, Guid, SharingEnabled

过滤的所有网络适配器的列表

你的代码有效,我不知道你错了什么,但尝试从一个新的PowerShell控制台开始,做我做的。

答案 1 :(得分:0)

感谢您的回复@Christian。尝试了你的步骤,将粘贴的碎片复制到shell中,确实有效。但是如果我运行完整的.ps1脚本不打印任何东西。

我在ShowAdapters函数中的Powershell IDE设置断点中运行脚本,而$netAdapterListParam确实存在我传入的预期自定义对象数组,因此我将问题缩小到了FL命令行开关。

由于某种原因$netAdapterList | fl Name, DeviceName, Guid, SharingEnabled对我不起作用,所以我最终使用了以下内容:

$formatted = $netAdapterListParam | fl Name, DeviceName, Guid, SharingEnabled | Out-String
Write-Host $formatted

这就是诀窍,屏幕上印有4个属性。

经验教训:

1)Win7中内置的Powershell IDE可以成为调试脚本的非常有用的工具 2)Format-List在格式化自定义对象时可能很古怪,因此需要Out-String。