Some time ago we faced with the following problem: let’s say we have PowerShell script which does some actions on modern Sharepoint Online site collection. Among with other actions it sets property bag values on the root site of the target site collection:
Set-PnPPropertyBagValue -Key "Key" -Value "Value"
In order to do that (as well as to do other customizations on the modern site) you need to set DenyAddAndCustomizePages property to false on that site (see e.g. Access denied when try to delete folder in Modern Sharepoint site’s doclib). It can be done using the following PnP PowerShell cmdlet:
Set-PnPTenantSite -Url $url -NoScriptSite:$false
It returns control quite quickly. The problem however that on practice effect from setting DenyAddAndCustomizePages to false has delay. I.e. if you will try to set property bag value using cmdlet shown above immediately after you set DenyAddAndCustomizePages to false – there won’t be any errors but value won’t be really saved into property bag.
As workaround I’ve added 60 seconds delay to the script with UI indication (dots are printed to output each second until there won’t be 60 dots in line):
Write-Host "Wait some time before changes will take effect..." $i = 0 do { Write-Host "." -NoNewLine Start-Sleep -s 1 $i++ } while ($i -lt 60) Write-Host
After this delay property bag values were saved successfully.