函数不返回预期的对象
问题描述:
我有这个PowerShell函数的一个奇怪的情况。假设返回ArrayList对象,但是在循环仅向ArrayList添加1个项的情况下,函数返回SPList项而不是Expected ArrayList对象。我难以理解PowerShell为何如此行事。函数不返回预期的对象
function Get-ContentOrganizerRules
(
[System.String]$siteUrl = "http://some.sharepoint.url"
)
{
Write-Host -ForegroundColor Gray "Searching for Content Organizer Rules: " $siteUrl
# ArrayList to hold any found DataConn Libs
[System.Collections.ArrayList]$CORules = New-Object System.Collections.ArrayList($null)
$lists = Get-SPWeb $siteUrl |
Select -ExpandProperty Lists |
Where { $_.GetType().Name -eq "SPList" -and $_.hidden }
foreach($list in $lists)
{
#Write-Host $list ;
foreach($contenType in $list.ContentTypes){
if($contenType -ne $null){
if($contenType.Id.ToString() -eq "0x0100DC2417D125A4489CA59DCC70E3F152B2000C65439F6CABB14AB9C55083A32BCE9C" -and $contenType.Name -eq "Rule")
{
$CORules.Add($list)>$null;
Write-Host -BackgroundColor Green -ForegroundColor White "Content Organizer Rule found: " $list.Url>$null;
}
}
}
}
return $CORules;
}
这是调用代码:
$CORulesResults = Get-ContentOrganizerRules $web.URL;
if($CORulesResults.Count -gt 0){
$Results.AddRange($CORulesResults);
}
答
这里存在隐性管道和管道惯于“展开”阵列,集合和一个的ArrayList水平。
试试这个:
return ,$CORules
答
或者你可以用[Array]
强制变量$ CORulesResult到数组前
[Array]$CORulesResults = Get-ContentOrganizerRules $web.URL;
if($CORulesResults.Count -gt 0){
$Results.AddRange($CORulesResults);
}
答
我有一个类似的问题还有,当我用[系统。 Collections.ArrayList]而不是普通的固定大小的数组。被返回的对象不是我希望的数组元素,而是整个数组,除了我想要返回的一个元素外,它是无用的。谈论弄乱堆栈。
解决办法很简单:使用[System.Collections.ArrayList]
这里是你将如何声明和处理$ CORules停止。
$CORules = @()
...
$CORules = $CORules + $list
万岁乐猛砸!
'是否会“展开”数组'你是什么意思?想要展开,不会展开,展开数组,还有其他什么? – Neolisk 2013-04-21 01:58:16
古英语。这意味着“他们将获得一切机会”。 – mjolinor 2013-04-21 04:48:52