作者:陈希章 发表于2017年4月23日

我旗帜鲜明地表态,我很喜欢PowerShell,相比较于此前的Cmd Shell,它有一些重大的创新,例如基于.NET的类型系统,以及管道、模块的概念等等。那么,PowerShell是否可以愉快地跟Microsoft Graph搭配工作,为我们的IT管理员或者开发人员提供一种利用脚本就可以对Office 365进行运维和集成呢?

PowerShell一直可以管理Office 365,但那是通过比较传统的方式,就是Office 365提供了一些特定的Cmdlet,通常是给管理员用的,而且每个服务都可能有一套自己的Cmdlet,有兴趣的朋友可以参考http://powershell.office.com/。今天介绍的这个与Microsoft Graph的集成,是一种全新的视角。

言归正传,要在PowerShell脚本中访问Microsoft Graph,当然首先也得注册应用程序,这个我已经用了几篇文章详细介绍过了,这里不再赘述。其次,就是要面临认证和授权的问题,最后才是对Microsoft Graph资源的调用。

这个三部曲,看起来最后一步是重点,但其实很多朋友是被卡在第一步和第二步。请仔细阅读我此前的文章。

准备环境

本文将直接使用上一篇中已经注册好的应用程序,它的信息如下

AppId :45aa2ecc-5e57-4c91-86c1-b93064800c39
RedirectUrl :https://login.microsoftonline.com/common/oauth2/nativeclient

接下来我们就着手来做认证和授权了。我坚持我的观点,不想自己去发起和解析OAuth,所以我推荐给大家一个能直接用的PowerShell模块。它虽然不是官方提供的,但经过我的测试使用我发现还是挺方便的。

Microsoft Graph API https://www.powershellgallery.com/packages/MicrosoftGraphAPI/0.1.4


值得注意的是,它的最后更新时间是2016年4月27日。

安装Microsoft Graph API 模块

这个模块需要在本地安装才能执行,请用管理员身份打开PowerShell,然后执行如下的命令 Install-Module -Name MicrosoftGraphAPI

执行Install-Module的前提条件是当前操作系统需要有一个PowerShellGet的模块,所以要求运行环境是Windows 10,关于这个的说明,有兴趣可以参考 https://www.powershellgallery.com/

安装成功后,可以通过Get-Command -Module MicrosoftGraphAPI 获得这个模块为当前环境安装的命令,并且通过Get-Help xxxxx 快速了解这些命令的用法


通过Get-GraphAuthToken认证和授权

安装好了Microsoft Graph API这个模块,我们可以通过下面这样的命令去进行用户身份的认证和授权 $token=Get-GraphAuthToken -AADTenant "office365devlabs.onmicrosoft.com" -ClientId "45aa2ecc-5e57-4c91-86c1-b93064800c39" -RedirectUri "https://login.microsoftonline.com/common/oauth2/nativeclient" -Credential (Get-Credential)

请注意,我们这里调用的是PowerShell自带的一个获取用户凭据的对话框来得到用户信息,然后API会将这些信息提交给Microsoft Graph,并且得到AccessToken给PowerShell。


通过Invoke-GraphRequest执行Microsoft Graph查询

这是一个通用的方法,它可以用来执行所有的Microsfot Graph操作,包括查询数据,增加、更新、删除数据等。下面演示一个最简单的查询,用来获取当前用户的基本信息 Invoke-GraphRequest -url "https://graph.microsoft.com/v1.0/me" -Token $token -Method GET

看起来还不错,有觉悟的同学一定会发现,以上的命令访问的都是国际版Office 365。那么,中国版的Office 365是否也可以同样操作呢?很抱歉,目前来说这个API是不支持中国版的Office 365的

这就给我们提了一个好问题,我们能不能自己写一个适合于中国版Office 365的Microsoft Graph API呢?为什么不呢?

结合上一篇演示的访问中国版Office 365的代码,有兴趣的同学可以自行研究一下怎么在现有的这个API基础上进行修改实现


如果有实现出来,并且自告奋勇地分享在PSGallery中,我请喝咖啡 :)

在PowerShell脚本中集成Microsoft Graph的更多相关文章

  1. 跨平台应用集成(在ASP.NET Core MVC 应用程序中集成 Microsoft Graph)

    作者:陈希章 发表于 2017年6月25日 谈一谈.NET 的跨平台 终于要写到这一篇了.跨平台的支持可以说是 Office 365 平台在设计伊始就考虑的目标.我在前面的文章已经提到过了,Micro ...

  2. 在无人值守程序(服务)中调用Microsoft Graph

    作者:陈希章 发表于 2017年5月31日 什么是无人值守程序(服务) 我在此前用了几篇文章分别介绍了在桌面应用程序(控制台),Web应用程序(ASP.NET MVC),以及PowerSehll脚本中 ...

  3. 在Application中集成Microsoft Translator服务之开发前准备

    第一步:准备一个微软账号 要使用Microsoft Translator API需要在Microsoft Azure Marketplace(https://datamarket.azure.com/ ...

  4. PowerShell 脚本中的密码

    引言 笔者在<PowerShell 远程执行任务>一文中提到了在脚本中使用用户名和密码的基本方式: $Username = 'xxxx' $Password = 'yyyy' $Pass ...

  5. 技术分享:如何在PowerShell脚本中嵌入EXE文件

    技术分享:如何在PowerShell脚本中嵌入EXE文件 我在尝试解决一个问题,即在客户端攻击中只使用纯 PowerShell 脚本作为攻击负荷.使用 PowerShell 运行恶意代码具有很多优点, ...

  6. 今天在写powershell脚本中犯的两个错误

    可能是因为牙痛没睡好,今天老是犯错,还是脚本写错,特别难调. 第一个错误: powershell脚本里面,函数与函数互相调用的传参.其实就像调用普通的cmdlet一样的写法,应该这么写: Add-Sc ...

  7. 在Application中集成Microsoft Translator服务之使用http获取服务

    一.创建项目 首先我们来创建一个ASP.NET Application 选择时尚时尚最时尚的MVC,为了使演示的Demo更简单,这里选择无身份验证 二.创建相关类 项目需要引入之前两个类AdmAcce ...

  8. 在Application中集成Microsoft Translator服务之获取访问令牌

    我在这里画了一张图来展示业务逻辑 在我们调用microsoft translator server之前需要获得令牌,而且这个令牌的有效期为10分钟.下表列出所需的参数和对于的说明 参数 描述 clie ...

  9. 在Application中集成Microsoft Translator服务之优化

    在一篇文章中我们已经实现了功能,但是一个明显的问题是响应时间非常长,用户体验非常糟糕,这篇文章将带你找出问题所在并进行优化 为了找出追魁祸首,这里使用 System.Diagnostics.Stopw ...

随机推荐

  1. 盒子端 CSS 动画性能提升研究

    不同于传统的 PC Web 或者是移动 WEB,在腾讯视频客厅盒子端,接大屏显示器(电视)下,许多能流畅运行于 PC 端.移动端的 Web 动画,受限于硬件水平,在盒子端的表现的往往不尽如人意. 基于 ...

  2. RabbitMQ之发布订阅

    工作队列中,每个任务之分发给一个工作者.如果需要分发一个消息给多个消费者,这种模式被称为“发布/订阅” 交换器(Exchanges) RabbitMQ完整的消息模型 发布者(producer)是发布消 ...

  3. 【解决方案】纯js动态克隆表一行元素

    1 m = 0 ;// 用于区分input // 新增一条录入 function AddTR(){ m += 1; var tableObject = document.getElementById( ...

  4. Android ANR异常解决方案

    1,ANR异常的解释: ANR(android not response)即应用程序无响应,在用户操作在5秒内没有响应的话就会出现ANR异常: 2,那为什么会出现ANR异常呢? Android系统中处 ...

  5. java参数传值方式

     java参数有值类型和引用类型两种.所以java参数的传值也就从这两个方面分析. 从内存模型来说参数传递更为直观一些,这里涉及到两种类型的内存:栈内存(stack)和堆内存(heap).   基本类 ...

  6. Zabbix 3.0 从入门到精通(zabbix使用详解)

    第1章 zabbix监控 1.1 为什么要监控 在需要的时刻,提前提醒我们服务器出问题了 当出问题之后,可以找到问题的根源   网站/服务器 的可用性 1.1.1 网站可用性 在软件系统的高可靠性(也 ...

  7. 第一份开发工作,边学边做android

    我刚刚毕业,在培训学校学的Java web开发,虽然学的没有大学生那么丰富细致,没有他们理论基础扎实,但是这是我学习软件开发的唯一方式了. 从小学我学习就是倒数2.3等,所有人都认为我是个没法学习的孩 ...

  8. jq获取被选中的option的值。jq获取被选中的单选按钮radio的值。

    温故而知新,一起复习下jq的知识点. (1) jq获取被选中的option的值 <select id="select_id"> <option value=&qu ...

  9. HTML的iframe标签妙用 - 在线执行前端代码的网站原理是什么?

    在我自己的日常前端开发中,其实iframe标签出现的次数并不是很多.作为一个很古老(浏览器兼容性非常好)的标签,有必要去了解一下它的典型应用场景. (图片说明:所有浏览器都支持iframe,无论什么版 ...

  10. 解决tomcat部署包错误

    Context namespace element 'annotation-config' and its parser class [org.springframework.context.anno ...