如何通过PowerShell实现MECM应用的GUI式克隆?
实现MECM应用克隆的PowerShell可行方案
你之前尝试的两种方法失败,核心原因是MECM应用的唯一标识(CI_UniqueID)在导出包中是固定值,直接导入会触发系统的重复检测或覆盖逻辑。要实现和GUI右键复制完全一致的效果,必须修改导出包内的核心标识与名称,再执行导入操作。
具体实现步骤与代码
1. 定义基础参数
先设置原应用名称、临时文件路径,同时自动获取原应用所在目录:
$originalAppName = "2025_PS script" $tempExportZip = "C:\temp\original_app.zip" $tempExtractDir = "C:\temp\app_extract" $newAppName = "$originalAppName - Copy" # 自动获取原应用的所在目录 $originalApp = Get-CMApplication -Name $originalAppName $targetFolder = $originalApp.ObjectPath
2. 导出原应用到临时路径
Export-CMApplication -Name $originalAppName -Path $tempExportZip
3. 解压并修改导出包内的核心配置
MECM的应用配置存于导出ZIP的Application.xml中,需要修改唯一ID和显示名称:
# 创建临时解压目录并解压ZIP New-Item -Path $tempExtractDir -ItemType Directory -Force | Out-Null Expand-Archive -Path $tempExportZip -DestinationPath $tempExtractDir -Force # 生成新的全局唯一ID(GUID)作为新应用的标识 $newCIUniqueID = [guid]::NewGuid().ToString() # 读取并修改XML文件 $xmlPath = Join-Path $tempExtractDir "Application.xml" $xmlContent = [xml](Get-Content $xmlPath) # 修改应用显示名称 $xmlContent.Application.DisplayInfo.LocalizedDisplayName.Text = $newAppName # 替换核心唯一标识 $xmlContent.Application.CI_UniqueID = $newCIUniqueID # 重置CI_ID为0,让MECM自动分配新ID $xmlContent.Application.CI_ID = 0 # 保存修改后的XML $xmlContent.Save($xmlPath)
4. 重新打包修改后的内容
$modifiedZipPath = "C:\temp\cloned_app.zip" Compress-Archive -Path (Join-Path $tempExtractDir "*") -DestinationPath $modifiedZipPath -Force
5. 导入克隆的应用到原目录
Import-CMApplication -FilePath $modifiedZipPath -ImportActionType DirectImport -FolderPath $targetFolder
6. 清理临时文件(可选)
Remove-Item $tempExportZip -Force Remove-Item $tempExtractDir -Recurse -Force Remove-Item $modifiedZipPath -Force
关键逻辑说明
- 必须修改
CI_UniqueID:这是MECM判断应用唯一性的核心字段,生成新GUID才能让系统识别为全新应用 - 指定
FolderPath:确保克隆后的应用自动存放在原应用的同目录下 - 重置
CI_ID:避免导入时因ID冲突触发异常,MECM会自动为新应用分配有效ID
内容的提问来源于stack exchange,提问作者Bbb
相关产品推荐
相关产品推荐

