在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 ...
随机推荐
- DbContext 中的 Explicit interface implementation
疑惑 前段时间一直再用Entity Framework 6,写了一些公用的方法,在这个过程中发现了DbContext实现的接口IObjectContextAdapter,可以通过这个接口访问到更底层的 ...
- 通过jettymain启动项目
jetty是一个比tomcat轻量级好多的服务器,通过简单的配置即可成功的跑起来,编译过程要短一点,可以一定程度上提高开发效率 首先,要下载下来jetty的包,mvn信息如下: <depende ...
- SSM框架搭建(Spring+SpringMVC+MyBatis)与easyui集成并实现增删改查实现
一.用myEclipse初始化Web项目 新建一个web project: 二.创建包 controller //控制类 service //服务接口 service.impl //服务 ...
- Kotlin编码----var和val的区别
var是一个可变变量,这是一个可以通过重新分配来更改为另一个值的变量.这种声明变量的方式和Java中常规的变量的声明方式一样. val是一个只读变量,这种声明变量的方式相当于java中的final变量 ...
- python基础(三)----字符编码以及文件处理
字符编码与文件处理 一.字符编码 由字符翻译成二进制数字的过程 字符--------(翻译过程)------->数字 这个过程实际就是一个字符如何对应一个特定数字的标准,这个标准称之 ...
- 转载:Allegro实用技巧之模块复用
http://bbs.ednchina.com/BLOG_ARTICLE_3031842.HTM?click_from=8800032437,9950148743,2016-01-04,EDNCOL, ...
- 【小技巧解决大问题】使用 frp 突破阿里云主机无弹性公网 IP 不能用作 Web 服务器的限制
背景 今年 8 月份左右,打折价买了一个阿里云主机,比平常便宜了 2000 多块.买了之后,本想作为一个博客网站的,毕竟国内的服务器访问肯定快一些.满心欢喜的下单之后,却发现 http 服务,外网怎么 ...
- ConstraintLayout
ConstraintLayout使用笔记 具体使用参考:http://blog.csdn.net/guolin_blog/article/details/53122387 ConstraintLayo ...
- hashlib,configparser,logging,模块
一,hashlib模块 算法介绍 Python的hashlib提供了常见的摘要算法,如MD5,SHA1等等. 什么是摘要算法呢?摘要算法又称哈希算法.散列算法.它通过一个函数,把任意长度的数据转换为一 ...
- 为什么win记事本编辑的shell在linux中运行会报错
结论:win记事本使用的格式有别于linux,二者不可混用.linux使用一个叫vi的编辑器. 解决办法:使用vi命令建立文件,在其中敲shell.命令:vi > filename (敲完 ...