PowerShell 技能连载 - Azure Functions 无服务器自动化

适用于 PowerShell 7.0 及以上版本

在传统运维模式中,自动化脚本通常运行在虚拟机或容器上,无论脚本是否执行,底层计算资源都在持续消耗成本。对于定时清理、事件响应、API 集成等轻量级任务来说,这种模式既浪费资源又增加了运维负担——你不仅要维护脚本本身,还要操心服务器的补丁更新、高可用和扩缩容。

Azure Functions 是微软 Azure 提供的无服务器(Serverless)计算平台,支持使用 PowerShell 作为运行时语言。函数只在被事件触发时才执行,按实际运行时间和调用次数计费,空闲时不产生任何费用。PowerShell 运行时内置了 Az 模块和大量常用 cmdlet,让你可以直接在云端编写和运行自动化逻辑,无需自行管理基础设施。

本文将从三个实战场景出发:搭建 Azure Functions PowerShell 项目并编写 HTTP 触发器函数、使用定时触发器和队列触发器处理周期性与事件驱动任务,以及部署、监控与错误处理的最佳实践。

阅读更多

PowerShell 技能连载 - WSL 集成与互操作

适用于 PowerShell 7.0 及以上版本

Windows Subsystem for Linux (WSL) 已经从一个实验性的兼容层发展为成熟的 Linux 运行环境。WSL2 基于真正的 Linux 内核,支持 systemd、Docker 以及绝大多数原生 Linux 应用。对于日常在 Windows 上工作的运维工程师和开发者来说,WSL 提供了一条低成本的 Linux 工具链接入路径——无需双系统,无需虚拟机管理程序的开销。

PowerShell 与 WSL 的互操作不仅限于简单的命令转发。借助 wsl 命令行工具、\\wsl$ 网络路径以及双向的进程调用机制,可以在一个脚本中自由混合 Windows 和 Linux 工具。例如,用 PowerShell 采集 Windows 事件日志,再通过管道传给 WSL 中的 awk 做文本分析;或者反过来,在 WSL 中编译项目后调用 PowerShell 部署到 Windows 服务。这种混合工作流在 DevOps 和跨平台自动化场景中尤为实用。

本文将从实例管理、跨平台数据交换和自动化部署三个维度,展示 PowerShell 与 WSL 深度集成的实战技巧。

阅读更多

PowerShell 技能连载 - .NET 互操作深入

适用于 PowerShell 7.0 及以上版本

PowerShell 本质上是 .NET 生态的一部分,每一个变量、每一个对象都运行在 CLR 之上。虽然日常工作中我们习惯使用 cmdlet 来完成任务,但在面对高性能计算、底层系统调用或需要精确控制内存的场景时,直接使用 .NET 类往往能获得数量级的性能提升。

理解 .NET 互操作不仅是突破 cmdlet 限制的手段,更是深入理解 PowerShell 运行时行为的钥匙。当你知道 [System.IO.File]::ReadAllText() 比同等的 Get-Content 快数十倍时,你就能够在脚本中做出更明智的选择——何时追求简洁,何时追求性能。

本文将从三个维度展开:直接调用 .NET 类实现高性能操作、利用反射动态调用方法和创建实例、以及通过 P/Invoke 调用原生 Win32 API,帮助你全面掌握 PowerShell 中的 .NET 互操作能力。

阅读更多

PowerShell 技能连载 - Azure DevOps 集成

适用于 PowerShell 5.1 及以上版本

Azure DevOps 是微软提供的一站式 DevOps 平台,涵盖了 Boards(工作项跟踪)、Repos(代码仓库)、Pipelines(CI/CD 流水线)、Test Plans(测试管理)和 Artifacts(制品管理)五大核心服务。在企业级开发流程中,团队往往需要通过脚本自动化地与 Azure DevOps 交互,例如批量创建工作项、触发流水线、查询构建状态或管理代码仓库分支策略。

虽然 Azure DevOps 提供了功能完善的 Web 界面和 CLI 工具(az devops),但 PowerShell 凭借其强大的对象处理能力和与其他 Windows/Azure 服务的无缝集成,仍然是许多运维和开发团队的首选自动化工具。通过 Azure DevOps REST API,我们可以在 PowerShell 中完成几乎所有的平台操作,并将这些操作编排到更大的自动化工作流中。

本文将介绍如何使用 PowerShell 调用 Azure DevOps REST API,涵盖身份认证与连接管理、工作项(Work Item)的批量操作、Pipeline 的触发与状态监控,以及代码仓库的分支策略管理。每个场景都配有可直接运行的代码示例和执行结果演示。

阅读更多

PowerShell 技能连载 - 参数补全器

适用于 PowerShell 5.1 及以上版本

在 PowerShell 日常使用中,Tab 补全(Tab Completion)是最常用的交互功能之一。当我们输入 cmdlet 名称、参数名或文件路径时,按下 Tab 键就能自动补全,极大提高了命令行操作效率。然而,对于自定义函数中的参数值(例如要求用户输入一个服务名、一个环境名称或一个日志级别),PowerShell 默认无法提供智能提示,用户必须手动输入,这不仅降低了效率,还容易出错。

Argument Completer(参数补全器)正是解决这一问题的利器。通过为函数参数注册补全逻辑,我们可以在用户按 Tab 或 Ctrl+Space 时,动态展示可选值列表。这些值可以来自固定集合、运行时计算结果,甚至远程 API 查询,让自定义函数拥有和内置 cmdlet 一样的 IntelliSense 体验。

本文将从基础的 [ArgumentCompleter] 属性入手,逐步介绍 Register-ArgumentCompleter 注册全局补全、结合动态数据源构建高级补全器,帮助你为团队工具库打造专业级的参数提示体验。

阅读更多

PowerShell 技能连载 - CI/CD 流水线集成

适用于 PowerShell 7.0 及以上版本(跨平台)

持续集成与持续交付(CI/CD)是现代 DevOps 实践的核心环节。无论是 GitHub Actions、Azure DevOps 还是 GitLab CI,流水线的编排本质上都是将一系列自动化步骤串联起来:代码拉取、依赖安装、测试执行、构建打包、环境部署。PowerShell 作为跨平台的脚本语言,天然适合承担这些步骤的”粘合剂”角色——它既能调用系统命令,又能解析结构化数据,还能与 REST API 交互,是构建 CI/CD 流水线的利器。

很多团队在编写 CI/CD 脚本时仍然依赖 Bash 或 Python,但 PowerShell 在 Windows 和 Linux 上行为一致的特性,加上对 JSON、XML、YAML 的原生支持,使得同一套脚本可以在不同运行器(runner)上无缝切换。尤其是在混合环境中管理 .NET 项目、Azure 资源或 Windows 工作负载时,PowerShell 的优势更加明显。将流水线逻辑封装为 PowerShell 模块后,还能实现跨仓库复用,减少重复维护成本。

本文将通过三个实战场景,展示如何用 PowerShell 构建可测试、可复用、可观测的 CI/CD 自动化脚本:包括流水线阶段编排与结果报告、版本号自动管理、以及部署前置检查。每个示例都尽量贴近真实项目中的使用方式,帮助你快速将 PowerShell 集成到现有流水线中。

阅读更多
PowerShell 技术 QQ 群