外部PowerShell脚本仅在调用操作时运行一次

时间:2017-11-15 16:53:33

标签: powershell

我试图在每次创建文件时调用外部ps脚本来运行。文件的监视和日志记录运行良好,但即使创建了更多文件,运行外部脚本的Invoke-Expression也只运行一次。每次创建新文件时如何运行外部脚本。

### SET FOLDER TO WATCH + FILES TO WATCH + SUBFOLDERS YES/NO
    $watcher = New-Object System.IO.FileSystemWatcher
    $watcher.Path = "c:\mypath"
    $watcher.Filter = "*.txt*"
    $watcher.IncludeSubdirectories = $true
    $watcher.EnableRaisingEvents = $true  

### DEFINE ACTIONS AFTER AN EVENT IS DETECTED
    $action = { $path = $Event.SourceEventArgs.FullPath                
                $changeType = $Event.SourceEventArgs.ChangeType
                $logline = "$(Get-Date), $changeType, $path"
                Add-content "C:\mypath\log.txt" -value $logline
                Invoke-Expression (start powershell ("C:\MyOtherScript.ps1")) ###### This only runs one time even if file is changes and logged
              }

### DECIDE WHICH EVENTS SHOULD BE WATCHED

    Register-ObjectEvent $watcher "Created" -Action $action
    while ($true) {sleep 5}

编辑:如果有人发现自己在寻找解决问题的话,这就让它运转了

### SET FOLDER TO WATCH + FILES TO WATCH + SUBFOLDERS YES/NO
    $watcher = New-Object System.IO.FileSystemWatcher
    $watcher.Path = "c:\mypath"
    $watcher.Filter = "*.txt*"
    $watcher.IncludeSubdirectories = $true
    $watcher.EnableRaisingEvents = $true  

### DEFINE ACTIONS AFTER AN EVENT IS DETECTED
    $action = { $path = $Event.SourceEventArgs.FullPath                
                $changeType = $Event.SourceEventArgs.ChangeType
                $logline = "$(Get-Date), $changeType, $path"
                Add-content "C:\mypath\log.txt" -value $logline
                Start-Process powershell -argument "C:\MyOtherScript.ps1"
              }

### DECIDE WHICH EVENTS SHOULD BE WATCHED

    Register-ObjectEvent $watcher "Created" -Action $action
    #while ($true) {sleep 5}

1 个答案:

答案 0 :(得分:0)

出于安全考虑,建议不要使用Invoke-Expression而不是&。但是,在您的示例中,我建议Start-Process

Start-Process -FilePath 'powershell' -ArgumentList @('-File','"C:\MyOtherScript.ps1"')