質問: リモートシステムでスケジュールされたタスクを一覧表示するpowershellスクリプト リモートシステム上のすべてのスケジュールされたタスクを一覧表示し、各タスクの実行に使用されるユーザーアカウントを含むpowershellスクリプトを記述したいと思います。ローカルシステムはwindows 7とpowershell 3.0を実行しています。リモートシステムの範囲はserver 2003から2008 r2で、powershellのバージョンは2.0から3.0です。このタスクに使用できるpowershellコマンドまたは関数は何ですか?
回答: ようやく自分のニーズに合ったスクリプトを書きました。このスクリプトは、adにリストされているすべてのサーバーを「スキャン」し、c:\ windows\system32\tasksフォルダーでxmlファイルを検索します。次に、各ファイルのuserid xmlノードの値を最終的なcsvファイルに書き込みます。まだ完璧ではありませんが、すべてのサーバーのすべてのタスクを一覧表示し、それらを実行するために使用されたユーザーアカウントをログに記録するために完全に機能しています。<# .synopsis powershell script to list all scheduled tasks and the user id .description this script scan the content of the c:\windows\system32\tasks and search the userid xml value. the output of the script is a comma-separated log file containing the computername, task name, userid. #> import-module activedirectory $verbosepreference = "continue" $list = (get-adcomputer -ldapfilter "(&(objectcategory=computer)(operatingsystem=*server*))").name write-verbose -message "trying to query $($list.count) servers found in ad" $logfilepath = "$home\desktop\taskslog.csv" $erroractionpreference = "silentlycontinue" foreach ($computername in $list) { $path = "\\" + $computername + "\c$\windows\system32\tasks" $tasks = get-childitem -path $path -file if ($tasks) { write-verbose -message "i found $($tasks.count) tasks for $computername" } foreach ($item in $tasks) { $absolutepath = $path + "\" + $item.name $task = [xml] (get-content $absolutepath) [string]$check = $task.task.principals.principal.userid if ($task.task.principals.principal.userid) { write-verbose -message "writing the log file with values for $computername" add-content -path $logfilepath -value "$computername,$item,$check" } } } 出力は、次のように、デスクトップで生成されたコンマ区切りファイルです。> srv028,ccleanerskipuac,administrator > srv029,googleupdatetaskmachinecore,system > srv030,googleupdatetaskmachineua,system > srv021,backupmailboxes,domain\administrator > srv021,compress&archive,domain\sysscheduler