本文是利用 AI 创作的技术解析与实现示例。所发布的代码与步骤基于一手资料构建,但未经笔者在实机上进行运行验证。根据环境和版本的不同,实际运行情况可能会有所差异。
随着 PowerShell 自动化基础架构在企业内部的普及,获取、验证和分发包的重要性已经变得与脚本本身同等重要。现代安全指南将包源(Feed)视为软件供应链的一部分。本文将基于官方博客发布的内容,梳理安全环境下的 PSResourceGet 最佳实践以及未来的路线图。
【计划在 Windows 环境中验证】
PSResourceGet 概述与设计理念
PSResourceGet 是面向 PowerShell 的现代包管理解决方案。其主要对象包括:
PowerShell 模块、脚本以及 DSC(Desired State Configuration)资源
包含 NuGet 格式源和 OCI 注册表在内的多种存储库类型
明确的存储库信任设置
在生产环境使用前对包进行审查、镜像和批准的企业场景
PSResourceGet 的核心设计原则在于支持多种存储库选项,并将“包的发现”与“包的消费”分离开来。通过这种分离,可以在不阻碍包发现的前提下,设置验证、审批和治理关卡。
flowchart TD
A["PowerShell Gallery / 发现"] --> B["企业内部中央私有存储库 / 审查与批准"]
C["Microsoft Artifact Registry / MAR"] --> B
B --> D["生产系统 / PSResourceGet"]
安全环境下的最佳实践与存储库角色
一手资料建议根据环境划分存储库的角色并设置信任边界。
Microsoft Artifact Registry (MAR)
对于微软拥有和发布的 PowerShell 模块而言,Microsoft Artifact Registry (MAR) 是值得信赖的源。MAR 具有以下特征:
微软控制的发布管道
强大的来历(Provenance)与所有权保证
适合企业自动化的运维可靠性
相较于 PowerShell Gallery 提高了可用性
符合 OCI 标准的注册表与 Azure Container Registry (ACR)
PSResourceGet 支持符合 OCI 标准的注册表,企业可以复用已经在容器镜像等方面建立信任的基础设施。目前支持 Azure Container Registry (ACR) 作为私有存储库,未来计划通过采用 .NET ORAS 库,实现对任意容器注册表(如 GitHub Container Registry 等)的支持。
PowerShell Gallery(社区存储库)
PowerShell Gallery 作为发现、实验和社区协作的场所是不可或缺的,但从安全角度来看,应当对其采取以下态度:
默认不信任
社区所有
不适合作为生产环境的依赖
由于 Gallery 不在可用性 SLA 的保障范围内,因此不建议直接从生产系统中使用它。比较合适的运维方式是将其作为开发和发现的接入源(Intake Source),仅将批准的包提升到企业的受信任存储库中。
企业包工作流的组成部分
在安全的企业模式中,会引入“中央私有存储库”作为生产系统的唯一可信源。包的生命周期整理如下:
发现 (Discovery): 开发者从 PowerShell Gallery、MAR、可信合作伙伴等处查找包。
审查与批准 (Review and approval): 评估安全态势、许可证、兼容性和质量。
提升至企业源 (Promotion): 将批准的包镜像或重新发布到中央存储库中,并进行版本锁定和扫描。
生产消费 (Production consumption): 生产系统通过 PSResourceGet 进行安装和更新,并且仅信任企业存储库。
此外,作为工作流的改进,设计阶段的工作还包括:在 .psd1 中指定跨存储库依赖关系,以及设计使重新发布到中央源的包能够从原始源获取更新的机制。
PSResourceGet 1.3 (vNext) 路线图
在 PSResourceGet 1.3 中,计划推出增强企业级包管理的更新。预览版 PSResourceGet 1.3-preview1 包含以下更新:
将 MAR 添加为默认的已注册存储库
为
Install-PSResource工作流添加并行执行(并发执行)功能为 PSResourceGet 添加 DSC V3 资源
主要变更与功能
一流的 DSC 资源支持: 从传统的
RequiredResourceFiles等机制过渡,实现对配置产物的清晰且一致的处理。并行安装与性能提升: 减少大规模自动化或 CI/CD 场景中的摩擦。
ORAS 支持: 强化与 OCI 注册表的集成,并与容器生态系统保持一致。
跨存储库依赖关系: 结合“开发时允许广泛的存储库访问,而生产时进行限制”的策略,减少对上游依赖关系的复制。
终止支持 Windows PowerShell: 从 1.3 版本开始,PSResourceGet 将专注于 PowerShell (Core),并终止对 Windows PowerShell 的支持。这降低了发布和验证过程的复杂性,以更好地适应跨平台和云原生场景。
总结
一手资料阐述了基于“PowerShell 包是供应链的一部分”这一认知,设置明确且具强制性的信任边界的重要性。下一步的行动建议是:清点环境中可到达的存储库,确定单一可信的生产源,并在此基础上配置 PSResourceGet 的信任设置。

コメント