[英]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.