作者:陈希章 发表于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. 坦言spring中事务、重试、异步执行注解

    一.@Transaction 我们再编码过程中,大量使用到这个注解.一般情况下,@Transaction使用默认注解可以完成90%的功能,下面会针对一些特殊场景下,@Tansaction的使用注意 1 ...

  2. middlewares in GCC

    Our GCC is a project developed by React that makes it painless to create interactive UIs. Design sim ...

  3. iOS开发中获取视图在屏幕上显示的位置

    在iOS开发中,我们会经常遇到一个问题,例如,点击一个按钮,弹出一个遮罩层,上面显示一个弹框,弹框显示的位置在按钮附近.如果这个按钮的位置相对于屏幕边缘的距离是固定的,那就容易了,可以直接写死位置.可 ...

  4. [转载] JaCoCo:分析单元测试覆盖率的利器

    转载自http://www.ibm.com/developerworks/cn/java/j-lo-jacoco/和http://www.cnblogs.com/chenfengmugu/p/4937 ...

  5. WebService学习总结

    因为最近开发的项目需求中涉及到了webservice,正好对这块知识以前学过但是又忘记了,于是想着从新学习下,整理一个笔记,便于后面的复习.于是有了本文,下面开始介绍webservice. 一.简介 ...

  6. web工程自动部署(tomcat服务器)

    工作中经常需要把web项目打成war包之后部署到tomcat服务器上,每次更新时步骤比较类似,这里提供公共步骤,编写名为auto_deploy.sh的shell脚本,只需要传递两个参数即可自动完成部署 ...

  7. Maven依赖分析

    背景 昨天帮一位同事排查了一个依赖冲突的问题.问题的现象就是在IntelliJ IDEA运行项目正常,但是打包(Maven assembly jar)之后传到服务器运行失败,报错:Caused by: ...

  8. Linux系列教程(二十四)——Linux的系统管理

    上篇博客介绍了Linux的服务管理,不管是以RPM包安装的服务,还是通过源码包安装的服务,万能启动服务的方法都可以通过 /绝对路径/启动脚本名 start .而通过 RPM 包安装的服务还可以通过 s ...

  9. 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 ...

  10. Transform组件以及相关API

    Transform.Translate(Vector3,Space):以自身坐标系或者世界坐标系向某个方向移动物体. Vector3:表示方向和移动的距离. Space:空间.枚举类型,用来确定坐标系 ...