PowerShell使用New-ISOFile创建ISO超出大小限制如何解决?
问题根因
该报错由两个问题共同导致:
- IMAPI2(Windows内置光盘镜像编程接口)默认使用Joliet文件系统,最大仅支持2GB容量,WSUS更新数据通常远超该上限
- 你的代码存在重复添加文件的逻辑错误,同一目录被多次写入镜像,额外占用容量触发大小限制
修复步骤
1. 调整镜像文件系统格式,解除容量上限
在初始化$image对象的代码段后,添加UDF格式配置,UDF 2.5支持最大2TB容量,完全满足WSUS数据存储需求:
## 原初始化代码 try { $image = New-Object -ComObject IMAPI2FS.MsftFileSystemImage -Property @{VolumeName=$title} -ErrorAction Stop Write-Verbose ("initialised.") } # try catch { throw ("Failed to initialise image. " + $_.exception.Message) } # catch ## 新增下面的配置代码 # 指定使用UDF 2.5文件系统,替换默认2GB限制的Joliet格式 $image.FileSystemsToCreate = 4 $image.UDFRevision = 0x250 # 若需要更大容量可手动指定可用块数,按2048字节/块计算,如下为100GB容量配置 # $image.FreeMediaBlocks = 52428800
2. 修复重复添加文件的逻辑错误
原代码对每个目录执行了3次写入操作,既导致容量异常占用,也会出现路径冲突问题,直接替换原文件添加逻辑即可:
## 替换原WSUSMetaData添加逻辑 ## 创建WSUSMetaData子目录,将本地内容写入该子目录 $DirWSUSMetaData = $image.CreateDirectoryItem("WSUSMetaData") $DirWSUSMetaData.AddTree($WSUSMetaDataLocation, $true) ## 替换原WSUSContent添加逻辑 ## 创建WSUSContentData子目录,将本地内容写入该子目录 $DirWSUSContent = $image.CreateDirectoryItem("WSUSContentData") $DirWSUSContent.AddTree($WSUSContentLocation, $true)
注意:删除原代码中后续多余的
foreach循环写入逻辑,AddTree方法已经递归添加了对应目录下的所有文件,无需重复操作。
3. 其他小问题修复
- 修正拼写错误:报错提示中的
Faile改为Failed,exeption改为exception - 移除不存在的变量引用:删除
Write-Verbose ("Processing nested system " + $vmName)行,$vmName变量未定义无意义
内容的提问来源于stack exchange,提问作者cstewart28
相关产品推荐
相关产品推荐

