9

約 10 個のフォルダーをそれぞれ 3 KB の .txt ファイルを含むリモート ファイル共有に数秒の遅延でコピーしようとしています。私はCopy-Item次のようにPowershellを使用しています:

try
{
    Copy-Item -Path $source -Destination $destination -Recurse -ErrorAction Stop
}
catch
{
    Write-Error $_.Exception.ToString()
}

スクリプトを実行しているユーザーは、ファイル サーバー共有とローカル ソースに対する読み取り、書き込み、および実行のアクセス許可を持っています。

最初の実行では、宛先フォルダーは空です。すべて正常に動作します。2 回目の実行時には、ファイルとフォルダーは既に存在します。したがって、上記のコードを実行する前に、最初にチェックを実行しTest-Path、フォルダーが存在する場合は、次のRemove-Itemように削除します。

try
{
    if(Test-Path -Path $path -ErrorAction Stop)
    {
         Remove-Item -Recurse -Path $path -ErrorAction Stop
    }
}
catch
{
    Write-Error $_.Exception.ToString()
}

他の誰もそれらのファイルを編集しません。ただし、スクリプトを数回実行すると、時々、理解できない理由で、コピー中に一部のフォルダーでUnauthorizedAccessExceptionエラーが突然発生します。正確なエラーは次のとおりです。

System.UnauthorizedAccessException: アクセスが拒否されました ---> System.ComponentModel.Win32Exception: System.Management.Automation.SessionStateInternal.IsItemContainer(CmdletProvider providerInstance、文字列パス、CmdletProviderContext の Microsoft.PowerShell.Commands.FileSystemProvider.NativeDirectoryExists(文字列パス) でアクセスが拒否されました環境

注:リモートファイルサーバー上の古いファイルの削除が正常に完了した後、これらのエラーが発生します。

4

3 に答える 3

-3

Masi、Powershellのコピーアイテム機能は、それほど優れたIMOではありません。ここで robocopy/Powershell ハイブリッドを使用しないのはなぜですか?

例:

$source = "C:\temp"

$destination ="\\\RemoteServer\Temp"

robocopy $source $destination /s /mt:8
于 2013-02-11T19:32:18.450 に答える