我正在尝试将Adobe覆盖文件从C:\
上的某个位置复制到C:\Program Files (x86)\Common Files\Adobe\UpdateResource\
这对于复制到ProgramData
位置非常有效,但不适用于Program Files (x86)
我想我的问题是关于程序文件和公共文件之间的间距。我确实尝试了使用环境变量${env:CommonProgramFiles(x86)}\Adobe\UpdateResouce
,但结果相同。我确实尝试了单引号和空格中的反号,但再次得到了相同的结果。
我的脚本是从SCCM\Configuration Manager运行的,我认为它应该在系统级上下文中运行脚本。
如有任何帮助,将不胜感激
$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
Invoke-WebRequest -Uri $URL -OutFile "C:\IT-Extra\Override.zip"
Start-Sleep -Seconds 5
Expand-Archive C:\IT-Extra\Override.zip -DestinationPath C:\IT-Extra\
Start-Sleep -Seconds 5
Remove-Item C:\IT-Extra\Override.zip
if ( $TestPath86 -eq $true) {
Remove-item "C:\Program Files'(x86')\Common Files\Adobe\UpdateResources\AdobeUpdater.Override
Copy-Item -Path 'C:\IT-Extra\AdobeUpdater.Overrides' -Destination $Dest -Force
}
if ( $TestPath64 -eq $true) {
Remove-item "C:\ProgramData\Adobe\AAMUpdater\1.0\AdobeUpdater.Overrides"
Copy-Item -Path "C:\IT-Extra\AdobeUpdater.Overrides" -Destination "C:\ProgramData\Adobe\AAMUpdater\1.0" -Force
}
1条答案
按热度按时间oyxsuwqo1#
**最好使用
env:CommonProgramFiles(x86)
环境变量[1]来引用32位应用程序的程序文件路径(对于其他众所周知的路径也是如此,例如ProgramData
表示C:\ProgramData
),在PowerShell中要求格式为${env:CommonProgramFiles(x86)}
,[2],例如:请注意,嵌入环境变量引用的字符串必须使用双引号(
"..."
),即可扩展(内插)字符串。如果您确实想要硬编码路径,请不要在其中嵌入
'
示例--只需确保在整个带引号的字符串中使用它(假设它包含空格和(
和)
):请注意,由于该字符串现在不包含任何变量引用,因此最好使用sinqle引号(
'...'
)字符串,即Verbatim字符串。[1]虽然在实践中很少使用,但可以将Windows系统配置为使用熟知路径的默认位置以外的路径。也可以依赖环境变量来指向这样的重定向位置。安全确定路径的另一种方法是通过
System.Environment.GetFolderPath
.NET API:[Environment]::GetFolderPath([Environment+SpecialFolder]::CommonProgramFilesX86)
。向zett42致敬。[2]仅当变量名包含特殊字符时,才需要在
{...}
中的变量名括在$
之后,例如本例中的(
和)
。通常,这是不必要的,例如在$env:OS
的情况下