公司动态

告别“每台机器一套脚本“:PowerShell 容器管理实战指南

📅 2026/8/30 13:41:23
告别“每台机器一套脚本“:PowerShell 容器管理实战指南
告别每台机器一套脚本PowerShell 容器管理实战指南【免费下载链接】PowerShellPowerShell for every system!项目地址: https://gitcode.com/GitHub_Trending/po/PowerShellPowerShell 是微软开源的跨平台命令行与脚本环境配合 Docker 可以统一完成 Windows 与 Linux 上的容器管理。这是一篇面向新手和普通用户的 PowerShell 容器管理上手教程从安装、跑通容器到把一个自研小工具封装成 Cmdlet 放进镜像全流程走一遍。它解决什么问题新手做容器运维时最常见的三件事Linux 机器上敲 docker、Windows 机器上敲 docker脚本却写了两套容器输出是一坨字符串处理起来很痛苦临时脚本散落在各处没法复用。痛点PowerShell Docker 的做法跨平台脚本各写一套同一份.ps1脚本在 Windows/Linux/macOS 上直接运行docker ps输出难以二次加工容器输出转成 .NET 对象管道里直接筛选、聚合、写文件小工具无法版本化复用封装成 Cmdlet 或模块打进自己的镜像里随容器分发准备工作先让 pwsh 跑起来场景假设你有一台全新的 Linux 机器上面已经装好 Docker现在要开始容器管理。第一步拿到 PowerShell 仓库并执行自带安装脚本git clone https://gitcode.com/GitHub_Trending/po/PowerShell cd PowerShell bash tools/install-powershell.sh安装脚本的位置在 tools/install-powershell.sh它支持 Linux、macOS 和 Windows也支持用-preview参数安装预览版。装完验证两件事$PSVersionTable.PSVersion # 确认版本建议 7.x Get-Command docker # 确认 docker CLI 可用第二条命令是为了后面所有容器操作都能直接在 pwsh 里敲。如果这里查不到 docker先别往下走。核心工作流从拉镜像到跑一个自研 Cmdlet下面用一个真实场景串联全流程团队有一个内部小工具你希望它随容器镜像一起分发并在容器里以 Cmdlet 的形式被调用。第 1 步启动并操作 PowerShell 容器在 pwsh 里直接管理容器生命周期脚本在两种系统上写法完全一致# 拉取官方 PowerShell 镜像 docker pull mcr.microsoft.com/powershell # 起一个交互容器 docker run -it mcr.microsoft.com/powershell pwsh # 查看与停止容器 docker ps docker stop container_id第 2 步把小工具写成 Cmdlet不用容器也能先本地验证。以发送问候这类极简工具为例核心代码只有几行[Cmdlet(VerbsCommunications.Send, Greeting)] public class SendGreetingCommand : Cmdlet { [Parameter(Mandatory true)] public string Name { get; set; } protected override void ProcessRecord() { WriteObject(Hello Name !); } }第 3 步配好 NuGet 源再装依赖这一步最容易卡住默认源里没有 PowerShell 相关包。先添加 PowerShell Core 专用源再安装核心自动化库第 4 步导入并调用编译出 dll 后在 pwsh 里一条命令导入一条命令调用Import-Module ./SendGreetingStd.dll Send-Greeting -Name from container把这套 dll 和模块复制进你自己的 Dockerfile就能实现镜像自带工具、docker run即用。镜像构建的 Dockerfile 官方放在了 PowerShell-Docker 仓库本仓库的 docker/ 目录保留了 tarball 安装脚本 InstallTarballPackage.sh可以参考它把指定版本的 pwsh 打进去。常见问题与避坑装完敲pwsh提示找不到命令通常是软链接没建好。tarball 方式安装时InstallTarballPackage.sh 会把/usr/bin/pwsh指到安装目录手动安装的话记得补上这一步并确认该路径在PATH里。容器里跑的是新版还是旧版用$PSVersionTable.PSVersion确认。旧镜像里可能还是 Windows PowerShell 5.1语法和模块都不兼容 7.x 脚本拉镜像时注意选对 tag。Import-Module报类型找不到九成是 dll 的目标框架和容器里的运行时对不上。容器里是什么版本的 pwshdll 就编译成什么目标框架别混用。脚本在本地能跑、进容器就失败先检查相对路径和换行符Windows 编辑的.ps1带 CRLF 一般不会有问题但 shell 脚本.sh必须转成 LF。实验性功能想试又不敢开用Get-ExperimentalFeature查看列表按需Enable-ExperimentalFeature只影响当前会话关掉终端即失效放心试。延伸与生态按使用深度接下来可以去看这些真实目录构建相关Linux 上从源码构建的流程在 docs/building/linux.md测试相关Pester 测试写法见 docs/testing-guidelines/WritingPesterTests.md功能测试全集在 test/powershell/版本记录想看每个版本新增了什么翻 CHANGELOG/完整文档索引docs/一个建议的下一步把你手头最常敲的三四个容器操作比如看某容器日志并写 CSV写成第一版.ps1跑通后再考虑封装成模块。从能跑起来到跑顺了中间只隔着一两份被反复修改的脚本。【免费下载链接】PowerShellPowerShell for every system!项目地址: https://gitcode.com/GitHub_Trending/po/PowerShell创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考