如何使用Powershell脚本重试锁定文件的副本5次?

时间:2014-12-19 17:10:04

标签: windows-server-2008 powershell scripting

如何循环使用powershel脚本?它将本地NTUSER.DAT复制到文件服务器,我知道本地NTUSER.DAT文件可能被操作系统锁定,因此我的COPY可能会失败。我需要它尝试运行脚本5次,直到它最终可能失败。我希望在第5次尝试NTUSER.DAT文件不再被操作系统使用。

    start-sleep -s 50

$time = Get-Date -Format "hh:mm"
Add-Content -Path "C:\Temp\time.txt" -Value "Script ran at $time"

$FQDN = "$Env:UserDomain"
$User = Get-WmiObject -Class Win32_NetworkLoginProfile | Sort-Object -Property LastLogon -Descending | Select-Object -Property * -First 1 | Where-Object {$_.LastLogon -match "(\d{14})"} | Foreach-Object { New-Object PSObject -Property @{ Name=$_.Name.TrimStart("$FQDN\") }} | Select -ExpandProperty Name


copy-item -path  C:\Users\$User\NTUSER.DAT -destination \\10.10.10.10\Profiles$\$user.V2\ -force
copy-item -path  C:\Users\$User\NTUSER.DAT -destination \\10.10.10.10\Profiles$\$user.V3\ -force

2 个答案:

答案 0 :(得分:3)

不是最好但有效:)

$ErrorActionPreference = 'SilentlyContinue'
$counter = 0
Copy-Item SOURCE DEST

if (!($?))
{
  while (!($?))
  {
    $counter++
    Start-Sleep -Seconds (Get-Random -Minimum 30 -Maximum 90)
    Copy-Item SOURCE DEST

    if ($counter -eq 4)
    {
        "Couldn't Copy File"
        return
    }
    elseif($?){"File Copied at $counter try"}
  }

}
else { "File Copied" }

答案 1 :(得分:1)

您可以在powershell中使用robocopy代替copy-item。

& robocopy $source $destination /COPYALL /R:5

R:5 =重试5次

W:50 =重试之间的等待时间 - 默认为30秒

(如果你使用那些退出代码有点不同)

编辑:正如kevmar在评论中指出的那样,我错过了对不起!