在PowerShell脚本中集成Microsoft Graph
作者:陈希章 发表于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的更多相关文章
- 跨平台应用集成(在ASP.NET Core MVC 应用程序中集成 Microsoft Graph)
作者:陈希章 发表于 2017年6月25日 谈一谈.NET 的跨平台 终于要写到这一篇了.跨平台的支持可以说是 Office 365 平台在设计伊始就考虑的目标.我在前面的文章已经提到过了,Micro ...
- 在无人值守程序(服务)中调用Microsoft Graph
作者:陈希章 发表于 2017年5月31日 什么是无人值守程序(服务) 我在此前用了几篇文章分别介绍了在桌面应用程序(控制台),Web应用程序(ASP.NET MVC),以及PowerSehll脚本中 ...
- 在Application中集成Microsoft Translator服务之开发前准备
第一步:准备一个微软账号 要使用Microsoft Translator API需要在Microsoft Azure Marketplace(https://datamarket.azure.com/ ...
- PowerShell 脚本中的密码
引言 笔者在<PowerShell 远程执行任务>一文中提到了在脚本中使用用户名和密码的基本方式: $Username = 'xxxx' $Password = 'yyyy' $Pass ...
- 技术分享:如何在PowerShell脚本中嵌入EXE文件
技术分享:如何在PowerShell脚本中嵌入EXE文件 我在尝试解决一个问题,即在客户端攻击中只使用纯 PowerShell 脚本作为攻击负荷.使用 PowerShell 运行恶意代码具有很多优点, ...
- 今天在写powershell脚本中犯的两个错误
可能是因为牙痛没睡好,今天老是犯错,还是脚本写错,特别难调. 第一个错误: powershell脚本里面,函数与函数互相调用的传参.其实就像调用普通的cmdlet一样的写法,应该这么写: Add-Sc ...
- 在Application中集成Microsoft Translator服务之使用http获取服务
一.创建项目 首先我们来创建一个ASP.NET Application 选择时尚时尚最时尚的MVC,为了使演示的Demo更简单,这里选择无身份验证 二.创建相关类 项目需要引入之前两个类AdmAcce ...
- 在Application中集成Microsoft Translator服务之获取访问令牌
我在这里画了一张图来展示业务逻辑 在我们调用microsoft translator server之前需要获得令牌,而且这个令牌的有效期为10分钟.下表列出所需的参数和对于的说明 参数 描述 clie ...
- 在Application中集成Microsoft Translator服务之优化
在一篇文章中我们已经实现了功能,但是一个明显的问题是响应时间非常长,用户体验非常糟糕,这篇文章将带你找出问题所在并进行优化 为了找出追魁祸首,这里使用 System.Diagnostics.Stopw ...
随机推荐
- 坦言spring中事务、重试、异步执行注解
一.@Transaction 我们再编码过程中,大量使用到这个注解.一般情况下,@Transaction使用默认注解可以完成90%的功能,下面会针对一些特殊场景下,@Tansaction的使用注意 1 ...
- middlewares in GCC
Our GCC is a project developed by React that makes it painless to create interactive UIs. Design sim ...
- iOS开发中获取视图在屏幕上显示的位置
在iOS开发中,我们会经常遇到一个问题,例如,点击一个按钮,弹出一个遮罩层,上面显示一个弹框,弹框显示的位置在按钮附近.如果这个按钮的位置相对于屏幕边缘的距离是固定的,那就容易了,可以直接写死位置.可 ...
- [转载] JaCoCo:分析单元测试覆盖率的利器
转载自http://www.ibm.com/developerworks/cn/java/j-lo-jacoco/和http://www.cnblogs.com/chenfengmugu/p/4937 ...
- WebService学习总结
因为最近开发的项目需求中涉及到了webservice,正好对这块知识以前学过但是又忘记了,于是想着从新学习下,整理一个笔记,便于后面的复习.于是有了本文,下面开始介绍webservice. 一.简介 ...
- web工程自动部署(tomcat服务器)
工作中经常需要把web项目打成war包之后部署到tomcat服务器上,每次更新时步骤比较类似,这里提供公共步骤,编写名为auto_deploy.sh的shell脚本,只需要传递两个参数即可自动完成部署 ...
- Maven依赖分析
背景 昨天帮一位同事排查了一个依赖冲突的问题.问题的现象就是在IntelliJ IDEA运行项目正常,但是打包(Maven assembly jar)之后传到服务器运行失败,报错:Caused by: ...
- Linux系列教程(二十四)——Linux的系统管理
上篇博客介绍了Linux的服务管理,不管是以RPM包安装的服务,还是通过源码包安装的服务,万能启动服务的方法都可以通过 /绝对路径/启动脚本名 start .而通过 RPM 包安装的服务还可以通过 s ...
- Hue 之 SparkSql interpreters的配置及使用
1.环境说明: HDP 2.4 V3 sandbox hue 4.0.0 2.hue 4.0.0 编译及安装 地址:https://github.com/cloudera/hue/releases/t ...
- Transform组件以及相关API
Transform.Translate(Vector3,Space):以自身坐标系或者世界坐标系向某个方向移动物体. Vector3:表示方向和移动的距离. Space:空间.枚举类型,用来确定坐标系 ...