在Powershell中创建自定义函数

时间:2015-04-06 20:03:07

标签: powershell sharepoint

我对PowerHell很陌生,我只是想创建一个(内联)函数,它将接收各种参数并返回一个填充的数组。但是,我一直收到以下错误:

错误:

You cannot call a method on a null-valued expression.
At EnumerateSites.ps1:157 char:19
+         $Array.Add <<<< ($groupName)
    + CategoryInfo          : InvalidOperation: (Add:String) [], RuntimeException
    + FullyQualifiedErrorId : InvokeMethodOnNull

代码看起来像:
&#34;标题&#34;变量都有有效值。

$ValidSecurityGroupSuffixes = @("Suffix A", "Suffix B", "Suffix C")

$ExpectedSecurityGroups = CreateSecurityGroupList($SPSiteCollection.RootWeb.Title, $SPWeb.Title, $ValidSecurityGroupSuffixes)

function CreateSecurityGroupList ([string] $siteCollectionName, [string] $siteName, [string[]] $suffixes) 
{
    $Array = $()

    foreach($suffix in $suffixes)
    {
        $groupName = $siteCollectionName + " - " + $siteName + " - " + $suffix
        $Array.Add($groupName)
    }

    $Array
}

此外:
当我注释掉一些东西并在 Functions ForEach循环中打印变量时,我得到了这个......

"SomeCustomerName SomeSiteName System.Object[] -  - "

我应该得到这个......

"CustomerName - Location - Suffix A"
"CustomerName - Location - Suffix B"
"CustomerName - Location - Suffix C"

感谢任何见解。

2 个答案:

答案 0 :(得分:1)

在调用之前定义函数。

$ValidSecurityGroupSuffixes = @("Suffix A", "Suffix B", "Suffix C")

function CreateSecurityGroupList ([string] $siteCollectionName, [string] $siteName, [string[]] $suffixes) 
{
    $Array = @()

    foreach($suffix in $suffixes)
    {
        $groupName = $siteCollectionName + " - " + $siteName + " - " + $suffix
        $Array += $groupName
    }

    $Array
}
$ExpectedSecurityGroups = CreateSecurityGroupList $SPSiteCollection.RootWeb.Title $SPWeb.Title $ValidSecurityGroupSuffixes

(编辑是因为,正如Dane指出的那样,该功能未被正确调用)。

答案 1 :(得分:1)

首先在powershell中调用多值函数,如下所示:

$ExpectedSecurityGroups = CreateSecurityGroupList -siteCollectionName $SPSiteCollection.RootWeb.Title -siteName $SPWeb.Title -suffixes $ValidSecurityGroupSuffixes)

第二个powershell很时髦,喜欢代码顶部的函数和下面的函数调用:

    Function testing([string] $someText)
    {
    #do stuff and return something
    }

$returnValue = testing $imSendingTextToAFunction