PowerShell 技能连载 - Microsoft Graph API 高级操作

适用于 PowerShell 7.0 及以上版本,需要 Microsoft.Graph 模块

Microsoft Graph 已经成为访问 Microsoft 365 和 Entra ID 数据的统一 API 网关。无论是用户管理、邮件处理、团队协作还是安全合规,几乎所有 Microsoft 云服务的数据和操作都可以通过 Graph API 完成。对于 PowerShell 运维人员来说,掌握 Graph API 的高级用法意味着能够构建更高效、更可靠的自动化流程。

然而,在实际生产环境中,简单的 API 调用往往不够。当需要处理成千上万个用户对象、执行批量许可分配、或者生成复杂的安全审计报告时,必须考虑认证效率、请求优化、分页处理和错误重试等工程化问题。本文将围绕这些高级场景,分享一套可直接用于生产环境的 Graph API 操作模式。

阅读更多

PowerShell 技能连载 - Q1 技术回顾与展望

适用于 PowerShell 5.1 及以上版本

2026 年第一季度即将画上句号。回顾这三个月,PowerShell 生态在多个方向上都有值得关注的进展:PowerShell 7.x 持续迭代,跨平台能力进一步增强;AI 辅助编程工具链加速成熟,越来越多团队开始将大语言模型嵌入到自动化工作流中;社区在安全基线、基础设施即代码(IaC)等领域的最佳实践也在不断沉淀。

每个季度末做一次技术盘点,不仅是对过往工作的梳理,更是为下个阶段的学习和工作明确方向。本文将分三个部分展开:Q1 技术盘点、实战经验总结以及 Q2 学习路线规划,并附上可直接运行的 PowerShell 脚本来帮助你完成自己的回顾与展望。

阅读更多

PowerShell 技能连载 - Excel 自动化报表

适用于 PowerShell 5.1 及以上版本

在企业环境中,Excel 是最通用的数据交换格式之一。无论是系统运维的周报、安全审计的统计报告,还是业务分析的汇总数据,Excel 报表几乎无处不在。然而,手动从多个数据源收集信息、格式化表格、生成图表并分发报表,这个过程既耗时又容易出错。

ImportExcel 模块的出现彻底改变了这一局面。它是一个纯 PowerShell 实现的 .xlsx 文件操作库,无需安装 Microsoft Excel 即可完成读取、写入、图表生成、条件格式等操作。这意味着你可以在 Windows Server Core 甚至 Linux 服务器上运行报表生成脚本,完全不依赖 Office 组件。

本文将通过三个递进的场景,带你掌握从基础数据导入导出到自动化报表分发的完整工作流。无论你是需要将系统日志转换为可读报表,还是要定期向管理层发送格式化的运维报告,这些技巧都能帮你节省大量时间。

阅读更多

PowerShell 技能连载 - 2025 年度回顾与 2026 展望

适用于 PowerShell 5.1 及以上版本

2025 年对 PowerShell 社区而言是里程碑式的一年。PowerShell 7.5 正式发布,全面拥抱 .NET 8 带来的性能提升与新 API,同时官方团队持续推动跨平台体验的统一。云原生、容器化和 GitOps 已经不再只是 buzzword,而是日常运维的基本范式,PowerShell 在其中扮演了越来越重要的胶水语言角色。

与此同时,AI 大模型的爆发深刻改变了自动化脚本的工作方式。从调用 OpenAI API 做日志分析,到用本地模型生成配置模板,再到 IDE 中的智能补全,AI 工具链已经深度融入 PowerShell 开发者的日常工作流。这一年我们见证了脚本编写方式从”查文档写代码”到”描述需求生成代码”的范式转变。

站在岁末年初的节点,本文将回顾 2025 年 PowerShell 生态的关键技术变化,梳理当前最实用的 AI 集成与云原生实战技巧,并展望 2026 年值得关注的趋势和学习方向。

阅读更多

PowerShell 技能连载 - Webhook 集成

适用于 PowerShell 5.1 及以上版本

Webhook 是现代系统中实现事件驱动通知的主流方式。无论是 CI/CD 流水线的构建结果、监控系统的告警事件,还是业务系统的关键操作日志,都可以通过 Webhook 推送到指定端点。借助 PowerShell 的 Invoke-RestMethodInvoke-WebRequest,我们可以非常方便地向各类平台发送 Webhook 通知,无需安装额外的 SDK。

在企业环境中,团队沟通工具(如 Microsoft Teams、Slack、钉钉)普遍支持 Incoming Webhook。运维和开发人员常常需要在脚本执行完毕后自动发送通知,例如部署成功、备份完成、磁盘空间不足等场景。将这些通知流程封装成可复用的 PowerShell 函数,不仅提高工作效率,还能确保团队及时获知系统状态变化。

本文将从基础概念出发,逐步介绍如何使用 PowerShell 发送 Webhook 请求,包括消息格式化、错误处理、重试机制,以及如何构建一个通用的 Webhook 通知模块,适配多个目标平台。

阅读更多

PowerShell 技能连载 - Excel 报表自动化

适用于 PowerShell 5.1 及以上版本(Windows)

在企业运维和数据分析场景中,定期生成 Excel 报表是一项高频需求。传统的做法是手动导出 CSV 再用 Excel 打开,或者借助 COM 对象操作 Excel 应用程序——前者丢失格式信息,后者需要安装 Office 且速度慢、容易卡死。有没有一种方式既能生成带格式的原生 .xlsx 文件,又不需要安装 Excel 呢?

答案是使用 EPPlus 库。EPPlus 是一个成熟的 .NET 开源组件,可以直接在内存中创建、读写 Excel 文件,支持单元格样式、公式、图表、数据验证等高级功能。通过 PowerShell 加载 EPPlus 的 DLL 文件,我们就能以纯脚本的方式完成复杂的报表生成任务,非常适合无人值守的自动化场景。

本文将从安装 EPPlus 开始,逐步演示如何用 PowerShell 生成一份包含表头样式、数据填充、条件格式和自动筛选的专业级 Excel 报表。

阅读更多

PowerShell 技能连载 - 通知与告警系统

适用于 PowerShell 5.1 及以上版本

运维自动化的最后一环是通知——部署完成需要告知团队、服务异常需要唤醒值班人员、磁盘满了需要及时处理。PowerShell 可以通过多种渠道发送通知:邮件(SMTP)、Webhook(Slack/Teams/钉钉)、Windows Toast 通知、甚至短信。构建统一的通知系统,让所有脚本复用同一套告警机制,是提升运维响应效率的关键。

本文将讲解 PowerShell 中的各种通知方式和统一的告警系统设计。

阅读更多

PowerShell 技能连载 - Microsoft Graph API 集成

适用于 PowerShell 5.1 及以上版本,需安装 Microsoft.Graph 模块

Microsoft Graph 是 Microsoft 365 平台的统一 API 网关——它整合了 Azure AD(现称 Entra ID)、Exchange Online、SharePoint、Teams、OneDrive 等所有 Microsoft 365 服务的数据和操作。通过 PowerShell 的 Microsoft.Graph 模块,运维人员可以用脚本化管理用户、组、许可证、设备策略等,替代传统的多个独立模块。

本文将讲解 Microsoft Graph PowerShell 的连接、用户管理、组操作和常用自动化场景。

阅读更多

Excel 列号和数字互相转换

Excel 的列号是采用“A”、“B”……“Z”、“AA”、“AB”……的方式编号。但是我们在自动化操作中,往往希望用数字作为列号。我们可以用 PowerShell 来实现 Excel 的列号和数字之间的互相转换。

需求归纳

Excel 列号 -> 数字

A   1
AB  28
AC  29

数字 -> Excel 列号

1   A
2   B
24  Y
26  Z
27  AA
28  AB

算法分析

  • Excel 列号 -> 数字
    • 用 ASCII 编码对输入的字符串解码,得到一个数字型数组。
    • 用 26 进制对数组进行处理(逐位 *= 26,然后累加)。
  • 数字 -> Excel 列号
    • 用 26 进制对数字进行处理(不断地 /= 26,取余数),得到数字型数组。
    • 将数字型数组顺序颠倒。
    • 用 ASCII 编码对数字型数组编码,得到 Excel 风格的列号。

源代码

转换函数:

function ConvertFrom-ExcelColumn ($column) {
    $result = 0
    $ids = [System.Text.Encoding]::ASCII.GetBytes($column) | foreach {
        $result = $result * 26 + $_ - 64
    }
    return $result
}

function ConvertTo-ExcelColumn ($number) {
    $ids = while ($number -gt 0) {
        ($number - 1) % 26 + 1 + 64
        $number = [math]::Truncate(($number - 1) / 26)
    }

    [array]::Reverse($ids)
    return [System.Text.Encoding]::ASCII.GetString([array]$ids)
}

测试代码:

echo "A`t$(ConvertFrom-ExcelColumn A)"
echo "AB`t$(ConvertFrom-ExcelColumn AB)"
echo "AC`t$(ConvertFrom-ExcelColumn AC)"

echo ''

@(1..2) + @(25..28) | foreach {
    echo "$_`t$(ConvertTo-ExcelColumn $_)"
}

执行结果:

A   1
AB  28
AC  29

1   A
2   B
25  Y
26  Z
27  AA
28  AB

您也可以在这里下载完整的脚本。

PowerShell 技术 QQ 群