繁体   English   中英

Azure PowerShell Runbook 嵌套 function

[英]Azure PowerShell Runbook with nested function

我有一个 Azure PowerShell Runbook,我在其中使用 SharePoint-PnP Cmdlet,它工作得很好。 但我对 function 调用有疑问。 值得一提的是,该脚本在本地运行良好,但在 Azure Runbook 中却不行。

$SPCredentials = Get-AutomationPSCredential -Name 'ServiceAccount'
Connect-PnPOnline -Url $SPUrl -Credentials $SPCredentials

$SPList = New-PnPList -Title "$($ObjektNr)-$($ObjektName)" -Template DocumentLibrary -OnQuickLaunch -EnableContentTypes
Write-Output "Bibliothek erstellt"
Add-PnPContentTypeToList -List $SPList -ContentType $SPCTName -DefaultContentType
Write-Output "Inhaltstyp hinzugefügt"
Remove-PnPContentTypeFromList -List $SPList -ContentType "Dokument"
Write-Output "Inhaltstyp entfernt"
Set-PnPList -Identity $SPList -EnableContentTypes $false -EnableVersioning $true -EnableMinorVersions $false
Write-Output "Listeneinstellungen vorgenommen"

$SPList = Get-PnPList -Identity "$($ObjektNr)-$($ObjektName)"
$SPRootFolder = "$($SPList.RootFolder.Name)/"
Write-Output "Neue Bibliothek abgerufen"

$SPTerms = Get-PnPTerm -TermSet $SPTermSet -TermGroup $SPTermGroup -IncludeChildTerms -Recursive
Write-Output "Terms abgerufen"

Function getTerms($Terms)
{
    Write-Output "Funktion ausgeführt"
    Foreach ($Term in $Terms)
    {
        If ($Term.PathOfTerm.Contains(";"))
        {
            Add-PnPFolder -Name $Term.Name -Folder "$($SPRootFolder)$($Term.PathOfTerm.Substring(0, $Term.PathOfTerm.LastIndexOf(";")).Replace(";","/"))"

            $values = @()
            $splitTerms = $Term.PathOfTerm.Split(";")
            $count = $splitTerms.Count - 1

            For ($i=0; $i -le $count; $i++)
            {
                If ($i -eq 0)
                {
                    $values += "$($SPTermGroup)|$($SPTermSet)|$($splitTerms[$i])"
                }
                Else
                {
                    $values += "$($values[-1])|$($splitTerms[$i])"
                }
            }

            Set-PnPDefaultColumnValues -List $SPList -Field "Metadaten" -Value $values -Folder "$($Term.PathOfTerm.Replace(";","/"))"
        }
        else
        {
            Add-PnPFolder -Name $Term.Name -Folder $SPRootFolder

            Set-PnPDefaultColumnValues -List $SPList -Field "Metadaten" -Value $Term.Id -Folder $Term.Name
        }

        If ($Term.Terms.Count -gt 0)
        {
            getTerms($Term.Terms)
        }
    }
}

getTerms($SPTerms)

现在的问题是我在 function getTerms (从底部的第四行)中调用 function getTerms 的地方。 似乎在再次调用 function 之后,整个脚本从头开始,而不仅仅是带有参数的 function。

谢谢你的帮助!

问候,马克

理想情况下,它不应该从头开始,仔细检查。 我建议您在调用 getTerms function 之前和之后添加写输出行(即,靠近底部的第 4 行)以及实际 getTerms function 之前。 然后验证您在这些写入输出行中提供的内容是否按预期顺序打印。

另外,我建议您尝试以下方法,看看您的问题是否得到解决。

Function getTerms($Terms)
{
    Write-Output "Funktion ausgeführt"
    Foreach ($Term in $Terms)
    {
        If ($Term.PathOfTerm.Contains(";"))
        {
            Add-PnPFolder -Name $Term.Name -Folder "$($SPRootFolder)$($Term.PathOfTerm.Substring(0, $Term.PathOfTerm.LastIndexOf(";")).Replace(";","/"))"
            $values = @()
            $splitTerms = $Term.PathOfTerm.Split(";")
            $count = $splitTerms.Count - 1
            For ($i=0; $i -le $count; $i++)
            {
                If ($i -eq 0)
                {
                    $values += "$($SPTermGroup)|$($SPTermSet)|$($splitTerms[$i])"
                }
                Else
                {
                    $values += "$($values[-1])|$($splitTerms[$i])"
                }
            }
            Set-PnPDefaultColumnValues -List $SPList -Field "Metadaten" -Value $values -Folder "$($Term.PathOfTerm.Replace(";","/"))"
        }
        else
        {
            Add-PnPFolder -Name $Term.Name -Folder $SPRootFolder
            Set-PnPDefaultColumnValues -List $SPList -Field "Metadaten" -Value $Term.Id -Folder $Term.Name
        }
        If ($Term.Terms.Count -gt 0)
        {
            getTerms($Term.Terms)
        }
    }
}

Function main()
{
    $SPCredentials = Get-AutomationPSCredential -Name 'ServiceAccount'
    Connect-PnPOnline -Url $SPUrl -Credentials $SPCredentials

    $SPList = New-PnPList -Title "$($ObjektNr)-$($ObjektName)" -Template DocumentLibrary -OnQuickLaunch -EnableContentTypes
    Write-Output "Bibliothek erstellt"
    Add-PnPContentTypeToList -List $SPList -ContentType $SPCTName -DefaultContentType
    Write-Output "Inhaltstyp hinzugefügt"
    Remove-PnPContentTypeFromList -List $SPList -ContentType "Dokument"
    Write-Output "Inhaltstyp entfernt"
    Set-PnPList -Identity $SPList -EnableContentTypes $false -EnableVersioning $true -EnableMinorVersions $false
    Write-Output "Listeneinstellungen vorgenommen"

    $SPList = Get-PnPList -Identity "$($ObjektNr)-$($ObjektName)"
    $SPRootFolder = "$($SPList.RootFolder.Name)/"
    Write-Output "Neue Bibliothek abgerufen"

    $SPTerms = Get-PnPTerm -TermSet $SPTermSet -TermGroup $SPTermGroup -IncludeChildTerms -Recursive
    Write-Output "Terms abgerufen"

    getTerms($SPTerms)
}

main()

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM