質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
PowerShell

Windows PowerShellはコマンドラインインターフェースであり、システム管理を含むWindowsタスク自動化のためのスクリプト言語です。

Q&A

解決済

1回答

1710閲覧

ファイル監視で、削除イベント時にサブスクライバを解除したい

Hayashi_Jelly

総合スコア26

PowerShell

Windows PowerShellはコマンドラインインターフェースであり、システム管理を含むWindowsタスク自動化のためのスクリプト言語です。

0グッド

0クリップ

投稿2019/08/11 22:15

編集2019/08/11 22:16

PowerShellはおろか.Net系ほとんど触れた事ありませんが、ほぼパクリで書いております。
あまり知識がないまま質問となってしまうと思いますが、ご了承いただければ幸いです。

したいこと

  • PowerShellでファイルの監視スクリプトをテスト的に作成したい。
  • ファイルの監視は削除イベントが発生した際に、終了させたい。
  • ファイルが変更されたイベントも設定するが、こちらの場合はサブスクライバは削除しない。

解決したいこと

  • FileSystemWatcherの監視で、ファイルが削除されたイベントが発生した時、既に登録したサブスクライバを削除したいです
  • 単純に、削除のイベントで発火するアクション時に、自身(削除)と変更のサブスクライバ の登録を削除すればいいのかと思いましたが、うまくゆきません。
  • どうしてか原因も知りたいです。差し支えなければご教授いただきたいです。

PowerShell

1$wait=New-Object System.IO.FileSystemWatcher 2$wait.NotifyFilter=[IO.NotifyFilters]::LastWrite -bor [IO.NotifyFilters]::FileName 3$wait.Path="D:\hoge\fuga" 4$wait.Filter="*.txt" 5$wait.IncludeSubdirectories=$false 6$si_ch="si_ch" 7$si_dl="si_dl" 8 9$act_ch = { 10 $t= $Event.TimeGenerated 11 $f= $Event.SourceEventArgs 12 13 [string]$lated_time= $t.ToString("yy/MM/dd HH:mm:ss.f") 14 15 if($lated_time -ne $chk_time){ 16 write-host ($f.Name) 17 [string]$chk_time= $lated_time 18 } 19} 20 21$act_dl = { 22 write-host ("unregistered") 23 Unregister-Event -SourceIdentifier $si_ch 24 Unregister-Event -SourceIdentifier $si_dl 25} 26 27Register-ObjectEvent -InputObject $wait -SourceIdentifier $si_ch -EventName "Changed" -Action $act_ch 28Register-ObjectEvent -InputObject $wait -SourceIdentifier $si_dl -EventName "Deleted" -Action $act_dl

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

-Actionパラメータに渡すスクリプトブロックはJobとして実行されるのでスクリプトブロックの中から外側の変数は見えません。
スクリプトブロック内で変数の値を使うには-MessageDataパラメータにハッシュテーブルとして渡す方法があります。

PowerShell

1 2$act_dl = { 3 write-host ("unregistered") 4 Unregister-Event -SourceIdentifier $event.MessageData.si_ch 5 Unregister-Event -SourceIdentifier $event.MessageData.si_dl 6} 7 8Register-ObjectEvent $wait -SourceIdentifier $si_ch -EventName "Changed" -Action $act_ch -MessageData @{ si_ch = $si_ch; si_dl = $si_dl }

投稿2019/08/12 17:54

mitarai

総合スコア223

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問