咨询SCCM插件获取命令行参数方法及PackageID传递机制
排查SCCM 2012右键工具PackageID传递机制
核心逻辑梳理
SCCM控制台的右键工具本质是通过控制台扩展注册关联对象与执行脚本/程序的,PackageID的传递依赖注册时配置的参数占位符,以及脚本对命令行参数的接收逻辑。
具体排查步骤
检查右键工具的注册配置
打开注册表编辑器,定位到SCCM控制台扩展的注册表路径:HKLM\Software\Microsoft\ConfigMgr12\AdminUI\Console\Extensions\Actions
找到对应右键菜单的GUID子项,查看CommandLine值,确认是否包含PackageID的占位符(常见为%ID%或{0})。比如正确的命令行配置可能是:"C:\Path\To\Your\CompiledScript.exe" %ID%这里
%ID%会被SCCM控制台自动替换为选中包的PackageID。验证脚本的参数接收逻辑
编译前的PowerShell脚本中,需确保正确接收命令行参数:- 若用默认参数数组,可直接输出
$args[0]获取第一个参数(即PackageID); - 更规范的方式是用
param块定义参数:param( [Parameter(Mandatory=$true)] [string]$PackageID ) # 后续逻辑使用$PackageID变量
编译后的EXE会保留参数传递逻辑,可在脚本中添加调试输出(如
Write-Host "Received PackageID: $PackageID"),运行后查看控制台输出确认是否接收到正确值。- 若用默认参数数组,可直接输出
确认SCCM对象属性映射
在SCCM控制台中,右键目标包→属性,查看Package ID字段的值,对比脚本接收到的参数是否一致,以此验证占位符替换是否正常。
常见问题点
- 若注册时未配置占位符,脚本自然无法收到PackageID;
- PowerShell Studio编译时若未勾选“传递命令行参数”选项,可能导致参数丢失;
- 脚本中误用
$Commandline变量(SCCM不会主动传递这个变量,需自己从命令行参数解析)。
内容的提问来源于stack exchange,提问作者MusicMan
相关产品推荐
相关产品推荐

