365Fanatic / M365 Roadmap / PnP PowerShell
Community solution

PnP PowerShell releases

PnP PowerShell changelog of stable releases (no nightlies), refreshed from GitHub. SharePoint PowerShell via the PnP.PowerShell module — copy Install-Module PnP.PowerShell for the version you need.

Last updated: 15 okt 2026, 12:00 CEST · latest stable 3.4.1

Need help? Read our PnP PowerShell guides: installing, connecting and authenticating. →
What is this? PnP PowerShell is an open-source cross-platform PowerShell module for managing Microsoft 365 (M365), maintained by the Microsoft 365 & Power Platform community. It is not a Microsoft product and is not covered by Microsoft support. Release notes are summarised here; the full notes and issue tracker live on GitHub.

Install or update

The module is distributed through the PowerShell Gallery, so there is no package to download here.

PowerShell
Install-Module PnP.PowerShell -Scope CurrentUser
PowerShell
Update-Module PnP.PowerShell

View on the PowerShell Gallery →

Frequent errors and how to fix them

The term 'Connect-PnPOnline' is not recognized
Install on PowerShell 7, close the window, Import-Module PnP.PowerShell.
not compatible with Windows PowerShell 5.1
Current PnP.PowerShell runs on pwsh only, not powershell.exe.
AADSTS700016 / Application not found
Own Entra app required since Sep 2024. Register-PnPEntraIDApp or create it in Entra.
AADSTS65001 / consent
Entra → the app → API permissions → Grant admin consent.
Access denied / unauthorized operation
Graph or SharePoint scopes missing, or Sites.Selected is not granted on this site.
Please specify a valid client id for an Entra ID App Registration
Since 9 Sep 2024 only with your own Entra ID app: Register-PnPEntraIDAppForInteractiveLogin, then Connect-PnPOnline with -ClientId. Step by step.
Assembly with the same name already loaded
Uninstall-Module PnP.PowerShell -AllVersions, install one version, new window.
RSS Click to subscribe

Set filters first, then copy the link. Do not open it in Chrome.

Or open directly: Feedly Inoreader

Releases

3.4.1

3.4.1 Latest

Install this version

PowerShell
Install-Module PnP.PowerShell -RequiredVersion 3.4.1 -Scope CurrentUser

Changed

  • Changed Resolve-PnPFolder to create a path in -SiteRelativePath which does not exist yet, instead of failing with File Not Found., and to return the folder with its properties and the Title of the folders it creates populated as it did before 3.4.0. A folder name ending on a period is now rejected, and a path already carrying the server relative url of the web is accepted. #5448
  • Changed Remove-PnPFile, Rename-PnPFile and Reset-PnPFileVersion to act on the file the url points at when its name carries a sequence such as %20 literally, which for the first two meant deleting or renaming a differently named file while reporting success. #5449
  • Changed Remove-PnPEntraIDServicePrincipalAppRoleAssignment to simulate rather than perform the removal when -Force and -WhatIf are combined, as -Force short circuited the ShouldProcess call it was guarded by. #5449

Contributors

  • Gautam Sheth [gautamdsheth]
  • [till-llit]

Full release notes on GitHub →

3.4.0

3.4.0

Install this version

PowerShell
Install-Module PnP.PowerShell -RequiredVersion 3.4.0 -Scope CurrentUser

Added

  • Added -List to Get-PnPStoredCredential to enumerate the names of the stored PnP credentials without requiring a credential name. #5445
  • Added Test-PnPSiteTemplate to validate the schema, internal structure and packaged resources of a PnP site template without applying it. #5444
  • Added -EnableSensitivityLabelForOneNote and -EnableSensitivityLabelForVideoFiles parameters to Set-PnPTenant. #5442
  • Added Test-PnPConnectionPermission which compares the current connection's access token claims with the permission metadata of a PnP PowerShell cmdlet. #5428
  • Added ApiPermissionsDependOnResource attribute for cmdlets of which the required permissions follow from the resource they are pointed at or from how they are invoked, and applied it to Get-PnPGraphSubscription, New-PnPGraphSubscription, Set-PnPGraphSubscription, Remove-PnPGraphSubscription, Invoke-PnPGraphMethod, New-PnPSite, Set-PnPSiteClassification and Sync-PnPSharePointUserProfilesFromAzureActiveDirectory. #5427
  • Added ApiPermissionsNotRequired attribute for cmdlets which need no permissions on the application registration PnP PowerShell connects with, and applied it to Get-PnPConnection, Get-PnPContext, Set-PnPContext, Get-PnPPowerShellTelemetryEnabled, Enable-PnPPowerShellTelemetry, Disable-PnPPowerShellTelemetry, Register-PnPEntraIDApp and Register-PnPEntraIDAppForInteractiveLogin. #5427
  • Added Get-PnPCommandPermission cmdlet which returns the delegated and application API permissions and the minimum SharePoint role required to run a cmdlet. #5427
  • Added Add-PnPTenantSearchCrawledProperty cmdlet which allows creation of a tenant level crawled property for SharePoint Online search. #5373
  • Added GitLab CI/CD support to Connect-PnPOnline -FederatedIdentity. #5395
  • Added PreferredDataLocation support to Set-PnPMicrosoft365Group and documented it for Get-PnPMicrosoft365Group and New-PnPMicrosoft365Group. #5402
  • Added Standard and EDU_Staff template support to New-PnPTeamsTeam and provision Teams templates through Microsoft Graph team templates. Note that EDU_Class and EDU_PLC are now also provisioned through Microsoft Graph team templates (POST /teams) instead of the previous Microsoft 365 Group creation and teamify flow. #999
  • Added -ExchangeApplicationPermissions, -ExchangeDelegatePermissions, -PowerBIApplicationPermissions, -PowerBIDelegatePermissions, -DataverseDelegatePermissions, -PowerAppsDelegatePermissions, -AzureServiceManagementDelegatePermissions and -ResourcePermissions to Register-PnPEntraIDApp, the last one to request permissions on any other API. #5424

Changed

  • Changed Connect-PnPOnline -FederatedIdentity to acquire its access token through MSAL so that it is cached and renewed instead of being minted on every call, which fixes SharePoint failing with an HTTP 401 after roughly an hour because the CSOM requests kept using the token acquired at connect time. -AzureEnvironment is now also honoured for the Entra ID login endpoint, the Microsoft Graph endpoint and the token exchange audience, so that this connection method works outside of the commercial cloud. #5446
  • Changed Set-PnPSiteSensitivityLabel to resolve a label name through the current Microsoft Graph sensitivity labels API instead of the deprecated information protection labels API that Microsoft has announced will stop returning data. #5440
  • Changed Get-PnPTenantRetentionLabel to call the generally available v1.0 Microsoft Graph retention label endpoint instead of the beta one. #5440
  • Changed Set-PnPListItem, Add-PnPListItem, Add-PnPFile and Copy-PnPFileMetadata to retrieve only the fields named in -Values instead of the full field collection of the list, when not passing -Batch, which retrieves the field collection once for the whole batch. #5437
  • Changed Get-PnPListItem to report what can be done about a query SharePoint refuses for projecting more than 12 lookup, person or managed metadata columns through -Fields or -Query. #5437
  • Changed Get-PnPSiteTemplate, Get-PnPTenantTemplate, Invoke-PnPTenantTemplate and Export-PnPPage to fail on a -Configuration which cannot be read, holds a null, or names no recognized handler, and to warn about a property or handler it does not recognize, instead of ignoring these and processing everything. #5434
  • Changed Register-PnPEntraIDApp and Register-PnPEntraIDAppForInteractiveLogin to register exactly the requested permissions. An invocation whose permissions were all silently dropped, such as -Scopes holding only delegated permissions, previously fell back to the default permission set, so the resulting app can differ from before for the same command line. #5424
  • Changed Register-PnPEntraIDApp and Register-PnPEntraIDAppForInteractiveLogin to no longer accept permissions that their resource has retired or disabled, as those can never be granted. This covers the TeamsApp.*, Approval.*, ApprovalRequest.*, SensitiveInfoType.*, Place.Read, Place.Read.Shared, Place.ReadWrite, ChannelMessage.Delete, DataLossPreventionPolicy.Evaluate and AgentCard.* Microsoft Graph permissions and the ThreatIntelligence.Read and ActivityReports.Read Office 365 Management APIs permissions. #5424
  • Changed Export-PnPFlow -AsZipPackage and Export-PnPPowerApp to ask for confirmation before overwriting an existing file when -OutPath is omitted, as they already did when -OutPath is specified. Unattended scripts that rely on the previous silent overwrite need to specify -Force. #5421

Fixed

  • Fixed Get-Help <cmdlet> -Online opening the PnP PowerShell landing page instead of the documentation page of the cmdlet, for every cmdlet in the module. #5443
  • Fixed Get-PnPTenantRetentionLabel returning nothing at all when any retention label in the tenant uses a value the module did not know about, such as the relabel action after the retention period. #5440
  • Fixed Request-PnPPersonalSite polling the operation when -NoWait was specified and returning immediately when it was not, which is the opposite of what the parameter describes and of what the other cmdlets taking -NoWait do. #4329
  • Fixed Set-PnPListItem, Add-PnPListItem, Add-PnPFile and Copy-PnPFileMetadata failing with The specified user could not be found. when a person column in -Values is given a user id as a number instead of as a string, in both the direct and the -Batch code path. #5437
  • Fixed Set-PnPListItem, Add-PnPListItem, Add-PnPFile and Copy-PnPFileMetadata failing with Column 'x' does not exist. when a column in -Values is referenced by its display name instead of its internal name, which previously only worked for managed metadata columns. #5437
  • Fixed Get-PnPFolderInFolder, Get-PnPEventReceiver, Get-PnPGroup, Get-PnPRecycleBinItem and Set-PnPTerm accepting -Includes and then discarding it, so properties which are not returned by default, such as ParentFolder on a folder, came back as an empty object instead of being populated. #5436
  • Fixed Get-PnPSiteTemplate, Get-PnPTenantTemplate, Invoke-PnPTenantTemplate and Export-PnPPage throwing a NullReferenceException when -Configuration could not be read or was $null. #5434
  • Fixed Disconnect-PnPOnline never removing the private key container which loading a certificate leaves behind, so every certificate based connect permanently added a private key file to the profile of the user. Certificates are loaded with X509KeyStorageFlags.UserKeySet, which places the key container under %APPDATA%\Microsoft\Crypto, while only the machine wide %ProgramData%\Microsoft\Crypto\RSA\MachineKeys was looked at, so the removal silently found nothing to do. Both locations are now checked, Connect-PnPOnline -CertificateBase64Encoded takes part in the cleanup as -CertificatePath already did, and a removal which does not succeed is written to the debug log rather than being swallowed. #5433
  • Fixed New-PnPAzureCertificate -OutPfx and Register-PnPEntraIDApp -OutPath writing the PFX holding the private key using the default permissions of the process on Linux and macOS, which the usual umask leaves readable by every local account. The file is now created readable and writable by its owner only. The accompanying CER file holds no private key and keeps the default permissions. #5433
  • Fixed Connect-PnPOnline -CertificatePath keeping the certificate file open for as long as the PowerShell session lived, which prevented the file from being moved, replaced or deleted and leaked a file handle on every connect. The same read could also return fewer bytes than the file holds and have the resulting truncated certificate reported as being corrupt or password protected. #5433
  • Fixed Get-PnPTenantDeletedSite failing to fetch the additional details of a site whose url contains an ampersand, as the url was placed into the CAML query without being escaped. #5433
  • Fixed Get-PnPListItemAttachment combining the file name returned by the server with -Path without reducing it to its file name part first, which meant a rooted value would have silently replaced the path that was asked for. #5433

Contributors

  • [svermaark]
  • Fabian Hutzli [fabianhutzli]
  • [reusto]
  • Patrick Schneider [pschneid]

Full release notes on GitHub →

3.3.0

3.3.0

Install this version

PowerShell
Install-Module PnP.PowerShell -RequiredVersion 3.3.0 -Scope CurrentUser

Added

  • Added Get-PnPUserOneDriveLocation cmdlet to retrieve SharePoint Online multi-geo location details for a user's OneDrive personal site. #5382
  • Added Remove-PnPGeoAdministrator cmdlet to remove SharePoint Online geo administrators. #5380
  • Added Get-PnPGeoAdministrator cmdlet to retrieve SharePoint Online geo administrators. #5378
  • Added Add-PnPGeoAdministrator cmdlet to add SharePoint Online multi-geo administrators. #5381
  • Added Get-PnPMultiGeoExperience cmdlet to retrieve the SharePoint Online multi-geo experience mode. #5372
  • Added Set-PnPMultiGeoExperience cmdlet to upgrade the tenant multi-geo experience to include SharePoint Online Multi-Geo. #5369
  • Added Set-PnPMultiGeoCompanyAllowedDataLocation cmdlet to start setting up a SharePoint Online multi-geo allowed data location. #5368
  • Added Remove-PnPMultiGeoCompanyAllowedDataLocation cmdlet to delete a SharePoint Online multi-geo allowed data location. #5379
  • Added Get-PnPGeoStorageQuota cmdlet to retrieve SharePoint Online multi-geo storage quota details. #5371
  • Added Set-PnPGeoStorageQuota cmdlet to set SharePoint Online multi-geo storage quotas. #5370
  • Added Get-PnPSiteContentMoveState cmdlet to retrieve SharePoint Online site content move states. #5365
  • Added Stop-PnPSiteContentMove cmdlet to stop SharePoint Online multi-geo site content move jobs. #5366

Changed

  • Added properties CoreOrganizationSharingLinkRecommendedExpirationInDays, CoreOrganizationSharingLinkMaxExpirationInDays,RestrictResourceAccountAccess, RestrictExternalSharingForAgents to Set-PnPTenant and Get-PnPTenant cmdlet. #5330
  • Added properties OrganizationSharingLinkRecommendedExpirationInDays, OrganizationSharingLinkMaxExpirationInDays, OverrideTenantOrganizationSharingLinkExpirationPolicy to Set-PnPSite, Set-PnPTenantsite cmdlets. #5333
  • Added WhoCanShareAllowListInTenantByPrincipalIdentity property to Set-PnPTenant cmdlet. #5322
  • Add/Set/Get/Remove-PnPVivaConnectionsDashboardACE cmdlets no longer check the home site, they will work on any communication or modern team sites. #5351
  • Added -BuiltIn parameter to Get-PnPSiteDesign cmdlet to fetch OOTB site designs. #5358

Fixed

  • Remove-PnPEntraIDServicePrincipalAssignedAppRole cmdlet now works properly if -AppRole is specified. #5353
  • Add-PnPTeamsChannel and Add-PnPTeamsChannelUser cmdlet now support ChannelMember.ReadWrite.All and ChannelMember.ReadWrite.Group permissions as well. #5353
  • Fixed issue with Set-PnPListItem and other SharePoint cmdlets as ClientContext is now processed more correctly when used in combination with other related cmdlets. #5354

Contributors

  • Reshmee Auckloo [reshmee011]
  • [Tetronic]
  • Vasco Azevedo [vascoazevedo08]
  • Fabian Hutzli [fabianhutzli]
  • Koen Zomers [koenzomers]

Full release notes on GitHub →

3.2.0

3.2.0

Install this version

PowerShell
Install-Module PnP.PowerShell -RequiredVersion 3.2.0 -Scope CurrentUser

Added

  • Added Start-PnPTenantRename cmdlet to schedule SharePoint Online tenant domain rename jobs. #5304
  • Added Get-PnPListVersionPolicy and Set-PnPListVersionPolicy cmdlets to inspect and manage SharePoint Online document library version policies. #5300
  • Added New-PnPSiteManageVersionPolicyJob cmdlet to queue site-level list version policy trim and sync jobs. #5300
  • Added site version policy parameters to Set-PnPSite and Set-PnPTenantSite, including support for inheriting tenant defaults, targeting new or existing document libraries, managing file type overrides, and bypassing confirmation with -Force. #5300
  • Added DisableClassicPageBaselineSecurityMode, DisableSiteBranding, AllowWebPropertyBagUpdateWhenDenyAddAndCustomizePagesIsEnabled, IsAuthoritative, and RestrictedContentDiscoveryForCopilotAndAgents parameters to Set-PnPSite and Set-PnPTenantSite. #5300
  • Added Add-PnPEntraIDServicePrincipalAppRoleAssignment, Get-PnPEntraIDServicePrincipalAppRoleAssignment, and Remove-PnPEntraIDServicePrincipalAppRoleAssignment cmdlets to manage Entra ID user and group enterprise application assignments with app roles #5292
  • Added Copy-PnPFileMetadata to copy Metadata fields (Created, Modified, Author, Editor) between items #5072
  • Added -NewFileName parameter to Convert-PnPFile cmdlet to choose custom output file name.
  • Added -User parameter to Get-PnPTeamsTeam cmdlet to allow fetching list of teams a user has access to.
  • Added Get-PnPBrandCenterFont cmdlet to retrieve the available fonts in the Brand Center #4970
  • Added Add-PnPBrandCenterFontPackage cmdlet to allow creating a font package in the Brand Center #4970
  • Added support for -FederatedIdentity in Connect-PnPOnline to support Federated Identity.

Changed

  • Improved Get-PnPTerm cmdlet to show a better error message. #4933
  • PnP PowerShell now requires PowerShell 7.4.0 or newer
  • Improved Connect-PnPOnline with -DeviceLogin flow, now we don't require users to specify -Tenant parameter, it will be automatically added if not specified.
  • Improved Restore-PnPRecycleBinItem cmdlet to better handle throttling.
  • Logging in using Connect-PnPOnline -PersistentLogin no longer throwing a warning #5082
  • All cmdlets with AzureAD in their name have been renamed to use EntraID instead, to reflect the rebranding of Azure Active Directory to Entra ID. Aliases have been added for backward compatibility. #5221
  • Improved Import-PnPFlow cmdlet to better handle the retry logic between internal API calls, introduced two new optional parameters #5233
  • Update registerapplication.md documentation with latest UIs and update wordings. #5265
  • Added parameter IncreaseRequestTimeout to Get-PnPSearchCrawlLog cmdlet. #5223

Fixed

  • Fix Get-PnPUserOneDriveQuota hanging in some tenants by retrieving the resolved OneDrive site directly instead of using a filtered tenant site query. #5306
  • Fix Get-PnPEntraIDUser to align supported Graph permission metadata, preserve -Select for GUID-based identity lookups, and expose -UseBeta consistently across parameter sets. #5290
  • Fix Set-PnPView -Aggregations parameter not showing aggregations in SharePoint online. #4868
  • Fix -CreateDrive parameter not working correctly in Connect-PnPOnline. #4869
  • Fix Get/Remove/Restore-PnPFileVersion cmdlets to properly handle file names which have encoded values.
  • Fix Get-PnPTenant to load AutofillColumnsCustomModelEnabled, AddressbarLinkPermission and GuestSharingGroupAllowListInTenantByPrincipalIdentity without verbose mapping warnings. #5285
  • Fixed Teams related cmdlets to properly handle quotes in the display name of Teams team.
  • Fix Set-PnPListItem cmdlet to properly handle multi-choice fields when used with batch parameter.
  • Fix Get-PnPCopilotAgent cmdlet to properly handle pagination in large lists.
  • Fix Send-PnPMail cmdlet to send mail via Graph API and SPO. It was facing parameter set issue. #4922
  • Fix Unregister-PnPHubSite cmdlet to properly handle null reference error. #4944
  • Fix Add/Publish/Unpublish/Remove-PnPApp cmdlets to properly handle the issue in no-script sites.

Removed

  • Removed -RemoveExisting parameter from Add-PnPAzureADGroupMember, Add-PnPAzureADGroupOwner, Add-PnPMicrosoft365GroupMember and Add-PnPMicrosoft365GroupOwner cmdlets. It was never really implemented and without function. #5153

Contributors

  • James May [fowl2]
  • Kinga [kkazala]
  • Noel Tautges [NoelTautges]
  • Nishkalank Bezawada [NishkalankBezawada]
  • Irving [irvcov]
  • Koen Zomers [koenzomers]
  • Janne Holm [jhholm]
  • Marc D Anderson [sympmarc]
  • [abwlodar]
  • Reshmee Auckloo [reshmee011]
  • [wuxiaojun514]
  • [pajeffery]

Full release notes on GitHub →

3.1.0

3.1.0

Install this version

PowerShell
Install-Module PnP.PowerShell -RequiredVersion 3.1.0 -Scope CurrentUser

Fixed

  • Fixed issues with cmdlets not being able to read embedded resources

Contributors

  • Erwin van Hunen [erwinvanhunen]
  • Bert Jansen [jansenbe]

Full release notes on GitHub →

3.0.0

3.0.0

Install this version

PowerShell
Install-Module PnP.PowerShell -RequiredVersion 3.0.0 -Scope CurrentUser

Added

  • Added -PersistLogin on Connect-PnPOnline which will utilize a persist cache containing your access token. The cache is encrypted and stored in a subfolder in your $HOME folder on Windows. On MacOS the cache is stored in the encrypted KeyChain. You only have to specify -PersistLogin once when doing a Connect-PnPOnline, after that the cache entry will be used. The cache is persisted between PowerShell sesions and system reboots. To clear an entry from the cache use Disconnect-PnPOnline -ClearPersistedLogin.
  • Added tab completers for all cmdlets using a ListPipeBind parameter (e.g. Get-PnPList -Identity), all cmdlets using a FieldPipeBind parameter (e.g. Get-PnPField -Identity), Get-PnPPropertyBag, ContentType related cmdlets (Get-PnPContentType etc.) and Page related (Get-PnPPage etc.) cmdlets. The argument lookup will timeout after 2 seconds. This value can controlled by setting an environment variables called "PNPPSCOMPLETERTIMEOUT" and set the value to a number specifying milliseconds (e.g. 2000 is 2 seconds). If you want to disable the completer functionality on tabs, set the timeout value to 0 (zero).
  • Added Reset-PnPDocumentID cmdlet to request resetting the document ID for a document #4238
  • Added Reset-PnPDocumentID cmdlet to request resetting the document IDs for all documents in a library using a specific content type #4755
  • Added Get-PnPPrivilegedIdentityManagementEligibleAssignment, Get-PnPPrivilegedIdentityManagementRole and Enable-PnPPrivilegedIdentityManagement cmdlets to allow scripting of enabling Privileged Identity Management roles for a user #4039
  • Added Add-PnPTenantRestrictedSearchAllowedList which allows setting up a list of allowed URLs for Restricted SharePoint Search #3993
  • Added optional -IsCopilotSearchable to Add-PnPOrgAssetsLibrary which allows for an organizational assets library to be accessible to Microsoft 365 CoPilot for searching corporate images #4254
  • Added Set-PnPOrgAssetsLibrary cmdlet which allows for updating the settings of an existing organizational assets library #4254
  • Added additional Graph permissions to the GraphPermissions parameter set. #4283
  • Added -SignInAudience parameter to Register-PnPEntraIDApp and Register-PnPEntraIDAppForInteractiveLogin which allows you to make the EntraID app support creation of multi-tenant apps. #4289
  • Added -OutputInstance parameter to Export-PnPPage cmdlet to allow export of the page as in-memory template. #4323
  • Added -X509KeyStorageFlags parameter to Connect-PnPOnline cmdlet which allows setting of how private keys are to be imported. #4324

Changed

  • PnP PowerShell is now .NET 8.0 based, and requires PowerShell 7.4.6 or newer
  • -Interactive login is now the default.
  • The Popup based authentication for Interactive Login has been removed and replaced by a browser flow
  • -LaunchBrowser has been removed for interactive login
  • -LaunchBrowser for Device Login authentication flows has been renamed to OpenBrowser
  • Rate limiting is now enabled by default for all cmdlets which are being executed under application permissions.
  • Changed the UI experience when logging in with Interactive login and specifying -LaunchBrowser on Connect-PnPOnline. This experience is the default on MacOS.
  • In case of errors when Graph batch method is used, it will now throw a clearer error message about what was the issue. #4327
  • Get-PnPAccessToken, Request-PnPAccessToken and Get-PnPGraphAccessToken output type is changed to Microsoft.IdentityModel.JsonWebTokens.JsonWebToken. Earlier they returned System.IdentityModel.Tokens.Jwt.
  • New-PnPContainerType will temporarily disable standard containers to be created due to changed being applied at Microsoft to allow this to be possible in the future #4125
  • Renamed Get-PnPLabel cmdlet to Get-PnPRetentionLabel. #4387
  • Add-PnPNavigationNode cmdlet updated to now support -OpenInNewTab parameter for different types of navigation. #3969

Fixed

  • Fixed issue with Set-PnPSearchExternalSchema cmdlet when used with the -Wait parameter throwing a warning #4253
  • Fix Get-PnPSearchExternalSchema not returning the label properly for a property linked to 'iconUrl' #4245
  • Fix Restore-PnPListItemVersion cmdlet to also restore fields with TaxonomyFieldType. #4262
  • Fix Set-PnPMicrosoft365GroupSetting cmdlet to not throw runtime error. #4274
  • Fix New-PnPMicrosoft365GroupSetting cmdlet to not throw runtime error. #4277
  • Fix Get-PnPSiteTemplate -PersistMultiLanguageResources not working correctly for xml file types. #4326
  • Fix Add-PnPDataRowsToSiteTemplate setting keyColumn to null when not passed. #4325
  • Fix Connect-PnPOnline not working correctly when -DeviceLogin and -LaunchBrowser both are specified. It used to open it in a popup. Now it correctly launches the browser. #4325
  • Export-PnPUserInfo, Export-PnPUserProfile and Remove-PnPUserProfile cmdlets now work properly with proper -Connection parameter if specified. #4389
  • Fixed Get-PnPAzureADAppSitePermission, Grant-PnPAzureADAppSitePermission and Revoke-PnPAzureADAppSitePermission cmdlets throwing an error when the site URL is not specified and the app registration used only having Graph permissions #4421
  • Fixed Get-PnPTerm cmdlet not working correctly when -ParentTerm parameter is specified. #4454
  • Fixed the PnP PowerShell version check to only check nightly version in nightly builds and major version in release builds. #4453

Removed

  • Removed -LaunchBrowser, -NoPopup and credential based auth on Register-PnPEntraIDApp and Register-PnPEntraIDAppForInteractiveLogin cmdlets. The default auth method is now Interactive.
  • Removed -LaunchBrowser option on Connect-PnPOnline for interactive logins and device logins as it is default now and the popup based authentication window has been removed.
  • Removed -UseWebLogin option on Connect-PnPOnline. It used a very old, questionable approach to authentication. Use -Interactive or if you require an ACS connection -ClientId and -ClientSecret
  • Removed Invoke-PnPTransformation cmdlet as it was never supported.
  • Removed Publish-PnPCompanyApp cmdlet as it was not supported anymore. #4387
  • Removed -UserVoiceForFeedbackEnabled parameter from Set-PnPTenant cmdlet as it was obsolete. #4387
  • Removed Set-PnPLabel and Reset-PnPLabel aliases. You need to use Set-PnPRetentionLabel and Reset-PnPRetentionLabel respectively. #4387
  • Removed Get-PnPPowerPlatformConnector alias. You need to use Get-PnPPowerPlatformCustomConnector. #4387
  • Removed -IsFavoriteByDefault parameter from Add-PnPTeamsChannel cmdlet. It was obsolete and not supported by Graph API. #4387
  • Removed Get-PnPAppAuthAccessToken , Remove-PnPGraphAccessToken and Request-PnPAccessToken cmdlets. Use Get-PnPAccessToken instead. #4398
  • Removed support for sending mail via SMTP in Send-PnPMail. It's usage is not recommended by .NET due to its lack of support for modern protocols.
  • Removed -Title and -Header parameters from Remove-PnPNavigationNode. They were marked obsolete.

Contributors

  • [svermaak]
  • [PitSysAdmin]
  • Abhijeet Jadhav [TekExpo]
  • [abwlodar]
  • [jgfgoncalves]
  • Stephen Cox [stephen-cox-nzx]
  • Marijn Somers [Marijnsomers]
  • Janne Holm [jhholm]
  • Paul Bullock [pkbullock]
  • Arjan Cornelissen [arjancornelissen]
  • Konrad K. [wilecoyotegenius]
  • Antti K. Koskela [koskila]

Full release notes on GitHub →

2.12.0

2.12.0

Install this version

PowerShell
Install-Module PnP.PowerShell -RequiredVersion 2.12.0 -Scope CurrentUser

Added

  • Added support for WAM login for Windows OS to support Windows Hello, FIDO keys, Conditional Access policies and other secure authentication modes.
  • Added -SkipCertCreation parameter in Register-PnPAzureADApp cmdlet to prevent creation and uploading of certificates in the Entra ID app.
  • Added support to -ValidateConnection in managed identity authentication.
  • Added New-PnPSearchExternalConnection, Get-PnPSearchExternalConnection, Set-PnPSearchExternalConnection and Remove-PnPSearchExternalConnection cmdlets to manage external connections for Microsoft Search #4231
  • Added Get-PnPSearchExternalSchema and Set-PnPSearchExternalSchema cmdlets to manage the schema for external connections for Microsoft Search #4231
  • Added OverrideSharingCapability, RequestFilesLinkExpirationInDays & RequestFilesLinkEnabled parameters to Set-PnPTenantSite cmdlet.

Changed

  • *Release due to deprecation/shutdown of support for the PnP Management Shell* Refer to https://pnp.github.io/powershell/articles/registerapplication.html on how to registration your own application
  • Added output for clientid/Entra App Id when using -Verbose with Connect-PnPOnline
  • Added -OutputTask switch to Add-PnPPlannerTask cmdlet which will return the just created task so inspect its ID, ETag, etc. values.
  • Improved Invoke-PnPGraphMethod cmdlet now to also support a hashtable value for the AdditionalHeaders parameter besides the current Dictionary<string,string>. See documentation.
  • Improved managed identity authentication for connecting to different M365 services.
  • Improved error message for Export-PnPPage cmdlet when the page doesn't exist.
  • Improved Register-PnPEntraIDApp & Register-PnPEntraIDAppForInteractiveLogin cmdlets to better work in non-commercial cloud environments.
  • Improved Get-PnPDiagnostics cmdlet to properly handle a scenrio where there's no correlationId.

Fixed

  • Removed version check dependency on version.txt located in Github repo. Use metadata from powershellgallery.com instead.
  • Fix issue with Get-PnPDiagnostics cmdlet not working correctly if CorrelationId is null.
  • Fix issue with App-only authentication not properly fetching tokens.
  • Fix issue with Power Platform cmdlets not working correctly in non-commercial cloud environments.
  • Fix issue with Get-PnPFlow not working correctly when -AsAdmin parameter is specified due to API changes. #4244
  • Fix Connect-PnPOnline not returning correct ClientId in the connection object.

Contributors

  • Erwin van Hunen [erwinvanhunen]
  • Giacomo Pozzoni [jackpoz]
  • Nishkalank Bezawada [NishkalankBezawada]
  • Reshmee Auckloo [reshmee011]
  • Koen Zomers [koenzomers]

Full release notes on GitHub →

2.8.0

2.8.0

Install this version

PowerShell
Install-Module PnP.PowerShell -RequiredVersion 2.8.0 -Scope CurrentUser

Added

  • Added in depth verbose logging to all cmdlets which is revealed by adding -Verbose to the cmdlet execution #4023
  • Added -CoreDefaultShareLinkScope and -CoreDefaultShareLinkRole parameters to Set-PnPTenant cmdlet. #4067
  • Added -Identity parameter to the Get-PnPFileSharingLink cmdlet allowing for the retrieval of sharing links based on the file's unique identifier, file instance, listitem instance, or server relative path and supporting retrieval of sharing links for multiple files, such as all in a document library #4093
  • Added Remove-PnPAzureADUser which allows removal of a user from Azure Active Directory / Entra ID #4123
  • Added support for GuestSharingGroupAllowListInTenantByPrincipalIdentity and OneDriveSharingCapability parameters in Set-PnPTenant cmdlet. #4122
  • Added -AsListItem paramter to Get-PnPFolder cmdlet to return as folder as a list item object. #4151
  • Added support for handling $ErrorActionPreference global variable to make it work with PnP PowerShell cmdlets. #4079
  • Added -Folder parameter to Add-PnPDocumentSet cmdlet to allow creation of document sets in a specific folder instead of the list root folder. #4029

Fixed

  • Get-PnPTeamsChannel and Get-PnPTeamsPrimaryChannel returning unknownFutureValue as MembershipType instead of shared #4054
  • Fixed using a AzureADUserPipeBind with New-PnPAzureADUserTemporaryAccessPass, Get-PnPAvailableSensitivityLabel and Set-PnPSearchExternalItem to not work when passing in the User ID GUID #4123
  • Fixed issue with Get-PnPWebHeader cmdlet not working properly in Group connected SharePoint sites. #4147
  • Fixed issue with Get-PnPTeamsChannelFilesFolder cmdlet to work properly for channels having data more than 2 GB. #4127

Changed

  • Fixed Update-PnPTeamsUser cmdlet to throw a better error message when after a user is removed from a Team but is still in the connected M365 group, for the few seconds that the 2 are out of sync. #4068
  • Changed -FileUrl on Get-PnPFileSharingLink to become obsolete. Please switch to using -Identity instead, passing in the same value #4093

Contributors

  • Dan Cecil [danielcecil]
  • Reshmee Auckloo [reshmee011]
  • Giacomo Pozzoni [jackpoz]
  • Koen Zomers [koenzomers]

Full release notes on GitHub →