2013-01-06 5 views
8

〜3KBの.txtファイルを含む約10個のフォルダを、数秒の遅延でリモートファイル共有にコピーしようとしています。私はこのようなPowershells Copy-Itemを使用しています:リモートファイルサーバー上のコピーアイテムを使用したUnauthorizedAccessException

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拒否されました:アクセスがMicrosoft.PowerShell.Commands.FileSystemProvider.NativeDirectoryExistsで を否定 システムでの(文字列 パス)。 Management.Automation.SessionStateInternal.IsItemContainer(CmdletProvider providerInstance、文字列のパス、CmdletProviderContextコンテキスト

注意してください:私は、リモート上の古いファイルの削除後、これらのエラーを取得していますfileserverが正常に完了しました。

答えて

-3

Masi、Powershellコピーアイテム機能は本当に素晴らしいIMOではありません。なぜここでrobocopy/Powershellハイブリッドを使用しないのですか?

例:それは良いデザインではないという理由だけでも

$source = "C:\temp" 

$destination ="\\\RemoteServer\Temp" 

robocopy $source $destination /s /mt:8 
+2

、。あなたは単純なテキスト生成コマンドで非オブジェクト指向のコードを混在させています。このようなエラー処理には多くの欠点があります。コマンドレットを使用すると、後で使用できるオブジェクトが返されます。 * test-connection *を取得したときに* ping *を使うようなものです。 – masi

関連する問題