PowerShell脚本转换.vss到.vssx执行报错,求排查解决
VSS转VSSX PowerShell脚本报错修复
原脚本存在语法错误导致解析失败,以下是具体问题和修正方案:
原脚本的错误点
$directoryToUpdate='C:\office\Stencils\*':路径末尾多余*,后续拼接会生成无效路径,应改为C:\office\StencilsNew-Object -comVisio.Application:参数格式错误,-com与Visio.Application间缺少空格,正确写法为-com Visio.Applicationget-childitem "$directoryToUpdate\*.vss" -Recurse":末尾多了一个双引号,导致括号不匹配;同时路径拼接逻辑冗余,建议改用-Filter参数指定.vss文件类型[io.path]::ChangeExtension($vssFile,'.vssx'):传入的是FileInfo对象,ChangeExtension方法需要字符串格式的文件路径,应改为$vssFile.FullName- 变量大小写不一致:
Write-Host "Working on $vssfile"中的$vssfile与循环变量$vssFile大小写不同,虽PowerShell默认不区分大小写,但统一写法可避免潜在问题
修正后的完整脚本
$directoryToUpdate = 'C:\office\Stencils' $visio = New-Object -com Visio.Application foreach ($vssFile in (Get-ChildItem -Path $directoryToUpdate -Filter *.vss -Recurse)) { Write-Host "Working on $vssFile" $doc = $visio.Documents.Open($vssFile.FullName) $vssxFileName = [io.path]::ChangeExtension($vssFile.FullName, '.vssx') $doc.SaveAs($vssxFileName) $doc.Close() }
补充说明
- 执行脚本前需确保已安装Visio,且PowerShell具备足够文件访问权限(必要时以管理员身份运行)
- 转换完成后可手动验证部分VSSX文件,确认是否能正常打开
内容的提问来源于stack exchange,提问作者Jake Statefarm
相关产品推荐
相关产品推荐

