2017-01-28 1 views
0

copy-item funktioniert nicht. Wenn ich etwas anderes wie Send-MailMessage ersetze, scheint das zu laufen, wenn ich eine Datei in "\ sharesrc \ test" ablege, aber der Copy-item-Teil nicht.Powershell System.IO.FileSystemWatcher copy-item

$watcher = New-Object System.IO.FileSystemWatcher 
$watcher.Path = "\\pc\sharesrc\test" 
$watcher.Filter = "*.*" 

$Src = "\\pc\sharesrc\test" 
$Dst = "\\pc\sharedst\test" 

$action = { copy-item $Src\*.* $Dst } 

Register-ObjectEvent $watcher "Created" -Action $action 

while ($true) {sleep 5} 

Antwort

0

Deklarieren und verweisen auf die src und dst vars als global, zB:

$Global:src = 'xxxx'; 
$Global:dst = 'xxxx'; 

copy-item $global:src\*.* $global:dst; 
+0

Vielen Dank! Wie du vielleicht vermutet hast, lerne ich immer noch viel darüber. Das hat den Trick gemacht. – JPYoungNet

+0

Kein Problem. Global macht die Variable für den gesamten powershell.exe-Prozess zugänglich. Andere Bereiche sind Script, Local und Private. Mehr Infos hier: http://powershellprimer.com/html/0006.html#6_10 –

0

mit Ihrem Code, den Sie kopieren alle Dateien jedes Mal, Sie können es tun, wenn Sie nur erstellte Datei kopiert werden soll, und lösen Sie gleichzeitig Ihr Problem auf:

$watcher = New-Object System.IO.FileSystemWatcher 
$watcher.Path = "\\pc\sharesrc\test" 
$watcher.Filter = "*.*"  

$action = { 
$path = $Event.SourceEventArgs.FullPath ; 
copy-item $path "\\pc\sharedst\test" 
} 

Register-ObjectEvent $watcher "Created" -Action $action 

while ($true) {sleep 5} 

Unregister-Event $watcher 
+0

Danke. Ich habe tatsächlich einen komplexeren Satz von Anweisungen, um nur Dateien zu kopieren, die nach einer bestimmten Zeit geschrieben wurden, und nur dann, wenn sie nicht auf dem Zielserver vorhanden sind. Ich habe nur das verwendet, was oben für die Einfachheit ist. – JPYoungNet

+0

Klicken Sie auf, wenn Sie können;) – Esperento57