如何通过SCCM/ConfigMgr脚本将文件复制到Program Files (x86)
问题解决:复制文件到Program Files (x86)目录失败
问题根源
复制失败并非路径空格导致,而是脚本存在语法错误和文件名不一致问题:
- 路径错误添加单引号:
C:\Program Files'(x86')\...会让PowerShell识别无效路径 - Remove-Item命令的路径未闭合引号,且文件名拼写与复制目标不一致(
AdobeUpdater.OverridevsAdobeUpdater.Overrides) - 即使SCCM以系统上下文运行,路径语法错误会直接导致操作失败
修正后的脚本
$URL = "Internal FTP Server" # 修正路径的单引号错误 $TestPath86 = Test-Path -Path "C:\Program Files (x86)\Common Files\Adobe\UpdateResources" $TestPath64 = Test-Path -Path "C:\ProgramData\Adobe\AAMUpdater\1.0" $Dest = "C:\Program Files (x86)\Common Files\Adobe\UpdateResources\" # 仅修改当前进程的执行策略,不影响全局设置 Set-ExecutionPolicy Bypass -Scope Process -Force Invoke-WebRequest -Uri $URL -OutFile "C:\IT-Extra\Override.zip" Start-Sleep -Seconds 5 # 添加Force参数覆盖已有解压文件 Expand-Archive "C:\IT-Extra\Override.zip" -DestinationPath "C:\IT-Extra\" -Force Start-Sleep -Seconds 5 Remove-Item "C:\IT-Extra\Override.zip" -Force if ($TestPath86) { # 修正文件名拼写和引号闭合,添加ErrorAction避免文件不存在时中断脚本 Remove-Item "$Dest\AdobeUpdater.Overrides" -Force -ErrorAction SilentlyContinue Copy-Item -Path "C:\IT-Extra\AdobeUpdater.Overrides" -Destination $Dest -Force } if ($TestPath64) { Remove-Item "C:\ProgramData\Adobe\AAMUpdater\1.0\AdobeUpdater.Overrides" -Force -ErrorAction SilentlyContinue Copy-Item -Path "C:\IT-Extra\AdobeUpdater.Overrides" -Destination "C:\ProgramData\Adobe\AAMUpdater\1.0" -Force }
额外优化说明
- 用
-ErrorAction SilentlyContinue避免因目标文件不存在导致脚本中断 - 给
Set-ExecutionPolicy加-Scope Process,仅临时生效当前脚本的执行策略 - 直接用
if ($TestPath86)替代if ($TestPath86 -eq $true),符合PowerShell布尔值判断规范
内容的提问来源于stack exchange,提问作者Jordon Newberry
相关产品推荐
相关产品推荐

