powershell - 通过 Flow/Azure 为外部用户自动访问 SharePoint Online
问题描述
我对 SharePoint/Azure/PowerShell 很陌生,如果我问的是一个愚蠢的问题,我深表歉意!
我们目前在我们的 O365 租户上托管了客户端 SharePoint 网站,可以访问每个网站,很快就会向我们各自的每个客户推出。最初,只有每个客户的高级管理人员才能访问这些站点,但是随着时间的推移,我们很可能也会添加其他所有人;为了简化新用户流程并使我们不必添加每个单独的员工,我们一直在考虑使用 Flow 来自动化用户访问,目标是添加经过身份验证的外部用户,而不需要管理员的太多实际输入,而不是一个简单的批准/拒绝过程。
总体规划如下:
- 每个客户站点都有一个名为“员工访问列表”的 SharePoint 自定义列表。所述列表将具有以下列:请求 ID(文本)、名字(文本)、姓氏(文本)、职位(文本)、公司(文本)、联系电话(文本)、电子邮件(文本)、 SharePoint 访问(是/否布尔值)。
- 如果某位员工需要访问 SharePoint 站点,那么他们各自的经理将把该员工添加到列表中并填写上述所有字段,将“SharePoint 访问”项的值设置为“是”。
- 这将触发流程并将一封批准电子邮件发送给我自己和另一位管理员,其中详细说明了要创建的用户以及提交请求的用户。
- 以某种方式插入脚本 - 如果请求被批准,这将运行,并为用户设置访问权限。
- 电子邮件通知会自动发送给 SharePoint 列表项的创建者,通知他们用户现在可以访问。
第 4 步是如果请求获得批准,我有点不知道该怎么做 - 我在下面编写了一个小 PowerShell 脚本,它几乎实现了我的目标,因为它创建了一个外部用户 PnP 组和 PnP 角色定义(如果还没有),提取“员工访问”列表上的“电子邮件”字段中的内容并运行 Add-PnPUsertoGroup 将用户拉到 PnP 组,然后发送用户一封电子邮件,其中包含指向 SharePoint 网站的链接,允许他们访问它。然而:
- 我编写的脚本针对 SharePoint 列表中的每个人,而理想情况下,我只希望脚本针对新添加到列表中的唯一用户/在批准电子邮件中列出,并且只有他们。我假设我必须将来自 Flow 的信息通过管道传输到一个脚本中,我什至不确定这是否可能,如果是,我不知道该怎么做。
- 我知道 Azure Functions 和 Azure Automation 可用于将脚本插入到 Flows 中,但我都没有这方面的经验,所以我不确定哪个是更合适的选项。是否有关于如何使用它们插入 PowerShell 脚本以及如何将流中的内容通过管道传输到所述脚本中的任何指导?
PowerShell脚本如下:
希望这一切都有意义 - 任何指导将不胜感激。
谢谢!
编辑:就像一些额外的信息一样,这里是当前的流程:
解决方案
此后找到了上述问题的答案 - 虽然 Azure Functions/Automation 是一个选项,但您不一定需要它们或从 Flow 运行的 PowerShell 脚本,在这种情况下,我的目标场景是使用 MS Graph Invitation API、App Permissions 和改为 HTTP SharePoint 调用。
请参阅随附的屏幕截图:
第 1 步:设置一个有权调用 MS Graph 的应用程序 - 使用本指南获取有关如何执行此操作的帮助 - http://blogopaxio.azurewebsites.net/accessing-graph-api-from-microsoft-flow-using -application-permissions-2/
第 2 步:将 HTTP 添加到 MS Graph 并按照本文的屏幕截图 1 设置参数 - 此操作将创建访客用户和用户登录网站所需的邀请 URL。
第 3 步:此时,运行流程,以便我们可以从 HTTP 步骤的输出正文中获取“inviteRedeemURL” - 您需要将此特定 URL 在您的电子邮件中单独发送给最终用户。
第 4 步:暂停一两分钟,以确保来自先前操作的信息“有效” - 如果一切正常,此时,用户实际上将创建他们的访客帐户,您将能够在您的 O365 管理中心的用户下看到他们,但是他们不会知道他们的帐户访问权限(我们将在最后的电子邮件中通知他们)。
第 5 步:使用“向 SharePoint 发送 HTTP 请求”操作将用户添加到 SharePoint 安全组。请注意,此操作的 URI 中的“sitegroups(19)”指的是您将其放入的 PnP 组的 ID 号,因此在我的情况下,组 ID 为 19。如果您不确定 ID使用 PnP 命令通过 PowerShell 连接到您的 SharePoint 站点,然后运行 Get-PnPGroup。
第 6 步:使用 Outlook 发送电子邮件操作向受邀用户发送电子邮件 - 仅供参考 - 我的屏幕截图中的“SharePoint 站点”变量实际上是“inviteRedeemURL”。
希望这可以帮助其他不确定如何执行此操作的人。如果有人有更好的解决方案可以通过各种方式实现这一目标,请发布!
谢谢!
推荐阅读
- python - 运行 os.system / subprocess.call 返回语法错误
- sql - SQL Server - 有没有更好的方法让我根据不同行数的值进行选择?
- java - 越界异常
- linux - 从 Docker Stack 启动 docker-compose 文件时是否可以获取环境文件
- python - Insert Python Dataframes into MySQL
- java - java.lang.ArrayStoreException 将整数存储在整数数组中
- java - 我应该在哪里处理数据库查询以使用 spring data jpa 进行验证?
- sql-server-2012 - 带有大小写条件 SQL Server 的日期筛选器
- ionic-framework - 找不到互联网时,如何在应用程序加载时使用 ionic 4 退出应用程序?
- javascript - javascript window.open():强制为自定义文件类型打开窗口