From 3042b9d3bddd6b57380df3d88236143cf973fce6 Mon Sep 17 00:00:00 2001 From: Jenny Wu Date: Wed, 4 Oct 2023 14:57:48 -0700 Subject: [PATCH 1/5] [FileVersion] Get-PnPSite change for VersionPolicy --- documentation/Get-PnPSite.md | 20 +++++++++++++++++ src/Commands/Site/GetSite.cs | 42 +++++++++++++++++++++++++++++++++--- 2 files changed, 59 insertions(+), 3 deletions(-) diff --git a/documentation/Get-PnPSite.md b/documentation/Get-PnPSite.md index 1a6391626..b648909d0 100644 --- a/documentation/Get-PnPSite.md +++ b/documentation/Get-PnPSite.md @@ -38,6 +38,12 @@ Get-PnPSite -Includes RootWeb,ServerRelativeUrl Gets the current site specifying to include RootWeb and ServerRelativeUrl properties. For the full list of properties see https://learn.microsoft.com/previous-versions/office/sharepoint-server/ee538579(v%3doffice.15) +### EXAMPLE 3 +```powershell +Get-PnPSite -GetVersionPolicy +``` +Get site level version policy settings. + ## PARAMETERS ### -Connection @@ -54,6 +60,20 @@ Accept pipeline input: False Accept wildcard characters: False ``` +### -GetVersionPolicy +Get site level version policy settings. + +```yaml +Type: SwitchParameter +Parameter Sets: (All) + +Required: False +Position: Named +Default value: None +Accept pipeline input: False +Accept wildcard characters: False +``` + ## RELATED LINKS [Microsoft 365 Patterns and Practices](https://aka.ms/m365pnp) diff --git a/src/Commands/Site/GetSite.cs b/src/Commands/Site/GetSite.cs index fafd6c303..d5a455123 100644 --- a/src/Commands/Site/GetSite.cs +++ b/src/Commands/Site/GetSite.cs @@ -10,13 +10,49 @@ namespace PnP.PowerShell.Commands.Site [OutputType(typeof(Microsoft.SharePoint.Client.Site))] public class GetSite : PnPRetrievalsCmdlet { + [Parameter(Mandatory = false)] + public SwitchParameter GetVersionPolicy; + protected override void ExecuteCmdlet() { DefaultRetrievalExpressions = new Expression>[] { s => s.Url, s => s.CompatibilityLevel }; var site = ClientContext.Site; - ClientContext.Load(site, RetrievalExpressions); - ClientContext.ExecuteQueryRetry(); - WriteObject(site); + + if (ParameterSpecified(nameof(GetVersionPolicy))) + { + site.EnsureProperties(s => s.Url, s => s.VersionPolicyForNewLibrariesTemplate, s => s.VersionPolicyForNewLibrariesTemplate.VersionPolicies); + + var s = new PSObject(); + s.Properties.Add(new PSVariableProperty(new PSVariable("Url", site.Url))); + + if (site.VersionPolicyForNewLibrariesTemplate.VersionPolicies.ServerObjectIsNull == true) + { + s.Properties.Add(new PSVariableProperty(new PSVariable("VersionPolicy", "No Site Level Policy Set"))); + } + else + { + site.EnsureProperties(s => s.VersionPolicyForNewLibrariesTemplate, s => s.VersionPolicyForNewLibrariesTemplate.MajorVersionLimit, s => s.VersionPolicyForNewLibrariesTemplate.VersionPolicies); + + s.Properties.Add(new PSVariableProperty(new PSVariable("DefaultTrimMode", site.VersionPolicyForNewLibrariesTemplate.VersionPolicies.DefaultTrimMode))); + + if (site.VersionPolicyForNewLibrariesTemplate.VersionPolicies.DefaultTrimMode != VersionPolicyTrimMode.AutoExpiration) + { + if (site.VersionPolicyForNewLibrariesTemplate.VersionPolicies.DefaultTrimMode == VersionPolicyTrimMode.ExpireAfter) + { + s.Properties.Add(new PSVariableProperty(new PSVariable("DefaultExpireAfterDays", site.VersionPolicyForNewLibrariesTemplate.VersionPolicies.DefaultExpireAfterDays))); + } + s.Properties.Add(new PSVariableProperty(new PSVariable("MajorVersionLimit", site.VersionPolicyForNewLibrariesTemplate.MajorVersionLimit))); + } + } + + WriteObject(s); + } + else + { + ClientContext.Load(site, RetrievalExpressions); + ClientContext.ExecuteQueryRetry(); + WriteObject(site); + } } } } From da9e119e5c9b6083af7827a3022b31f99b2008f9 Mon Sep 17 00:00:00 2001 From: Jenny Wu Date: Thu, 5 Oct 2023 11:24:12 -0700 Subject: [PATCH 2/5] Resolve comment --- src/Commands/Site/GetSite.cs | 34 ++++++++++++++++++++++++++-------- 1 file changed, 26 insertions(+), 8 deletions(-) diff --git a/src/Commands/Site/GetSite.cs b/src/Commands/Site/GetSite.cs index d5a455123..d8ef737be 100644 --- a/src/Commands/Site/GetSite.cs +++ b/src/Commands/Site/GetSite.cs @@ -22,30 +22,39 @@ protected override void ExecuteCmdlet() { site.EnsureProperties(s => s.Url, s => s.VersionPolicyForNewLibrariesTemplate, s => s.VersionPolicyForNewLibrariesTemplate.VersionPolicies); - var s = new PSObject(); - s.Properties.Add(new PSVariableProperty(new PSVariable("Url", site.Url))); + var vp = new VersionPolicy(); + vp.Url = site.Url; if (site.VersionPolicyForNewLibrariesTemplate.VersionPolicies.ServerObjectIsNull == true) { - s.Properties.Add(new PSVariableProperty(new PSVariable("VersionPolicy", "No Site Level Policy Set"))); + vp.Description = "No Site Level Policy Set"; } else { site.EnsureProperties(s => s.VersionPolicyForNewLibrariesTemplate, s => s.VersionPolicyForNewLibrariesTemplate.MajorVersionLimit, s => s.VersionPolicyForNewLibrariesTemplate.VersionPolicies); - s.Properties.Add(new PSVariableProperty(new PSVariable("DefaultTrimMode", site.VersionPolicyForNewLibrariesTemplate.VersionPolicies.DefaultTrimMode))); + vp.DefaultTrimMode = site.VersionPolicyForNewLibrariesTemplate.VersionPolicies.DefaultTrimMode.ToString(); - if (site.VersionPolicyForNewLibrariesTemplate.VersionPolicies.DefaultTrimMode != VersionPolicyTrimMode.AutoExpiration) + if (site.VersionPolicyForNewLibrariesTemplate.VersionPolicies.DefaultTrimMode == VersionPolicyTrimMode.AutoExpiration) + { + vp.Description = "Site has Automatic Policy Set"; + } + else { if (site.VersionPolicyForNewLibrariesTemplate.VersionPolicies.DefaultTrimMode == VersionPolicyTrimMode.ExpireAfter) { - s.Properties.Add(new PSVariableProperty(new PSVariable("DefaultExpireAfterDays", site.VersionPolicyForNewLibrariesTemplate.VersionPolicies.DefaultExpireAfterDays))); + vp.DefaultExpireAfterDays = site.VersionPolicyForNewLibrariesTemplate.VersionPolicies.DefaultExpireAfterDays.ToString(); + vp.Description = "Site has Manual settings with specific count and time limits"; + } + else if (site.VersionPolicyForNewLibrariesTemplate.VersionPolicies.DefaultTrimMode == VersionPolicyTrimMode.NoExpiration) + { + vp.Description = "Site has Manual settings with specific version count limit and no time limits"; } - s.Properties.Add(new PSVariableProperty(new PSVariable("MajorVersionLimit", site.VersionPolicyForNewLibrariesTemplate.MajorVersionLimit))); + vp.MajorVersionLimit = site.VersionPolicyForNewLibrariesTemplate.MajorVersionLimit.ToString(); } } - WriteObject(s); + WriteObject(vp); } else { @@ -55,4 +64,13 @@ protected override void ExecuteCmdlet() } } } + + public class VersionPolicy + { + public string Url { get; set; } + public string DefaultTrimMode { get; set; } + public string DefaultExpireAfterDays { get; set; } + public string MajorVersionLimit { get; set; } + public string Description { get; set; } + } } From 17145848f86935f67c0c8338ebc1d060eb9a2dbd Mon Sep 17 00:00:00 2001 From: Jenny Wu Date: Sun, 8 Oct 2023 11:39:34 -0700 Subject: [PATCH 3/5] Resolve comment --- .../Model/SharePoint/SiteVersionPolicy.cs | 42 +++++++++++++++++++ src/Commands/Site/GetSite.cs | 12 +----- 2 files changed, 44 insertions(+), 10 deletions(-) create mode 100644 src/Commands/Model/SharePoint/SiteVersionPolicy.cs diff --git a/src/Commands/Model/SharePoint/SiteVersionPolicy.cs b/src/Commands/Model/SharePoint/SiteVersionPolicy.cs new file mode 100644 index 000000000..c8b28259c --- /dev/null +++ b/src/Commands/Model/SharePoint/SiteVersionPolicy.cs @@ -0,0 +1,42 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace PnP.PowerShell.Commands.Model.SharePoint +{ + /// + /// The VersionPolicy setting on site + /// The new document libraries use the setting on site if it is set + /// Otherwise, it uses the setting on tenant + /// + public class SiteVersionPolicy + { + /// + /// Site Url + /// + public string Url { get; set; } + + /// + /// Site DefaultTrimMode + /// e.g. AutoExpiration, ExpireAfter, NoExpiration + /// + public string DefaultTrimMode { get; set; } + + /// + /// Site DefaultExpireAfterDays + /// + public string DefaultExpireAfterDays { get; set; } + + /// + /// Site MajorVersionLimit + /// + public string MajorVersionLimit { get; set; } + + /// + /// Results description + /// + public string Description { get; set; } + } +} diff --git a/src/Commands/Site/GetSite.cs b/src/Commands/Site/GetSite.cs index d8ef737be..813729077 100644 --- a/src/Commands/Site/GetSite.cs +++ b/src/Commands/Site/GetSite.cs @@ -3,6 +3,7 @@ using System; using System.Linq.Expressions; using System.Management.Automation; +using PnP.PowerShell.Commands.Model.SharePoint; namespace PnP.PowerShell.Commands.Site { @@ -22,7 +23,7 @@ protected override void ExecuteCmdlet() { site.EnsureProperties(s => s.Url, s => s.VersionPolicyForNewLibrariesTemplate, s => s.VersionPolicyForNewLibrariesTemplate.VersionPolicies); - var vp = new VersionPolicy(); + var vp = new SiteVersionPolicy(); vp.Url = site.Url; if (site.VersionPolicyForNewLibrariesTemplate.VersionPolicies.ServerObjectIsNull == true) @@ -64,13 +65,4 @@ protected override void ExecuteCmdlet() } } } - - public class VersionPolicy - { - public string Url { get; set; } - public string DefaultTrimMode { get; set; } - public string DefaultExpireAfterDays { get; set; } - public string MajorVersionLimit { get; set; } - public string Description { get; set; } - } } From e501b03b364615c7ac7499cfab400ad4ec1c3585 Mon Sep 17 00:00:00 2001 From: Jenny Wu Date: Sun, 8 Oct 2023 21:10:29 -0700 Subject: [PATCH 4/5] Add a new command Get-PnPSiteVersionPolicy, revert the change in Get-PnPSite --- documentation/Get-PnPSite.md | 20 ------- documentation/Get-PnPSiteVersionPolicy.md | 53 ++++++++++++++++++ .../Model/SharePoint/SiteVersionPolicy.cs | 4 +- src/Commands/Site/GetSite.cs | 52 +----------------- src/Commands/Site/GetSiteVersionPolicy.cs | 55 +++++++++++++++++++ 5 files changed, 113 insertions(+), 71 deletions(-) create mode 100644 documentation/Get-PnPSiteVersionPolicy.md create mode 100644 src/Commands/Site/GetSiteVersionPolicy.cs diff --git a/documentation/Get-PnPSite.md b/documentation/Get-PnPSite.md index b648909d0..1a6391626 100644 --- a/documentation/Get-PnPSite.md +++ b/documentation/Get-PnPSite.md @@ -38,12 +38,6 @@ Get-PnPSite -Includes RootWeb,ServerRelativeUrl Gets the current site specifying to include RootWeb and ServerRelativeUrl properties. For the full list of properties see https://learn.microsoft.com/previous-versions/office/sharepoint-server/ee538579(v%3doffice.15) -### EXAMPLE 3 -```powershell -Get-PnPSite -GetVersionPolicy -``` -Get site level version policy settings. - ## PARAMETERS ### -Connection @@ -60,20 +54,6 @@ Accept pipeline input: False Accept wildcard characters: False ``` -### -GetVersionPolicy -Get site level version policy settings. - -```yaml -Type: SwitchParameter -Parameter Sets: (All) - -Required: False -Position: Named -Default value: None -Accept pipeline input: False -Accept wildcard characters: False -``` - ## RELATED LINKS [Microsoft 365 Patterns and Practices](https://aka.ms/m365pnp) diff --git a/documentation/Get-PnPSiteVersionPolicy.md b/documentation/Get-PnPSiteVersionPolicy.md new file mode 100644 index 000000000..994a84836 --- /dev/null +++ b/documentation/Get-PnPSiteVersionPolicy.md @@ -0,0 +1,53 @@ +--- +Module Name: PnP.PowerShell +schema: 2.0.0 +applicable: SharePoint Online +online version: https://pnp.github.io/powershell/cmdlets/Get-PnPSiteVersionPolicy.html +external help file: PnP.PowerShell.dll-Help.xml +title: Get-PnPSiteVersionPolicy +--- + +# Get-PnPSiteVersionPolicy + +## SYNOPSIS +Get version policy setting of the site. + +## SYNTAX + +```powershell +Get-PnPSiteVersionPolicy [-Connection ] +``` + +## DESCRIPTION +This cmdlet allows retrieval of version policy setting on the site. When the new document libraries are created, they will be set as the version policy of the site. +If the version policy is not set on the site, the setting of the tenant will be used. + +## EXAMPLES + +### EXAMPLE 1 +```powershell +Get-PnPSiteVersionPolicy +``` + +Returns the version policy setting of the site. + +## PARAMETERS + +### -Connection +Optional connection to be used by the cmdlet. Retrieve the value for this parameter by either specifying -ReturnConnection on Connect-PnPOnline or by executing Get-PnPConnection. + +```yaml +Type: PnPConnection +Parameter Sets: (All) + +Required: False +Position: Named +Default value: None +Accept pipeline input: False +Accept wildcard characters: False +``` + +## RELATED LINKS + +[Microsoft 365 Patterns and Practices](https://aka.ms/m365pnp) +[Microsoft Docs documentation](https://learn.microsoft.com/sharepoint/dev/solution-guidance/modern-experience-site-classification#programmatically-read-the-classification-of-a-site) \ No newline at end of file diff --git a/src/Commands/Model/SharePoint/SiteVersionPolicy.cs b/src/Commands/Model/SharePoint/SiteVersionPolicy.cs index c8b28259c..8f1659ec6 100644 --- a/src/Commands/Model/SharePoint/SiteVersionPolicy.cs +++ b/src/Commands/Model/SharePoint/SiteVersionPolicy.cs @@ -8,8 +8,8 @@ namespace PnP.PowerShell.Commands.Model.SharePoint { /// /// The VersionPolicy setting on site - /// The new document libraries use the setting on site if it is set - /// Otherwise, it uses the setting on tenant + /// When the new document libraries are created, they will be set as the version policy of the site. + /// If the version policy is not set on the site, the setting on the tenant will be used. /// public class SiteVersionPolicy { diff --git a/src/Commands/Site/GetSite.cs b/src/Commands/Site/GetSite.cs index 813729077..fafd6c303 100644 --- a/src/Commands/Site/GetSite.cs +++ b/src/Commands/Site/GetSite.cs @@ -3,7 +3,6 @@ using System; using System.Linq.Expressions; using System.Management.Automation; -using PnP.PowerShell.Commands.Model.SharePoint; namespace PnP.PowerShell.Commands.Site { @@ -11,58 +10,13 @@ namespace PnP.PowerShell.Commands.Site [OutputType(typeof(Microsoft.SharePoint.Client.Site))] public class GetSite : PnPRetrievalsCmdlet { - [Parameter(Mandatory = false)] - public SwitchParameter GetVersionPolicy; - protected override void ExecuteCmdlet() { DefaultRetrievalExpressions = new Expression>[] { s => s.Url, s => s.CompatibilityLevel }; var site = ClientContext.Site; - - if (ParameterSpecified(nameof(GetVersionPolicy))) - { - site.EnsureProperties(s => s.Url, s => s.VersionPolicyForNewLibrariesTemplate, s => s.VersionPolicyForNewLibrariesTemplate.VersionPolicies); - - var vp = new SiteVersionPolicy(); - vp.Url = site.Url; - - if (site.VersionPolicyForNewLibrariesTemplate.VersionPolicies.ServerObjectIsNull == true) - { - vp.Description = "No Site Level Policy Set"; - } - else - { - site.EnsureProperties(s => s.VersionPolicyForNewLibrariesTemplate, s => s.VersionPolicyForNewLibrariesTemplate.MajorVersionLimit, s => s.VersionPolicyForNewLibrariesTemplate.VersionPolicies); - - vp.DefaultTrimMode = site.VersionPolicyForNewLibrariesTemplate.VersionPolicies.DefaultTrimMode.ToString(); - - if (site.VersionPolicyForNewLibrariesTemplate.VersionPolicies.DefaultTrimMode == VersionPolicyTrimMode.AutoExpiration) - { - vp.Description = "Site has Automatic Policy Set"; - } - else - { - if (site.VersionPolicyForNewLibrariesTemplate.VersionPolicies.DefaultTrimMode == VersionPolicyTrimMode.ExpireAfter) - { - vp.DefaultExpireAfterDays = site.VersionPolicyForNewLibrariesTemplate.VersionPolicies.DefaultExpireAfterDays.ToString(); - vp.Description = "Site has Manual settings with specific count and time limits"; - } - else if (site.VersionPolicyForNewLibrariesTemplate.VersionPolicies.DefaultTrimMode == VersionPolicyTrimMode.NoExpiration) - { - vp.Description = "Site has Manual settings with specific version count limit and no time limits"; - } - vp.MajorVersionLimit = site.VersionPolicyForNewLibrariesTemplate.MajorVersionLimit.ToString(); - } - } - - WriteObject(vp); - } - else - { - ClientContext.Load(site, RetrievalExpressions); - ClientContext.ExecuteQueryRetry(); - WriteObject(site); - } + ClientContext.Load(site, RetrievalExpressions); + ClientContext.ExecuteQueryRetry(); + WriteObject(site); } } } diff --git a/src/Commands/Site/GetSiteVersionPolicy.cs b/src/Commands/Site/GetSiteVersionPolicy.cs new file mode 100644 index 000000000..a1f676293 --- /dev/null +++ b/src/Commands/Site/GetSiteVersionPolicy.cs @@ -0,0 +1,55 @@ +using Microsoft.SharePoint.Client; + +using System; +using System.Linq.Expressions; +using System.Management.Automation; +using PnP.PowerShell.Commands.Model.SharePoint; + +namespace PnP.PowerShell.Commands.Site +{ + [Cmdlet(VerbsCommon.Get, "PnPSiteVersionPolicy")] + [OutputType(typeof(PnP.PowerShell.Commands.Model.SharePoint.SiteVersionPolicy))] + public class GetSiteVersionPolicy : PnPSharePointCmdlet + { + protected override void ExecuteCmdlet() + { + ClientContext.Load(ClientContext.Site, s => s.Url, s => s.VersionPolicyForNewLibrariesTemplate, s => s.VersionPolicyForNewLibrariesTemplate.VersionPolicies); + ClientContext.ExecuteQueryRetry(); + var site = ClientContext.Site; + + var vp = new SiteVersionPolicy(); + vp.Url = site.Url; + + if (site.VersionPolicyForNewLibrariesTemplate.VersionPolicies.ServerObjectIsNull == true) + { + vp.Description = "No Site Level Policy Set"; + } + else + { + site.EnsureProperties(s => s.VersionPolicyForNewLibrariesTemplate, s => s.VersionPolicyForNewLibrariesTemplate.MajorVersionLimit, s => s.VersionPolicyForNewLibrariesTemplate.VersionPolicies); + + vp.DefaultTrimMode = site.VersionPolicyForNewLibrariesTemplate.VersionPolicies.DefaultTrimMode.ToString(); + + if (site.VersionPolicyForNewLibrariesTemplate.VersionPolicies.DefaultTrimMode == VersionPolicyTrimMode.AutoExpiration) + { + vp.Description = "Site has Automatic Policy Set"; + } + else + { + if (site.VersionPolicyForNewLibrariesTemplate.VersionPolicies.DefaultTrimMode == VersionPolicyTrimMode.ExpireAfter) + { + vp.DefaultExpireAfterDays = site.VersionPolicyForNewLibrariesTemplate.VersionPolicies.DefaultExpireAfterDays.ToString(); + vp.Description = "Site has Manual settings with specific count and time limits"; + } + else if (site.VersionPolicyForNewLibrariesTemplate.VersionPolicies.DefaultTrimMode == VersionPolicyTrimMode.NoExpiration) + { + vp.Description = "Site has Manual settings with specific version count limit and no time limits"; + } + vp.MajorVersionLimit = site.VersionPolicyForNewLibrariesTemplate.MajorVersionLimit.ToString(); + } + } + + WriteObject(vp); + } + } +} From 83b8364d4166f0ce31f8c41eafc0bd363328c015 Mon Sep 17 00:00:00 2001 From: Koen Zomers Date: Fri, 13 Oct 2023 17:15:58 +0200 Subject: [PATCH 5/5] Added changelog entry --- CHANGELOG.md | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 69b76c46c..eb4a2cba5 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -33,6 +33,7 @@ The format is based on [Keep a Changelog](http://keepachangelog.com/en/1.0.0/). - Added option to pass in a Stream or XML string to `Read-PnPTenantTemplate` allowing the tenant template to be modified before being applied. [#3431](https://github.com/pnp/powershell/pull/3431) - Added `Get-PnPTenantInfo` which allows retrieving tenant information by its Id or domain name. [#3414](https://github.com/pnp/powershell/pull/3414) - Added option to create a Microsoft 365 Group with dynamic membership by passing in `-DynamicMembershipRule` [#3426](https://github.com/pnp/powershell/pull/3426) +- Added `Get-PnPSiteVersionPolicy` which allows retrieval of the version policy settings for a site [#3470](https://github.com/pnp/powershell/pull/3470) ### Fixed