2014-06-12 3 views
1

네트워크 서버의 폴더, 로컬 터미널 서버의 폴더 및 마지막으로 % LOCALAPPDATA % 폴더를 동기화해야하는 몇 가지 스크립트가 있습니다. 먼저 폴더가 동기화되고 있는지 확인해야합니다 (서버에서 임시 COPYING.TXT를 작성하여 완료). 그러면 제거 될 때까지 기다린 후 % LOCALAPPDATA %로 복사합니다. 이 같은파일이 삭제 될 때까지 기다린 다음 폴더를 복사하십시오.

뭔가 :

  • 서버 측 스크립트가 실행, 내 터미널 서버의 모든 내 폴더를 동기화합니다.
  • 동기화를 진행 중임을 나타내는 COPYING.TXT 임시 파일을 만듭니다. 동기화가 끝나면 스크립트는 COPYING.TXT를 제거합니다.
  • 누군가 동기화 중에 로그온하면 COPYING.TXT가 삭제 될 때까지 기다리는 스크립트가 필요합니다. IE 동기화가 끝난 후 로컬 동기화를 다시 시작합니다. % LOCALAPPDATA %.

    while (!(test-path c:\folder\COPYING.txt)) { 
        cp c:\folder\program $env:LOCALAPPDATA\ -recurse -force 
        if (!(test-path c:\folder\program)) {return} 
    } 
    

    그러나이 해당 스크립트가 종료 :

    또는이 (사본 파일이있는 폴더를 존재하지 않는 동안 수 있도록,하지만 난 완전히 종료 생각하지 않습니다)

do { 
    cp c:\folder\program $env:LOCALAPPDATA\ 
} while (!(test-path c:\folder\COPYING.txt))

COPYING.TXT가있는 경우. 함수를 만들고 그 함수를 중첩 된 while 루프 내에 삽입해야한다고 생각합니다. 그러나 그것은 머리를 다 치기 시작합니다.

+0

는 user3317623 @ 감기 - 프레스 커피와 좋은 생각에 대한 약간의 시간이 있었고, 그러나 나는 내 자신의 질문 :( – user3317623

+0

기능 작업 { 동안 (테스트 경로 C를 대답 할 수없는, 해결책을 찾아 냈다. : \ 폴더 \의 COPYING.txt) {수면 -seconds 1} CP의 C : \ 폴더 \ 프로그램 $의 ENV : LOCALAPPDATA \ -recurse -force 종료 } 작업 – 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이 2014년 6월 12일 오후 3시 1분 48초에서 삭제"파일이 삭제 될 때. 또한 전역 변수 $ 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  : 

$ watcher를 null로 설정해도 세션을 닫을 때까지 계속 실행되므로 이벤트 등록을 취소해야합니다.

Unregister-Event $evt.Id 
+0

이봐 친구, 감사는 게시물에 대한, 나는 그것을 받아 대답하지만 15 개의 평판이 필요하므로 게시물을 "upvote"할 수 없습니다. 다시 게시 해 주셔서 감사합니다. – user3317623