Powershell脚本,用于部署具有必要备份的文件

时间:2015-01-20 02:57:15

标签: powershell automation powershell-v2.0

队 我正在编写一个PowerShell脚本来自动完成我们每天所做的手动任务之一。我需要专家建议和帮助,因为我是PowerShell脚本的新手。

要求:

有源,目标和备份文件夹。

Source可能在源文件的多个文件夹中包含diff文件和文件。

例如:source \ Login.aspx或source \ App_Code \ BLogic.vb或source \ bin \ servr.dll等。

在复制到目的地时,我的来源文件必须在目的地检查是否存在,如果存在则我们需要复制目标中的当前现有文件备份文件夹,然后将来源复制到目的地

以下是我到目前为止尝试过的脚本。

SCRIPT1:

我能够列出相同但无法将这些数组元素复制到备份位置的文件:

#Declare Source and Destination
$source = Get-ChildItem -Recurse -path \\server1\\e$\ps\src\
$dest = Get-ChildItem -Recurse -path \\server2\\e$\ps\dest\
#lists only objects which are equal and assign to variable
$files=compare-Object -DifferenceObject $source -ReferenceObject $dest -IncludeEqual -ExcludeDifferent
$array = @($files)
$len=$array.length
for ($i=0; $i -lt $array.length; $i++) 
{
 $array[$i]
}

SCRIPT2:

作为script1我遇到了问题我用这个脚本尝试了一个愚蠢的逻辑,但我觉得这也有太多的手工工作:(请帮助我。

Function cpytest ($s, $d)
{
Copy-Item -Path $s -Destination $d;
}
$n = Read-Host "Enter no of files to be uploaded"
$b = Read-Host "Enter Backup Location for file backups"
for ($i=0;$i -lt $n;$i++)
  {
   $s = Read-Host "Enter Source with complete file name"
   $d = Read-Host "Enter Destination with file name too"
   $r = Test-Path $d
   If ($r -eq "True")
   { 
    cpytest $d $b
    cpytest $s $d
    }
   Else
   {
   cpytest $s $d
    }
 }

1 个答案:

答案 0 :(得分:0)

尝试这样的事情:

Function BackupAndMoveFile($filePath, $backupPath, $deployPath) {

    $fileName = Split-Path $filePath -Leaf

    $deployFile = Join-Path $deployPath $fileName

    if ((Test-Path $deployFile)) {
        $backupFile = Join-Path $backupPath $fileName
        Move-Item $deployFile $backupFile -Force
        if (!(Test-Path $backupFile)) {
            Write-Warning "Can't backup $fileName to $backupFile"
            return $false
        }
    }

    Copy-Item $filePath $deployPath -Force
    if (!(Test-Path $deployPath)) {
        Write-Warning "Can't deploy $fileName to $deployPath"
        return $false
    }

    return $true
}


BackupAndMoveFile 'C:\temp\backup-test.txt' `
                  'C:\temp\backup' `
                  'C:\temp\deploy'

它将覆盖备份目录中的任何内容,因此您可能希望修改以添加时间戳。