当前位置:网站首页 > 更多 > 玩电脑 > 正文

[玩转系统] 使用 GitHub Copilot 将 PowerShell 脚本升级到 Microsoft Graph PowerShell SDK

作者:精品下载站 日期:2024-12-14 04:12:07 浏览:15 分类:玩电脑

使用 GitHub Copilot 将 PowerShell 脚本升级到 Microsoft Graph PowerShell SDK


GitHub Copilot 简介

Microsoft 正在标准化 Microsoft Graph API,以便以编程方式访问 Microsoft 365 租户配置、应用程序和用户数据,而不是依赖 Azure AD、Azure AD Preview 和 MSOL 等旧版 PowerShell 模块。事实上,这三个模块正在被弃用。虽然弃用日期已更改,但组织应计划更新其脚本,以便不再依赖这些模块。

GitHub Copilot 可以帮助您进行升级。 GitHub Copilot 是一款由 AI 驱动的代码完成和建议工具,由 GitHub 与 ChatGPT 的制造商 OpenAI 合作开发。它可以根据代码编辑器中的自然语言注释和上下文提供实时代码建议和自动完成功能,从而帮助任何人编写代码。代码建议和 Copilot 对 PowerShell 的理解相结合,可以帮助租户管理员将其旧脚本转换为使用 Microsoft Graph PowerShell SDK 中的 cmdlet。需要注意的是,GitHub Copilot 只是一个工具。它不能取代对 Microsoft Graph 工作原理的基本理解。对于那些有兴趣了解 Microsoft Graph SDK 的人,Practical 365 有大量涉及 Microsoft Graph PowerShell SDK 使用的文章。

此 Github Copilot 快速入门将指导您注册和安装 Visual Studio Code 插件。如果您尚未注册,可以免费试用 30 天。 30 天后,费用为 10.00 美元/月。 30 天内您可以做很多事情,因此值得测试 GitHub Copilot。

开始更新脚本之前

在接触脚本中的任何代码之前应该完成两件事:

  • 了解脚本的作用。
  • 测试脚本的作用。

也许剧本在你加入组织之前就已经投入制作了。也许剧本作者最近离开了组织。如果您不知道脚本的作用,并且进行了更改,您如何知道它是否仍然执行其应该执行的操作?在更新代码之前,脚本是否每运行 10 次就会抛出一个错误,或者这是一个新问题?

一套测试可以充当一个简单的清单,以确保脚本执行其应该执行的所有操作。根据脚本的不同,谨慎的做法可能是检查并确保它没有做任何不应该做的事情。如果您对自动化测试感兴趣,请考虑使用 Pester。无论测试是否自动化,您都必须知道预期结果是什么,以便可以将它们与更新脚本的结果进行比较。

最重要的是,一旦开始更新代码,在进行任何更改之前,您必须知道哪些有效,哪些无效。

使用 GitHub Copilot 更新脚本代码

要更新脚本,请勿将所有代码扔给 CoPilot 并说“使用 Microsoft Graph PowerShell SDK 重写此代码”。相反,请检查代码并找出使用旧模块中的 cmdlet 的位置。从那里,使用 Copilot 替换这些代码行。

我有一个类似于“如何使用适用于 PowerShell 的 Microsoft Graph SDK 创建 Microsoft 365 许可报告”的脚本,该脚本为 Microsoft 365 租户生成许可证库存报告。该脚本使用 MSOL 模块,使用 Connect-MSOLService cmdlet 连接到 Microsoft 365,获取产品 SKU,并根据可用许可证数量生成报告。该脚本大约有 350 行代码。然而,需要改变的核心只有大约10行代码。我将这些代码行复制到临时脚本文件中,并开始与 Copilot 交互。

下面的代码是一些原始代码的摘录。此代码片段不是生成完整的 HTML 报告,而是写出变量,以便我可以测试旧版本的输出并将其与新版本进行比较。

Connect-MSOlService
$licenses = Get-MSOlAccountSku
Foreach ($license in $licenses)
{
 if($license.AccountSkuId -eq "andylanddev:SPE_E3")
 {
 $spe3Active = $license.ActiveUnits
 $spe3Warning = $license.WarningUnits
 $spe3Consumed = $license.ConsumedUnits
 }
 if($license.AccountSkuId -eq "andylanddev:SPE_E5")
 {
 $spe5Active = $license.ActiveUnits
 $spe5Warning = $license.WarningUnits
 $spe5Consumed = $license.ConsumedUnits
 }
}
$spe3Warning
$spe3Active
$spe3Consumed
$spe5Warning
$spe5Active
$spe5Consumed

完成 Github Copilot 快速入门后,您应该安装了 Copilot Chat Visual Studio Code 扩展。

在图 1 中,我选择了上面显示的代码,并提示 Copilot Chat“更新此代码,以便它使用 Microsoft.Graph PowerShell 模块而不是 MSOL 模块”。

[玩转系统] 使用 GitHub Copilot 将 PowerShell 脚本升级到 Microsoft Graph PowerShell SDK

Copilot 执行了多项操作来升级代码。首先,它将 Get-MSOLAccountSku cmdlet 替换为 Get-MgSubscribedSku。 Copilot 还知道属性 AccountSkuId 必须替换为 SkuPartNumber

我将新代码复制到 demoscript.ps1 中旧代码的下方,以便于比较输出(图 2)

[玩转系统] 使用 GitHub Copilot 将 PowerShell 脚本升级到 Microsoft Graph PowerShell SDK

从这张截图来看,这一点并不明显,但我遇到的一个问题是 Copilot 使用的范围不正确。 Copilot 建议使用Directory.Read.All。但是,列出订阅的 SKU API 的文档指出,此 API 调用需要 Organization.Read.All 权限。除了官方 Microsoft 文档之外,请阅读有关如何确定您需要的 Microsoft Graph 权限的文章,了解有关确定 Cmdlet 所需范围的详细说明。

我发现自己与 GitHub Copilot “聊天”,几乎就像是结对编程伙伴一样。我想确保下次我询问时,它会提供正确的范围。

[玩转系统] 使用 GitHub Copilot 将 PowerShell 脚本升级到 Microsoft Graph PowerShell SDK

虽然我有正确的范围,但 Github Copilot 写出了该范围的完整 URI,如图 2 所示。我将其更改为使用较短的版本,即 Organization.Read.All(图 3)。我还添加了“NoWelcome”参数开关,以最大限度地减少脚本连接到图表时的输出。除此之外,新旧脚本的输出是相同的。当您对测试通过感到满意后,您可以开始测试整个脚本以将其升级到 Microsoft Graph PowerShell SDK。

原始代码和更新版本的副本可以在此 Github Gist 上找到。

Github Copilot 稳步提升

当我一年多前开始使用 GitHub Copilot 时,我在玩了大约一周后放弃了它。这是一个可爱的玩具,但它带来的问题比它解决的问题还要多。大约 6 个月前,我决定再试一次,代码完成的改进令人难以置信。大约 90% 的情况下,这些建议都是正确的。

然而,最终让我开始每月支付 10 美元的功能是 GitHub Copilot Chat,该功能于今年早些时候在 Microsoft Build 上宣布,现在可供所有人使用。请查看这篇文章,了解有关该公告的详细信息。随着 Copilot Chat 的推出,我不再需要记住一堆键盘快捷键或在 IDE 中挖掘菜单来重构代码。我可以简单地要求 Copilot Chat“向此函数添加基于注释的帮助”,它会自动添加帮助,并为我正在编写的函数的描述和概要提供一个很好的起点(图 4)。

[玩转系统] 使用 GitHub Copilot 将 PowerShell 脚本升级到 Microsoft Graph PowerShell SDK

我不希望范围成为参数,因此我要求 Copilot Chat 将其删除(图 5)。

[玩转系统] 使用 GitHub Copilot 将 PowerShell 脚本升级到 Microsoft Graph PowerShell SDK

当我编写代码时,GitHub Copilot 为我做了很多琐碎的工作,当我在无法访问 GitHub Copilot 的 IDE 中工作时,我发现自己感到沮丧。

GitHub Copilot 完美吗?绝对不是。它生产的所有东西都应该经过测试和验证。开发测试用例并实施它们应该始终是脚本开发的一部分。

虽然很微妙,但我可以看出它改变了我编写代码的方式,对我来说它每月 10 美元绝对值得。如果您至少每周编写 PowerShell 代码,我会说 GitHub Copilot 是一项值得的投资。如果您还没有完全做到这一点,请在 3 到 6 个月内再试一次,您可能会感到惊喜。

Active Directory 的网络安全风险管理

了解如何通过这些网络安全风险管理解决方案预防 AD 攻击并从中恢复。

您需要 登录账户 后才能发表评论

取消回复欢迎 发表评论:

关灯