Powershell将文件从环境变量复制到另一个环境变量的zip文件夹

时间:2018-05-02 13:50:22

标签: powershell zip azure-pipelines

我是Powershell的新手,想要将BUILD_SOURCESDIRECTORY环境变量中的文件复制到我的VSTS构建定义中的BUILD_STAGINGDIRECTORY环境变量中的zip文件夹中。

if(Test-Path $Env:BUILD_SOURCESDIRECTORY/MyFolder/MyFIle.txt)
{
 Write-Host "Source File: $Env:BUILD_SOURCESDIRECTORY/MyFolder/MyFIle.txt"
 Write-Host "Target Location: $Env:BUILD_STAGINGDIRECTORY\StagingDirectoryFolder.zip\TestFolder"
}

将文件从一个路径复制到另一个路径非常简单,但我真的不知道如何将文件移动到zip文件夹结构中。

2 个答案:

答案 0 :(得分:1)

如果我可以推荐非强力shell解决方案(尽管值得按照评论中的建议查找Expand-ArchiveCompress-Archive cmdlet。)

我会使用Archive Files构建任务来处理压缩。在power shell构建脚本中,将工件复制到$ENV:BUILD_BINARIESDIRECTORY,然后利用VSTS构建来存档所有文件。

archive step

然后,您可以使用VSTS构建发布该zip文件,从而可以通过VSTS web gui轻松访问该文件,这样可以提供卓越的用户体验(用于对构建进行故障排除,以及需要访问的其他用户)那些工件(物理人员或自动化流程))。如果您需要对zip文件执行其他操作,则可以在archive files之后添加另一个PowerShell脚本,以便能够从$ENV:BUILD_ARTIFACTSTAGINGDIRECTORY访问该文件。这样您的脚本就可以保持简单,并且可以将一些构建维护卸载到Microsoft上。

答案 1 :(得分:0)

您可以MyFIle.txtTestFolderExpand-Archive复制到zip文件下的子文件夹Compress-Archive(作为gvee提及)。 PowerShell脚本如下:

if(Test-Path $(Build.SourcesDirectory)\MyFolder/MyFIle.txt)
{
  clear-host
  [string]$zipF = '$(Build.ArtifactStagingDirectory)\StagingDirectoryFolder.zip'
  [string]$fileToZip = '$(Build.SourcesDirectory)\MyFolder\MyFIle.txt'
  [string]$tempEx= '$(Build.SourcesDirectory)\temp'
  [string]$copyDes='$(Build.SourcesDirectory)\temp\TestFolder'
  Expand-Archive -Path $zipF -DestinationPath $tempEx -Force
  Copy-Item $fileToZip -Destination $copyDes -Force
  Compress-Archive -Path $tempEx\* -Update -DestinationPath $zipF 
  Remove-Item -Recurse -Force $tempEx
}

现在,zip文件$(Build.ArtifactStagingDirectory)\StagingDirectoryFolder.zipMyFIle.txt下包含$(Build.ArtifactStagingDirectory)\StagingDirectoryFolder.zip\TestFolder