Active Directoryでログイン時にPowershell経由でexeを実行

TL;DR Active Directoryでログイン時にexeファイルを実行する場合はStart-Processでの実行が必要 経緯 Emotetが流行っているので、EmocheckをActive Directory のログインスクリプトに仕込んでみていた。 単体では実行できるので問題ないと考えていたが、どうもActive Directory のグループポリシーでログイン時に起動する設定をすると何故か実行されない。イベントログを見ると一応対象として認識されているのだが… Powershell から外部ファイルを実行するにはいくつか方法があるが、以下のように実行するとダメなようだった。 $proc = New-Object "System.Diagnostics.Process" $psi = New-Object "System.Diagnostics.ProcessStartInfo" $psi.FileName = $emocheck_Exe $psi.Arguments = "-output $reportDir -quiet -json" $psi.CreateNoWindow = $true; $psi.UseShellExecute = $false $psi.WindowStyle = [System.Diagnostics.ProcessWindowStyle]::Hidden $proc.StartInfo = $psi $proc.Start() 以下のように設定することでログイン時に実行されるようになった。 Start-Process -WindowStyle Hidden -FilePath $emocheck_Exe -ArgumentList "-output $reportDir -quiet -json" -WorkingDirectory $currentDir

<span title='2022-03-23 00:00:00 +0900 +0900'>March 23, 2022</span>&nbsp;·&nbsp;1 min&nbsp;·&nbsp;tack41

PowershellでActiveDirectory情報取得で原因不明の不具合

Active Directoryの情報をPowershellで取得し、管理資料に起こすスクリプトを作成。せっかくなので定期的にスクリプトを実行して差分がないかタスクスケジューラで定期実行してチェックする運用を構築していた時に問題が発生。 手動で実行する分には問題ないのだが、タスクスケジューラを通して実行するとなぜか以下問題が発生 ADのオブジェクトのSort-Objectでの並び替えが効かない Get-GPOReportで出力した一部XMLに差分が検知される。実際に比較してみると差分はないのだが… https://social.technet.microsoft.com/Forums/ja-JP/a7e363fa-4553-4468-b123-a1e971c68a78/12525124641245812501123751239012356124271251812540124701254012?forum=powershellja によると、手動実行とタスクスケジューラからの実行時で既定のモジュールパスが異なるということなので、それによるのかもしれない。が、プログラムがこけているわけではないので、原因はどれなのか得的できず、どれをロードすればよいのかわからない。 実行の都度生成されるファイルが変わってしまうようではチェックには使えないということで、タスクスケジューラによるチェックは断念した。 Powershellをタスクスケジューラから呼び出す処理はほかに多数書いており、問題になったことはない。Active Directoryを操作する際にはImport-Moduleで専用のモジュールを読み込んで処理をするのだが、こういった書き方をする場合に問題となるのかもしれない。 原因は不明。

<span title='2020-10-09 00:00:00 +0900 +0900'>October 9, 2020</span>&nbsp;·&nbsp;1 min&nbsp;·&nbsp;tack41