所以,我试图从目录中读取一个zip文件,并将其解压缩到tmp位置。问题是powershell似乎是误解了引号而没有写出$ copyLocation变量的值。相反,它将文件复制到[currentDirectory] \ $ copyLocation。我希望你们都能提供帮助。我是Powershell的新手,这只是我必须编写的一部分脚本来接管我们的构建自动化。提前谢谢。
顺便说一下,hosts是我们正在迭代的XmlElement。因此,我们将此zip文件部署到xml配置文件中指定的多个主机上的位置。
function copyWebappToDestination($copyWebappFrom,$to,$hosts){
foreach( $it in $hosts ){
Write-Host "Deploying webapp" $webapps.webappName "to" $it.hostIp "at" $it.to
setUpDirectories
foreach($file in $filelocation){
if($file.name.ToString() -eq "Web.Main.zip"){
$filename = $file.name.ToString()
$hostIp = $it.hostIp
$fileDest = $file.FullName
#unzip the files
& '7z' x ""$fileDest"" -o""$copyLocation"" -y -r
break
}
}
}
最奇怪的部分是,我写出了命令
& '7z' x "C:\MoveToProduction\SM\PROD\Web.Main.zip" -o"C:\MoveToProduction\SM\PROD\tmp" -y -r"
从Powershell控制台运行它,它运行得很好。它只是在脚本的上下文中不起作用。
所以,我放弃了尝试让呼叫运营商工作。基本上,我最终解决的是命令:
Invoke-Expression -command "cmd /C '7z x `"$fileDest`" -o`"$copyLocation`" -y -r'"
答案 0 :(得分:1)
所以,我放弃了尝试让呼叫运营商工作。基本上,我最终解决的是命令:
Invoke-Expression -command "cmd /C '7z x `"$fileDest`" -o`"$copyLocation`" -y -r'"
答案 1 :(得分:1)
在报价
中包装-o$tz = "c:\program files\7-zip\7z.exe"
set-alias sz $tz
$source="c:\users\user\test\*.tar
$dest="c:\users\user\test2be"
sz x "$source" "-o$dest" -y
答案 2 :(得分:0)
评论后编辑:
你应该尝试的另一件事是使用一对双引号来包装所有7z参数
初步答复
尝试使用$($ copylocation.FullName)来获取目标目录的完整路径
当你使用$ copylocation这是一个DirectoryInfo时,Powershell使用对象的ToString方法,恰好只提供目录名,而不是完整路径