Forum Discussion
How do I set DenyAddAndCustomizePages using PnP?
Hi
Is there a way I can set DenyAddAndCustomizePages using PnP?
I know it can be done using "SharePoint Online Management Shell" via the Set-SPOSite command. However, this command does not exist in PnP. Also I'd rather not have to load both modules. I'm trying to standardise on PnP.
Thanks.
Alan Trafford This site will help you: Set-PnPTenantSite | PnP PowerShell
Set-PnPTenantSite -Identity "https://contoso.sharepoint.com/sites/sales" -DenyAddAndCustomizePages:$false
I don't think that there is an option available for that imn PnP PowerShell
The only option is:
Connect-SPOService -Url https://mytenant-admin.sharepoint.com -Credential $cred
Set-SPOSite -Identity https://mytenant.sharepoint.com -DenyAddAndCustomizePages $true
PnP also doesn't have a Connect-SPOService equivalent Cmdlet.
I had a look if there is an option with
Get-PnPSite and then modify a propertty within the site object that is returned but there doesn't seem to be a property
When I ran Microsoft.Online.SharePoint.PowerShell\Get-SPOSite I did find the property.
$site = (Microsoft.Online.SharePoint.PowerShell\Get-SPOSite)[0]
$site.DenyAddAndCustomizePages
This returned the value of DenyAddAndCustomizePages.
- Alan TraffordBrass Contributor
I've got it working with PnP, but with a small issue.
Clear-Host Import-Module -Name SharePointPnPPowerShellOnline -DisableNameChecking # Shorten name! $DenyAddAndCustomizePagesStatusEnum = [Microsoft.Online.SharePoint.TenantAdministration.DenyAddAndCustomizePagesStatus] Connect-PnPOnline -Url 'https://<private>-admin.sharepoint.com/' -Credentials (Get-Credentials) $context = Get-PnPContext $site = Get-PnPTenantSite -Detailed -Url 'https://<private>.sharepoint.com/' $site.DenyAddAndCustomizePages = $DenyAddAndCustomizePagesStatusEnum::Disabled $site.Update() $context.ExecuteQuery() Get-PnPTenantSite -Detailed -Url 'https://<private>.sharepoint.com/' | select url,DenyAddAndCustomizePages Disconnect-PnPOnline
The above works, but if I run it twice within about 30 seconds, changing the value, I get the following error:
Exception calling "ExecuteQuery" with "0" argument(s): "Cannot set properties on site https://<private>.sharepoint.com/ because the site is not currently available." At line:26 char:1 + $context.ExecuteQuery() + ~~~~~~~~~~~~~~~~~~~~~~~ + CategoryInfo : NotSpecified: (:) [], MethodInvocationException + FullyQualifiedErrorId : ServerException
This is becuase the previous update has not yet finished. I've tried putting a pause in using the following code (between the Update and ExecuteQuery), but it does not seem to get the updated value for the 'Status' field:
# Wait for site to become available $status = $null while ($status -ne 'Active') { Write-Host "Waiting... $status" Start-Sleep -Seconds 5 $context.Load($site) $status = $site.Status }
Unfortunately, the loop never exits. Any ideas?
Thanks.
- Manidurai MohanamariappanIron Contributor
Try below script
$status = $null DO { Write-Host "Waiting... $status" Start-Sleep -Seconds 5 $Site=Get-PnPTenantSite -url https://<Tenantname>.sharepoint.com/sites/contosobeta -Detailed $status = $Site.Status } While ($status -ne 'Active')
- MichalSzmCopper Contributor
Alan Trafford This site will help you: Set-PnPTenantSite | PnP PowerShell
Set-PnPTenantSite -Identity "https://contoso.sharepoint.com/sites/sales" -DenyAddAndCustomizePages:$false