0
ファイルが作成されるたびに外部psスクリプトを呼び出そうとしています。ファイルの監視とロギングは正常に機能しますが、外部スクリプトを実行するInvoke-Expressionは、ファイルがさらに作成された場合でも1回だけ実行されます。新しいファイルが作成されるたびに外部スクリプトを実行するにはどうすればよいですか。外部powershellスクリプトは、呼び出されたアクションが1回だけ実行されます
### 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}
EDIT:これはここ
### 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}
最後にループの目的は何ですか?また、なぜ 'Start-Process'の代わりに' Invoke-Expression'を使用していますか – TheIncorrigible1
最後のループは、ファイルを監視する元のコードにあります。https://superuser.com/questions/226828/how-to-ファイルの作成時にフォルダの監視とトリガのコマンドラインアクション –
これを行う方法を検索すると、 'Invoke-expression'または 'invoke-item'が見つかりました他のスクリプトを実行する方法。私はPowerShellを初めて使っています。 –