2013-01-06 17 views
8

Her biri bir ~ 3KB .txt dosyası içeren yaklaşık 10 klasörün birkaç saniye gecikme ile uzak bir dosya paylaşımına kopyalamaya çalışıyorum. Böyle Powershells Copy-Item kullanıyorum: komut dosyası çalıştıranUnauthorizedAccessException Uzaktaki dosya sunucusundaki Copy-Item kullanılarak

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

kullanıcı okumuş, yazma ve dosyasunucusu paylaşımında ve yerel kaynağın izinlerini yürütün.

İlk çalıştırmada, hedef klasör boş. Her şey iyi çalışıyor. İkinci çalıştırmada, dosya ve klasörler zaten var. Yani kod çalıştırmadan önce ilk Test-Path ve klasör bir böyle Remove-Item kullanarak silmek var bu durumda kullanarak bir kontrol çalıştırmak yukarıda: başka

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

kimse bu dosyaları düzenler. Ancak, komut dosyası çalıştırırken bir kez, bir kez, bir kez, anlamıyorum, kopyalama sırasında bazı klasörler için aniden UnauthorizedAccessException hataları alıyorum. Kesin hatadır:

System.UnauthorizedAccessException: erişim ---> System.ComponentModel.Win32Exception engellendi: Erişim Microsoft.PowerShell.Commands.FileSystemProvider.NativeDirectoryExists içinde yalanladı Sistemde (Dize yolu). Management.Automation.SessionStateInternal.IsItemContainer (CmdletProvider providerInstance, dize yol CmdletProviderContext bağlam

dikkat ediniz: Ben uzaktan kumandadaki eski dosyaların silinmesi SONRA bu hataları alıyorum fileserver başarıyla tamamlandı.

cevap

-3

Masi, Powershell copy-item işlevi gerçekten bu harika IMO değildir. Neden robocopy/Powershell hibridini kullanmıyorsunuz?

Örnek:

iyi
$source = "C:\temp" 

$destination ="\\\RemoteServer\Temp" 

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

, iyi bir tasarım değil çünkü. Nesne yönelimli olmayan kodu basit metin üreten komutlarla karıştırıyorsunuz. Hata işleme gibi birçok dezavantaj vardır. cmdlet'leri kullanarak daha sonra kullanabileceğim nesneleri döndüreceğim. * Test bağlantısı * olduğunda * ping * kullanmak gibi. – masi

İlgili konular