我正在尝试将一组自定义对象传递给函数,以便进一步处理这些对象。
这是我创建自定义对象数组的函数:
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)
谁知道我做错了什么?如何在函数内部访问自定义对象?
答案 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。