【Powershell】リモートWindowsOSのタスクスケジューラを実行するツール

スポンサーリンク
スポンサーリンク

リモートサーバ(WindowsOS)のタスクスケジューラを実行したい

不定期にタスクスケジューラを実行する仕事があるサーバがあるのだけど、一々そのサーバにログインするのが面倒だったので
自分のPCからリモートでタスクスケジューラを実行できるようPowershellでスクリプトを作った

搭載機能

  • 指定したWinサーバ上に存在するタスクスケジューラを即時実行する。今回特に(仕事で)必要なかったのでスクリプトに直接対象サーバとタスクを記載する方式とする。
  • 今回はドメイン参加しているサーバが対象なので、認証情報はドメインのAdministratorを使用する。(もちろん権限さえあればなんでもいい)
  • 後からエラーなどを終えるように実行ログを別ファイルとして吐き出す。(別途関数にしたほうが良かった気がする。要改善)

コード

絶対改善余地があるけどこんな感じ。

# 日付の取得
$date = Get-Date -Format "yyyyMMdd";

# 時間の取得
$time = Get-Date -Format "HHmmss";

# 調査結果を出力するフォルダ
$scriptPath = $MyInvocation.MyCommand.Path
$scriptPath_split = Split-Path -Parent $scriptPath
$ResultFolder = ($scriptPath_split+"\結果")

# 調査結果出力結果フォルダがなかったら作成
if( -not (Test-Path $ResultFolder) ) {
    New-Item $ResultFolder -Type Directory
}

# 実行結果出力ファイル名
$ExecuteLogFile = ( "\ExecuteLog_"+$date+"_"+$time+".log" )

#実行結果出力フォルダとファイル名のマージ
$ExecuteLog = Join-Path $ResultFolder $ExecuteLogFile


Start-Transcript $ExecuteLog


echo "認証情報取得のためパスワードを入力してください。"

# ドメインのAdministratorの認証情報を取得する
$AdminCred = Get-Credential -Credential Administrator


# 対象サーバ向けの新規セッションを作成
$SVsession = New-PSSession [対象サーバ] -Credential $AdminCred
    
# リモートセッション上へローカルユーザー取得コマンドを渡す。結果をCSVに出力する
$Item = Invoke-Command -Session $SVSession -ScriptBlock { Start-ScheduledTask -taskpath \ -taskname "[実行したいタスクの名前]" }  
    
    
# 作成したセッションを閉じる
Remove-PSSession $SVSession


# 実行結果ファイルを開く
Invoke-item $ExecuteLog

Stop-Transcript

実行イメージ

なし

注意点と補足

・PowerShellが実行可能な環境である必要があります。
・実行環境となるサーバ自身のユーザ削除はできない。(New-PSSessionで取得できないはず)
・タスクスケジューラの名前は「Get-ScheduledTask」で取得可能です。

改版履歴

2021/02/05 初版公開

コメント

タイトルとURLをコピーしました