2011-12-29 2 views
1

먼저 질문에 대답이 있지만 here과 비슷한 질문이 있지만 문제 해결에 대한 지침이 없습니다. 포스터에서 아이디어를 가지고 Andy Arismendi 나는 가능한 해결책을 내놓았으며 이것은 새로운 문제입니다.현재 작업 환경에서 모듈을 다시로드하려면 FileSystemWatcher 이벤트가 필요합니다.

아래 코드 블록을 FileChanged 이벤트에 바인딩하는 아래 스크립트를 실행하고 있습니다. .psm1 모듈 파일이 변경되면 코드 블록은 파일이로드되었는지 확인하고 다시로드하려고 시도합니다. 그렇지 않으면 모듈을 가져옵니다. 그러나, 나는 어떻게 든 이벤트가 이벤트를 묶는 초기 스크립트가 실행중인 현재 실행 환경과 관련이 없다고 생각합니다. 가 실행하더라도) 1) .psm1 파일이 파일의 저장 하나 (두 번 이벤트를 실행 변경)

2 :

# create a FileSystemWatcher on the currect directory 
$filter = '*.psm1' 
$folder = $PWD 
$watcher = New-object IO.FileSystemWatcher $folder, $filter -Property @{IncludeSubdirectories = $false; EnableRaisingEvents = $true; NotifyFilter = [IO.NotifyFilters]'LastWrite'} 
Register-ObjectEvent $watcher Changed -SourceIdentifier FileChanged -Action { 
    $folder = $PWD 
    $name = $Event.SourceEventArgs.Name 
    $filename = $name.Remove($name.IndexOf('.'), 5) 

    Write-Host $PWD 

    $loadedModule = Get-Module | ? { $_.Name -eq $filename } 
    write-host $filename 

    if ($loadedModule) { 
     write-host "Reloading Module $folder\$($filename)" 
     Reload-Module $filename 
    } else { 
     write-host "Importing Module $folder\$($filename)" 
     Import-Module .\$filename 
    } 
} 

문제 : 나는 코드 아래의 두 가지 문제를 나열했습니다 reload/import 명령은 절대로드되지 않는 다른 환경에서 작동해야합니다. 그러나 모든 출력물은 스크립트가 이벤트를 묶는 현재 실행 환경으로 이동합니다.

내가 언급했듯이, 나는 어떻게 든 코드 블록이 현재 세션과 관련이 없다고 확신한다.

+0

. "Reload-Module"이라는 어딘가에 함수가 있습니까? 이유는 cmdlet이 아니기 때문에 내가 묻는 이유입니다. 함수를 정의하지 않았다면,'remove-module'과'import-module' 또는'-force' 플래그로'import-module'을 조합 할 필요가 있습니다. –

+0

@Andy - 나는 그것을 더 잘 시도하지 못했습니다. 나는 다음을 발견했으나 주위를 둘러 볼 방법을 모르고 있었다. http://blogs.msdn.com/b/powershell/archive/2008/06/11/powershell-eventing-quickstart.aspx ... Register- * Event cmdlet은 -Action 스크립트 블록을 지원합니다. PowerShell은 이벤트가 도착하면 백그라운드에서 해당 스크립트 블록을 호출합니다. 이러한 작업은 자체 모듈에서 호출됩니다. $ GLOBAL 변수를 가져오고 설정할 수 있지만 일반적인 변수 수정은 격리 된 환경에서 이루어집니다. – pghtech

답변

0

이 내가 모듈을로드하는 방법이다 : 당신은 다른 질문에 게시 한 후 코드를 시도 할 기회가 없었어요 죄송합니다

Get-Module -listavailable| foreach{Import-Module $_.name} 
+0

변경 사항으로 인해 자동로드 문제가 해결되지 않았습니다. – pghtech

관련 문제