nakamurk’s diary

日々思うことは残していきます。しっかり生きます。

タスクスケジューラがどんなアクションを実行しているか確認するためのPowerShellコマンドを考えてみた

お客様からの問い合わせで。Azure ADにデバイスが登録できなかったというので、その調査をしているときの一コマを記録します。

Microsoftのサポートに問い合わせても、うまく解決してくれなかったので…、一般的なトラブルシューティングとして次のDocsを見るわけです。まあそのおかげで弊社に仕事が回ってくると思えば…。

learn.microsoft.com learn.microsoft.com learn.microsoft.com

しかしながら手元にない端末で、特に問題端末の調査に当たるのが作業者の方が非エンジニアだったとしても、あるいは非エンジニアだからこそ可能な限り多くの情報を簡単に吸い出してくれるようにしたいですよね。2つ目のリンクをよく見ると「デバイス登録のトラブルシューティング ツール」というリンクがあることがわかります。そちらには「DSRegTool.ps1」というツールを使ってくれということが書いてあります。Azure ADにデバイスを登録する際に確認すべき様々なコマンドやログが網羅されています。そして、こちらのスクリプトを試しに会社のPCで実行して、これでお客様に情報がいただけるね!と思ったのもつかの間、会社のセキュリティ推進室から、ウイルスに感染したような動きということで、チェックが入りましたorz…。こちらの3000行超えのps1ファイルなのですが、よく見ると、タスクスケジューラにタスクを登録していたのですね。最近Emotetがまた活発になってきたので、そのせいもあるのでしょう…。

そして、こちらのスクリプトの検証がセキュリティ推進室のチェックに引っかかったことが分かったので「何も変なことしてなかったよ!」の証明のため、「タスクスケジューラには変なものは仕掛けてないよ!」っということを言わなければならず、今回のワンライナーを考えたのです。とりあえず時間もなかったのでCSVみたいな出力にして、Bashで検索するようにしました。分業・シンプルにすることが大事ですね。

タスクスケジューラーがどんなアクションを実行しているか確認するためのPowerShellコマンド · nakamurk/nakamurk.github.io Wiki · GitHub

読めば何となく理解できると思うのですが、以下のような作りになっています。

Get-ScheduledTask | foreach {Write-Host $_.TaskName","$_.Actions.execute}
  • Get-ScheduledTask
    • タスクスケジューラのタスクをすべて取ります。
  • foreach {Write-Host $_.TaskName","$_.Actions.execute}
    • 取り出したタスクそれぞれのタスク名と、タスクオブジェクトにあるActionsオブジェクトから実行しているもの(execute)を出力しています。

CSVみたいな出力の仕方が「やっつけ感満載」なのですが、とりあえず動いたのでよしとしました。それにしても、2-3時間今回のウイルス感染疑惑の対応のために溶かしたのマジで萎えますね。