{"id":4737,"date":"2020-05-31T06:05:48","date_gmt":"2020-05-31T13:05:48","guid":{"rendered":"https:\/\/officedevblogs.wpengine.com\/?p=4737"},"modified":"2020-05-31T06:05:48","modified_gmt":"2020-05-31T13:05:48","slug":"office-365-cli-2-10","status":"publish","type":"post","link":"https:\/\/devblogs.microsoft.com\/microsoft365dev\/office-365-cli-2-10\/","title":{"rendered":"Office 365 CLI v2.10"},"content":{"rendered":"<p>We&#8217;ve just published a new version of the Office 365 CLI with new commands for working with and managing Microsoft 365 tenants and SharePoint Framework projects on any platform.<\/p>\n<h2>Manage Microsoft 365 and SharePoint Framework projects on any platform<\/h2>\n<p>Office 365 CLI is a cross-platform CLI that allows you to manage various configuration settings of Microsoft 365 and SharePoint Framework projects no matter which operating system or shell you use.<\/p>\n<p>While building solutions for Microsoft 365 expands beyond the Windows operating system, managing many of the platform settings is possible only through PowerShell on Windows. As more and more users work on non-Windows machines, it&#8217;s inconvenient for them to have to use a Windows virtual machine to configure their tenants. With the Office 365 CLI, you can configure your tenant no matter which operating system you use. Additionally, using Office 365 CLI, you can manage your SharePoint Framework projects.<\/p>\n<h2>New version of Office 365 CLI &#8211; v2.10<\/h2>\n<p>Following our monthly release cadence, we&#8217;ve released a new version of the Office 365 CLI with some new capabilities.<\/p>\n<h3>New SPFx CodeTour project upgrade report<\/h3>\n<p>Upgrading SharePoint Framework projects from one version to another goes way beyond bumping package version numbers. For some versions, you need to update the contents of some files, for others, you need to remove files or add new ones. Keeping track of all the necessary changes is tedious and not something you should be bothered with. So exactly for this reason, in the Office 365 CLI, we offer a command to help you upgrade your SharePoint Framework projects.<\/p>\n<p>In this release of the Office 365 CLI, we&#8217;re excited to offer you a new report based on the Visual Studio Code CodeTour extension summarizing the changes necessary to upgrade your project. The CodeTour report helps you to understand where in the project exactly you should apply the changes. Additionally, with just a single click, you execute the necessary commands!<\/p>\n<p>&nbsp;<\/p>\n<p><figure id=\"attachment_4739\" aria-labelledby=\"figcaption_attachment_4739\" class=\"wp-caption alignnone\" ><a href=\"https:\/\/officedevblogs.wpengine.com\/wp-content\/uploads\/2020\/05\/office365-cli-visual-studio-code-codetour.png\"><img decoding=\"async\" class=\"wp-image-4739\" src=\"https:\/\/officedevblogs.wpengine.com\/wp-content\/uploads\/2020\/05\/office365-cli-visual-studio-code-codetour-1024x760.png\" alt=\"Visual Studio Code CodeTour report for upgrading SharePoint Framework projects generated using the Office 365 CLI\" width=\"600\" height=\"445\" srcset=\"https:\/\/devblogs.microsoft.com\/microsoft365dev\/wp-content\/uploads\/sites\/73\/2020\/05\/office365-cli-visual-studio-code-codetour-1024x760.png 1024w, https:\/\/devblogs.microsoft.com\/microsoft365dev\/wp-content\/uploads\/sites\/73\/2020\/05\/office365-cli-visual-studio-code-codetour-300x223.png 300w, https:\/\/devblogs.microsoft.com\/microsoft365dev\/wp-content\/uploads\/sites\/73\/2020\/05\/office365-cli-visual-studio-code-codetour-768x570.png 768w, https:\/\/devblogs.microsoft.com\/microsoft365dev\/wp-content\/uploads\/sites\/73\/2020\/05\/office365-cli-visual-studio-code-codetour-1536x1140.png 1536w, https:\/\/devblogs.microsoft.com\/microsoft365dev\/wp-content\/uploads\/sites\/73\/2020\/05\/office365-cli-visual-studio-code-codetour-2048x1520.png 2048w\" sizes=\"(max-width: 600px) 100vw, 600px\" \/><\/a><figcaption id=\"figcaption_attachment_4739\" class=\"wp-caption-text\">Visual Studio Code CodeTour report for upgrading SharePoint Framework projects generated using the Office 365 CLI<\/figcaption><\/figure><\/p>\n<p>To use the CodeTour report for upgrading your SharePoint Framework project, be sure you have the <a href=\"https:\/\/marketplace.visualstudio.com\/items?itemName=vsls-contrib.codetour\" target=\"_blank\" rel=\"noopener noreferrer\">CodeTour Visual Studio Code extension<\/a> installed and then execute:<\/p>\n<div class=\"language-sh highlighter-rouge\">\n<div class=\"highlight\">\n<pre class=\"highlight\"><code data-lang=\"sh\">o365 spfx project upgrade <span class=\"nt\">-o<\/span> tour\n<\/code><\/pre>\n<\/div>\n<\/div>\n<p>The next time you open your project in Visual Studio Code, the CodeTour extension will start the tour walking you through the different steps to upgrade your project.<\/p>\n<p>The CodeTour report offers a richer upgrade experience that we hope you will like. Big thanks to Hugo Bernier for contributing this new report type and don&#8217;t hesitate to let us know if you have any feedback or ideas for improvement.<\/p>\n<h3>Improved SPFx project upgrade<\/h3>\n<p>Next to introducing the new CodeTour SPFx project upgrade report, we have improved the project upgrade logic. While originally we&#8217;d suggest upgrading only the required dependencies, in this version we&#8217;ve extended the upgrade report to include some of the optional dependencies as well. In the future versions of the CLI, we&#8217;ll extend this list covering all <code>@microsoft<\/code> dependencies that are a part of the SharePoint Framework. We&#8217;ve also improved the accuracy of our findings which should streamline the upgrade process.<\/p>\n<h3>Improved externalizing SPFx project dependencies<\/h3>\n<p>When building SharePoint Framework solutions, developers can use many of the 1 million packages published on npm to speed up their development process. By default, however, these packages get included in the generated solution bundle, unnecessarily increasing its size. While you can configure them to be stored externally, it&#8217;s not always trivial to use the right way of doing it. To simplify the process of separating packages from the solution bundle, Office 365 CLI offers a command that analyzes your solution and shows you code necessary to include in your project.<\/p>\n<p>For this version of Office 365 CLI, Vincent Biret improved the logic to detect the type of package so that the CLI can offer you more accurate suggestions for the necessary code snippets.<\/p>\n<p>To get suggestions on how to separate the dependencies from your SPFx project, execute:<\/p>\n<div class=\"language-sh highlighter-rouge\">\n<div class=\"highlight\">\n<pre class=\"highlight\"><code data-lang=\"sh\">o365 spfx project externalize\n<\/code><\/pre>\n<\/div>\n<\/div>\n<h3>Added support for logging in using managed identity<\/h3>\n<p>Office 365 CLI is a versatile tool for managing your Microsoft 365 tenant. Whether you execute a single command on your desktop or build automation scripts integrated into builds or scheduled tasks. Before you can start communicating with your tenant, you need to log in to it. And often that&#8217;s a challenge. Where do you store securely the necessary credentials?<\/p>\n<p>To simplify using Office 365 CLI in automation scenarios, in this version we introduce support for logging in to Microsoft 365 using managed identity. If you use the CLI on a VM or Azure Function that has managed identity set up or in Azure Cloud Shell, you can use the existing identity and don&#8217;t need any separate credentials to communicate with Microsoft 365!<\/p>\n<p>All you need to do is to log in using managed identity, by executing:<\/p>\n<div class=\"language-sh highlighter-rouge\">\n<div class=\"highlight\">\n<pre class=\"highlight\"><code data-lang=\"sh\">o365 login <span class=\"nt\">--authType<\/span> identity\n<\/code><\/pre>\n<\/div>\n<\/div>\n<p>For more information about using managed identity with Office 365 CLI, see the <a href=\"https:\/\/pnp.github.io\/office365-cli\/cmd\/login\/\" target=\"_blank\" rel=\"noopener noreferrer\">documentation<\/a>. Big thanks to Velin Georgiev for contributing this new authentication method and Paul Schaeflein for assisting with the research.<\/p>\n<h3>Add Azure AD app role assignments<\/h3>\n<p>When building solutions on Microsoft 365, chances are that you will deploy some pieces of it to Azure. For these components to be able to communicate with Microsoft 365, they need to be granted access to the specific services.<\/p>\n<p>To help you automate configuring these permissions, Velin Georgiev contributed a command to add app role assignments to service principals.<\/p>\n<p>For example, to allow the specified service principal to read information about SharePoint sites, execute:<\/p>\n<div class=\"language-sh highlighter-rouge\">\n<div class=\"highlight\">\n<pre class=\"highlight\"><code data-lang=\"sh\">o365 aad approleassignment add <span class=\"nt\">--appId<\/span> <span class=\"s2\">\"57907bf8-73fa-43a6-89a5-1f603e29e451\"<\/span> <span class=\"nt\">--resource<\/span> <span class=\"s2\">\"SharePoint\"<\/span> <span class=\"nt\">--scope<\/span> <span class=\"s2\">\"Sites.Read.All\"<\/span>\n<\/code><\/pre>\n<\/div>\n<\/div>\n<p>For more information about managing Azure AD apps using the Office 365 CLI, see the <a href=\"https:\/\/pnp.github.io\/office365-cli\/\" target=\"_blank\" rel=\"noopener noreferrer\">documentation<\/a>.<\/p>\n<h3>Add a Microsoft To Do list<\/h3>\n<p>Recently, during Build, Microsoft announced the preview of new Microsoft Graph APIs for managing To Dos. These APIs extend the task management capabilities of Graph that in the past allowed you to create Planner and Outlook tasks.<\/p>\n<p>For this version of Office 365 CLI, Yannick Plenevaux contributed a command to add a To Do list. To add a To Do list using the CLI, execute:<\/p>\n<div class=\"language-sh highlighter-rouge\">\n<div class=\"highlight\">\n<pre class=\"highlight\"><code data-lang=\"sh\">o365 todo list add <span class=\"nt\">--name<\/span> <span class=\"s2\">\"My task list\"<\/span>\n<\/code><\/pre>\n<\/div>\n<\/div>\n<p>While the new To Do APIs already work, they haven&#8217;t been officially released. When the API becomes officially available, you can expect us to extend the support for To Do in Office 365 CLI.<\/p>\n<h3>Install personal Teams apps<\/h3>\n<p>Microsoft Teams gained a lot of popularity lately. Many organizations have started using Teams in their daily work and are now looking into extending them to their needs to get even more out of them. A part of that is the ability to allow users to use the different applications directly from the context of Teams.<\/p>\n<p>To help you automate the process of configuring Microsoft Teams, Aakash Bhardwaj contributed a command to add personal Teams apps.<\/p>\n<p>To add a personal Teams app, execute:<\/p>\n<div class=\"language-sh highlighter-rouge\">\n<div class=\"highlight\">\n<pre class=\"highlight\"><code data-lang=\"sh\">o365 teams user app add <span class=\"nt\">--appId<\/span> 4440558e-8c73-4597-abc7-3644a64c4bce <span class=\"nt\">--userId<\/span> 2609af39-7775-4f94-a3dc-0dd67657e900\n<\/code><\/pre>\n<\/div>\n<\/div>\n<p>For more information about managing Microsoft Teams using the Office 365 CLI, see the <a href=\"https:\/\/pnp.github.io\/office365-cli\/\" target=\"_blank\" rel=\"noopener noreferrer\">documentation<\/a>.<\/p>\n<h3>Manage Yammer users and messages<\/h3>\n<p>Organizations on Microsoft 365 have plenty of choices when it comes to how to facilitate their collaboration. They can choose the good old e-mail, but also can use services like Microsoft Teams or Yammer. Each of these services shines in one or more specific scenarios and there is no right or wrong when it comes to using them in the workplace.<\/p>\n<p>In this release of the Office 365 CLI, we continued to extend support for Yammer. Patrick Lambert contributed commands to manage Yammer groups&#8217; users and (un)liking messages.<\/p>\n<p>To add the current user to a Yammer group, execute:<\/p>\n<div class=\"language-sh highlighter-rouge\">\n<div class=\"highlight\">\n<pre class=\"highlight\"><code data-lang=\"sh\">o365 yammer group user add <span class=\"nt\">--id<\/span> 5611239081\n<\/code><\/pre>\n<\/div>\n<\/div>\n<p>To remove the current user from a Yammer group, execute:<\/p>\n<div class=\"language-sh highlighter-rouge\">\n<div class=\"highlight\">\n<pre class=\"highlight\"><code data-lang=\"sh\">o365 yammer group user remove <span class=\"nt\">--id<\/span> 5611239081\n<\/code><\/pre>\n<\/div>\n<\/div>\n<p>To like the specific Yammer message, execute:<\/p>\n<div class=\"language-sh highlighter-rouge\">\n<div class=\"highlight\">\n<pre class=\"highlight\"><code data-lang=\"sh\">o365 yammer message like <span class=\"nb\">set<\/span> <span class=\"nt\">--id<\/span> 5611239081\n<\/code><\/pre>\n<\/div>\n<\/div>\n<p>Since Yammer is not available in all tenants, we made its permissions optional in the Azure AD app used by the Office 365 CLI. Before you can start using Yammer commands in the Office 365 CLI, you need to consent the Azure AD app access to Yammer by executing:<\/p>\n<div class=\"language-sh highlighter-rouge\">\n<div class=\"highlight\">\n<pre class=\"highlight\"><code data-lang=\"sh\">consent <span class=\"nt\">--service<\/span> yammer\n<\/code><\/pre>\n<\/div>\n<\/div>\n<p>For more information about managing Yammer using the Office 365 CLI, see the <a href=\"https:\/\/pnp.github.io\/office365-cli\/\" target=\"_blank\" rel=\"noopener noreferrer\">documentation<\/a>.<\/p>\n<h3>New user guide Using your own Azure AD identity<\/h3>\n<p>Office 365 CLI contains nearly 400 commands allowing you to manage different services in Microsoft 365. Many of these commands require admin-level permissions and chances are, that you might not need to use all of them in your organization. By default, Office 365 CLI uses its own Azure AD application with all necessary permissions assigned to it. But if you want to have more control over the admin-level access in your tenant you can use your own Azure AD application instead.<\/p>\n<p>To simplify the processing of setting up and using your own Azure AD application with Office 365 CLI, Garry Trinder contributed a <a href=\"https:\/\/pnp.github.io\/office365-cli\/user-guide\/using-own-identity\/\" target=\"_blank\" rel=\"noopener noreferrer\">detailed walkthrough<\/a> taking you step-by-step through the whole configuration process. We hope you find it helpful and please don&#8217;t hesitate to reach out to us if we can clarify or improve anything.<\/p>\n<h3>New script samples<\/h3>\n<p>Office 365 CLI is a great tool both for quick adjustments to the configuration of your Microsoft 365 tenant as well as automating more complex tasks. Because Office 365 CLI is cross-platform you can use it on any OS and in any shell. To help you get started using the Office 365 CLI for automation scenarios, we started gathering some sample scripts. Here are the latest additions to the collection.<\/p>\n<blockquote><p>If you have any scripts that you use frequently, please <a href=\"https:\/\/github.com\/pnp\/office365-cli\/issues\" target=\"_blank\" rel=\"noopener noreferrer\">share them with us<\/a> so that we can learn more about the common automation scenarios.<\/p><\/blockquote>\n<h4>Bulk add\/remove users to Microsoft Teams and Microsoft 365 Groups<\/h4>\n<p>When merging or migrating tenants, Microsoft 365 groups or Teams you might need to change memberships of these groups.<\/p>\n<p>To simplify this process, Joseph Velliah contributed a sample <a href=\"https:\/\/pnp.github.io\/office365-cli\/sample-scripts\/aad\/manage-group-users\/\" target=\"_blank\" rel=\"noopener noreferrer\">script that allows you to add\/remove users to Microsoft Teams and Microsoft 365 groups in bulk<\/a>.<\/p>\n<h4>Disable the specified tenant-wide extension<\/h4>\n<p>Tenant Wide Extensions list from the App Catalog helps to manage the activation\/deactivation of the tenant wide extensions.<\/p>\n<p>Shantha Kumar T contributed a sample <a href=\"https:\/\/pnp.github.io\/office365-cli\/sample-scripts\/spo\/disable-tenant-wide-extension\/\" target=\"_blank\" rel=\"noopener noreferrer\">script helps to disable the specified tenant-wide extension<\/a>.<\/p>\n<h4>Add custom client-side web part to modern page<\/h4>\n<p>You&#8217;ve built an amazing new web part and now you want to programmatically add it to a modern page.<\/p>\n<p>Yannick Plenevaux contributed a sample <a href=\"https:\/\/pnp.github.io\/office365-cli\/sample-scripts\/spo\/add-custom-clientside-webpart-to-modern-page\/\" target=\"_blank\" rel=\"noopener noreferrer\">script that helps you add your web part to the page with your custom properties that might be dynamic according to your script<\/a>.<\/p>\n<h2>Contributors<\/h2>\n<p>This release wouldn&#8217;t be possible without the help of (in alphabetical order) <a href=\"https:\/\/github.com\/hugoabernier\" target=\"_blank\" rel=\"noopener noreferrer\">Hugo Bernier<\/a>, <a href=\"https:\/\/github.com\/aakashbhardwaj619\" target=\"_blank\" rel=\"noopener noreferrer\">Aakash Bhardwaj<\/a>, <a href=\"https:\/\/github.com\/baywet\" target=\"_blank\" rel=\"noopener noreferrer\">Vincent Biret<\/a>, <a href=\"https:\/\/github.com\/VelinGeorgiev\" target=\"_blank\" rel=\"noopener noreferrer\">Velin Georgiev<\/a>, <a href=\"https:\/\/github.com\/ktskumar\" target=\"_blank\" rel=\"noopener noreferrer\">Shantha Kumar<\/a>, <a href=\"https:\/\/github.com\/plamber\" target=\"_blank\" rel=\"noopener noreferrer\">Patrick Lamber<\/a>, <a href=\"https:\/\/github.com\/waldekmastykarz\" target=\"_blank\" rel=\"noopener noreferrer\">Waldek Mastykarz<\/a>, <a href=\"https:\/\/github.com\/alexandair\" target=\"_blank\" rel=\"noopener noreferrer\">Aleksandar Nikoli\u0107<\/a>, <a href=\"https:\/\/github.com\/ypcode\" target=\"_blank\" rel=\"noopener noreferrer\">Yannick Plenevaux<\/a>, <a href=\"https:\/\/github.com\/pschaeflein\" target=\"_blank\" rel=\"noopener noreferrer\">Paul Schaeflein<\/a>, <a href=\"https:\/\/github.com\/appieschot\" target=\"_blank\" rel=\"noopener noreferrer\">Albert-Jan Schot<\/a>, <a href=\"https:\/\/github.com\/pkskelly\" target=\"_blank\" rel=\"noopener noreferrer\">Pete Skelly<\/a>, <a href=\"https:\/\/github.com\/garrytrinder\/\" target=\"_blank\" rel=\"noopener noreferrer\">Garry Trinder<\/a> and <a href=\"https:\/\/github.com\/sprider\" target=\"_blank\" rel=\"noopener noreferrer\">Joseph Velliah<\/a>. Thank you all for the time you chose to spend on the Office 365 CLI and your help to advance it!<\/p>\n<h2>Work in progress<\/h2>\n<p>Here are some things that we&#8217;re currently working on.<\/p>\n<h3>CLI v3: preparing for the next major version<\/h3>\n<p>Each month we release a new version of Office 365 CLI with new features and improvements. We strive to follow semantic versioning to help you understand which versions are backward-compatible and which aren&#8217;t. Last year, we released a new major version to improve some things that couldn&#8217;t have been done in a backward-compatible way. Right now, we&#8217;re starting planning another major release that will help us clean up Office 365 CLI from obsolete features and prepare it for at least the next year.<\/p>\n<p>The most noteworthy changes are renaming <em>Office 365 CLI<\/em> to <em>Microsoft 365 CLI<\/em> to align with Microsoft&#8217;s marketing and removing the immersive mode which could allow us to modernize CLIs engine in the near future.<\/p>\n<p>We&#8217;ll start the work on v3 of Office 365 CLI shortly and will keep you updated as we introduce new changes for you to try. Stay tuned!<\/p>\n<h3>More commands, what else<\/h3>\n<p>Microsoft 365 is evolving and new capabilities are being released every day. With the Office 365 CLI, we aim to help you manage your tenant on any platform in a consistent way, no matter which part of Microsoft 365 you interact with. While we keep adding new commands to the Office 365 CLI each release, we still barely scratched the surface with what&#8217;s possible in Microsoft 365. In the upcoming versions of the Office 365 CLI, you can expect us to add more commands across the different workloads in Microsoft 365.<\/p>\n<p>To make it easier for you to see how the CLI commands compare to the different PowerShell cmdlets, we&#8217;ve extended the <a href=\"https:\/\/pnp.github.io\/office365-cli\/about\/comparison-powershell\/\" target=\"_blank\" rel=\"noopener noreferrer\">comparison sheet<\/a> with cmdlets for Flow, PowerApps, and Teams.<\/p>\n<h3>Script examples<\/h3>\n<p>In every release of the Office 365 CLI, we introduce new commands for managing Microsoft 365. With 360 commands across the different Microsoft 365 services, the Office 365 CLI has become a powerful tool, not just for managing your tenant but also for automating your daily work.<\/p>\n<p>We&#8217;d love to show you how you can use the Office 365 CLI to build automation scripts in PowerShell Core and Bash. If you have any scripts using SPO or PnP PowerShell that you use frequently, please <a href=\"https:\/\/github.com\/pnp\/office365-cli\/issues\" target=\"_blank\" rel=\"noopener noreferrer\">share them with us<\/a> so that we can learn more about the common automation scenarios.<\/p>\n<h3><code>ensure<\/code> commands<\/h3>\n<p>Currently, Office 365 CLI has dedicated commands for retrieving, creating, and updating resources. If you were to create a script that ensures a specific configuration, for each resource you&#8217;d need to see if it exists, create it if it doesn&#8217;t, or update it if it does.<\/p>\n<p>We&#8217;re thinking about simplifying this scenario by introducing commands with a new verb named <code>ensure<\/code>. For example, to ensure that a particular site collection exists, instead of executing a combination of <code>spo site list<\/code>\/<code>spo site get<\/code>, <code>spo site add<\/code> and <code>spo site set<\/code>, you&#8217;d execute <code>spo site ensure<\/code> with the necessary parameters which would automatically verify if the particular site exists and matches your configuration. If the site doesn&#8217;t exist, it would create it. If it does, the command would check if the properties you specified match the retrieved site and update them if necessary.<\/p>\n<p>We&#8217;ll start to <a href=\"https:\/\/github.com\/pnp\/office365-cli\/issues\/1404\" target=\"_blank\" rel=\"noopener noreferrer\">implement this idea<\/a> on the <code>spo site<\/code> commands. We&#8217;d love to <a href=\"https:\/\/github.com\/pnp\/office365-cli\/discussions\" target=\"_blank\" rel=\"noopener noreferrer\">hear from you<\/a> if it&#8217;s something that you&#8217;d find helpful and what other objects we should take into account.<\/p>\n<h3>Setting arbitrary properties on SharePoint objects<\/h3>\n<p>At this moment, the most of SharePoint <code>set<\/code> commands in the Office 365 CLI support only a handful of options that correspond to the properties of their SharePoint class, like <code>Web<\/code>, <code>Site<\/code>, <code>List<\/code>, etc. This is similar to how the <code>Set-PnP*<\/code> cmdlets work. However, because PnP PowerShell works with CSOM, this limitation there is often circumvented, by retrieving the CSOM object, updating its properties, and calling <code>$object.ExecuteQuery()<\/code> to persist the changes outside of PnP cmdlets. Because the CLI doesn&#8217;t use CSOM, this isn&#8217;t possible and users are limited to using whatever options are exposed by the CLI commands.<\/p>\n<p>We&#8217;re thinking about addressing this limitation by allowing you to set the value of any property exposed on the SharePoint object. This would work only for properties that have values of simple types like <code>bool<\/code>, <code>string<\/code> or <code>int<\/code> because complex values likely can&#8217;t be serialized to <code>string<\/code> without additional logic.<\/p>\n<p>We would offer rudimentary logic of checking if the specified properties are valid, by examining the latest version of the SPO CSOM assemblies and checking which properties on the particular SharePoint class have setters and values of the supported types and thus can be used.<\/p>\n<p>What do you think of this approach? Would this help to solve a problem you have? In the previous release, we have extended the <code>spo web set<\/code> command with this functionality. We&#8217;d love you to try it and <a href=\"https:\/\/github.com\/pnp\/office365-cli\/discussions\" target=\"_blank\" rel=\"noopener noreferrer\">tell us what you think<\/a>.<\/p>\n<h2>Try it today<\/h2>\n<p>Get the latest release of the Office 365 CLI from npm by executing in the command line:<\/p>\n<div class=\"language-sh highlighter-rouge\">\n<div class=\"highlight\">\n<pre class=\"highlight\"><code data-lang=\"sh\">npm i <span class=\"nt\">-g<\/span> @pnp\/office365-cli\n<\/code><\/pre>\n<\/div>\n<\/div>\n<p>If you need more help getting started or want more details about the commands, the architecture, or the project, go to <a href=\"https:\/\/aka.ms\/o365cli\" target=\"_blank\" rel=\"noopener noreferrer\">aka.ms\/o365cli<\/a>. If you see any room for improvement, please, don&#8217;t hesitate to reach out to us either on <a href=\"https:\/\/github.com\/pnp\/office365-cli\/discussions\" target=\"_blank\" rel=\"noopener noreferrer\">GitHub<\/a> or <a href=\"https:\/\/twitter.com\/office365cli\" target=\"_blank\" rel=\"noopener noreferrer\">twitter<\/a>.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>We&#8217;ve just published a new version of the Office 365 CLI with commands for managing Office 365 tenants and SharePoint Framework projects on any platform.<\/p>\n","protected":false},"author":69079,"featured_media":25159,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"footnotes":""},"categories":[128,11],"tags":[53,140,19],"class_list":["post-4737","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-microsoft-teams","category-office-add-ins","tag-office-365","tag-office-365-cli","tag-sharepoint-framework"],"acf":[],"blog_post_summary":"<p>We&#8217;ve just published a new version of the Office 365 CLI with commands for managing Office 365 tenants and SharePoint Framework projects on any platform.<\/p>\n","_links":{"self":[{"href":"https:\/\/devblogs.microsoft.com\/microsoft365dev\/wp-json\/wp\/v2\/posts\/4737","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/devblogs.microsoft.com\/microsoft365dev\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/devblogs.microsoft.com\/microsoft365dev\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/devblogs.microsoft.com\/microsoft365dev\/wp-json\/wp\/v2\/users\/69079"}],"replies":[{"embeddable":true,"href":"https:\/\/devblogs.microsoft.com\/microsoft365dev\/wp-json\/wp\/v2\/comments?post=4737"}],"version-history":[{"count":0,"href":"https:\/\/devblogs.microsoft.com\/microsoft365dev\/wp-json\/wp\/v2\/posts\/4737\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/devblogs.microsoft.com\/microsoft365dev\/wp-json\/wp\/v2\/media\/25159"}],"wp:attachment":[{"href":"https:\/\/devblogs.microsoft.com\/microsoft365dev\/wp-json\/wp\/v2\/media?parent=4737"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/devblogs.microsoft.com\/microsoft365dev\/wp-json\/wp\/v2\/categories?post=4737"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/devblogs.microsoft.com\/microsoft365dev\/wp-json\/wp\/v2\/tags?post=4737"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}