2014-06-12 97 views
1

我有一些腳本必須將文件夾從網絡服務器同步到本地終端服務器,最後才能同步到%LOCALAPPDATA%。我需要首先檢查一個文件夾是否被同步(這是通過在服務器上創建一個臨時COPYING.TXT來完成的),然後等到刪除該文件夾,然後複製到%LOCALAPPDATA%。等待文件刪除,然後複製文件夾

事情是這樣的:

  • 服務器端腳本執行,其同步我的文件夾到我所有的終端服務器。
  • 它創建一個COPYING.TXT臨時文件,表明正在進行同步。同步完成後,該腳本將刪除COPYING.TXT如果有人在同步過程中登錄,我需要一個腳本來等待,直到COPYING.TXT被刪除IE完成同步,然後恢復本地同步到他們的同步中%LOCALAPPDATA%。
do { 
    cp c:\folder\program $env:LOCALAPPDATA\ 
} while (!(test-path c:\folder\COPYING.txt))

(以便複製文件夾,而文件不存在,但我不認爲乾淨地退出)

或者:

​​

但該腳本退出如果COPYING.TXT存在。我想我需要創建一個函數並在其內部插入該函數,或者嵌套的while循環,但是這開始讓我的頭部受傷。

+0

@ user3317623我有一段時間冷壓榨式咖啡和一個很好的思考,我發現了一個解決方案,但是我不能回答我的問題:( – user3317623

+0

功能任務{ 一段時間(測試路徑C: \ folder \ COPYING.txt){sleep -seconds 1} cp c:\ folder \ programmes $ env:LOCALAPPDATA \ -recurse -force exit } }任務 – user3317623

回答

0

您是否嘗試過使用c#FileSystemWatcher來監視目標文件夾,當引發更改事件時,然後檢查目標文件,如果它不存在,您的預期時間即將到來:執行此操作。

1

正如Mosser Lee所說,嘗試使用FileSystemWatcher類。這是一個工作示例。

#Create the Copying.txt file 
"test"|Out-File Copying.txt 
#Create a filesystemwatcher 
$watcher = New-Object System.IO.FileSystemWatcher 
#Give it the root path to monitor 
$watcher.Path = $pwd 
#The matching pattern 
$watcher.Filter = "Copying.txt" 
#Monitor subfolder or not 
$watcher.IncludeSubdirectories = $true 
#Setup event and save a ref 
$evt = Register-ObjectEvent $watcher Deleted FileDeleted -Action { 
    #Stuff it into the global space just so you can inspect it 
    $global:SomeVar = $Event 
    Write-Host ("{0} deleted at {1}" -f $Event.SourceEventArgs.FullPath, $Event.TimeGenerated) 
} 

Remove-Item Copying.txt 

當文件被刪除時,輸出如「H:\ Copying.txt deleted at 6/12/2014 3:01:48 PM」。它還設置了一個全局變量$ global:SomeVar,如果你想深入瞭解屬性。

$global:SomeVar 

ComputerName  : 
RunspaceId  : 1ab5089e-1734-4b92-8bab-9de4df78ada2 
EventIdentifier : 2 
Sender   : System.IO.FileSystemWatcher 
SourceEventArgs : System.IO.FileSystemEventArgs 
SourceArgs  : {System.IO.FileSystemWatcher, Copying.txt} 
SourceIdentifier : FileDeleted 
TimeGenerated : 6/12/2014 3:01:48 PM 
MessageData  : 

不要忘記取消註冊該事件,因爲它將繼續運行,直到您關閉會話,即使您將$ watchcher設置爲null。

Unregister-Event $evt.Id 
+0

嘿,隊友,謝謝你的帖子,回答,但我不能「upvote」您的帖子,因爲我需要15名聲譽。再次感謝您的帖子,乾杯。 – user3317623

相關問題