監視端末起動時に必要な画面・Outlook・共有フォルダ・RDPをまとめて開く
はじめに
監視端末や運用端末では、作業開始時に毎回同じ画面を開くことがあります。
たとえば、
- 監視Web画面
- メールソフト
- 共有フォルダ
- リモートデスクトップ接続
- 運用対象サーバの管理画面
などです。
毎回手作業で開いてもよいのですが、日々の運用では小さな手間になります。
また、開き忘れがあると、障害通知や作業依頼に気づくのが遅れることもあります。
ほか、他者への引き継ぎなどにも利用できると思います。
手順上忘れがちな「このwebページ開いて、この端末のRDPして」といった細々とした内容を、一括で開くことにより省略できると思います。
この記事では、PowerShellを使って、監視端末起動時に必要な画面やアプリケーションをまとめて開く方法を紹介します。
想定する用途
このスクリプトは、以下のような場面を想定しています。
- 監視端末の起動後に必要な画面をまとめて開きたい
- 運用開始時の準備作業を標準化したい
- 監視Web画面、メール、共有フォルダ、RDPをまとめて起動したい
- 作業者による開き忘れを減らしたい
- 手順書に書いている「最初に開くもの」をスクリプト化したい
このスクリプトは監視製品そのものではありません。
あくまで、監視端末や運用端末の立ち上げ作業を補助するためのものです。
やりたいこと
今回やりたいことは以下です。
- 起動直後に少し待つ
- 監視Web画面を開く
- Outlookを起動する
- 共有フォルダを開く
- 複数サーバへのRDP接続を開く
- 必要な画面をまとめて準備する
スクリプト例
以下は、PowerShellで監視画面、Outlook、共有フォルダ、RDPをまとめて開くサンプルです。
環境に合わせて、URL、共有フォルダ、RDP接続先を変更してください。
# ==========================================
# 監視端末 起動時画面一括表示スクリプト
# ==========================================
# 起動直後に少し待つ
# 端末起動直後はネットワークや常駐アプリの準備が終わっていない場合があるため
Start-Sleep -Seconds 15
# ==========================================
# 監視Web画面を開く
# ==========================================
$monitorUrls = @(
"https://monitor.example.local/",
"https://status.example.local/"
)
foreach ($url in $monitorUrls) {
Start-Process $url
Start-Sleep -Seconds 2
}
# ==========================================
# Outlookを起動する
# ==========================================
$outlookPath = "C:\Program Files\Microsoft Office\root\Office16\OUTLOOK.EXE"
if (-not (Test-Path $outlookPath)) {
$outlookPath = "C:\Program Files (x86)\Microsoft Office\Office16\OUTLOOK.EXE"
}
if (Test-Path $outlookPath) {
Start-Process -FilePath $outlookPath
}
else {
Write-Host "Outlook path not found."
}
Start-Sleep -Seconds 3
# ==========================================
# 共有フォルダを開く
# ==========================================
$sharePaths = @(
"\\fileserver\operation",
"\\fileserver\log"
)
foreach ($share in $sharePaths) {
Start-Process explorer.exe $share
Start-Sleep -Seconds 1
}
# ==========================================
# RDP接続を開く
# ==========================================
$rdpServers = @(
"server01.example.local",
"server02.example.local",
"server03.example.local",
"server04.example.local"
)
foreach ($server in $rdpServers) {
Start-Process mstsc.exe -ArgumentList "/v:$server"
Start-Sleep -Seconds 2
}
各項目の説明
起動直後に少し待つ
Start-Sleep -Seconds 15
端末起動直後は、ネットワーク接続や常駐アプリの起動が完了していないことがあります。
その状態で共有フォルダや監視Web画面を開こうとすると、接続に失敗する場合があります。
そのため、最初に少し待ち時間を入れています。
待ち時間は環境に合わせて調整してください。
監視Web画面を開く
$monitorUrls = @(
"https://monitor.example.local/",
"https://status.example.local/"
)
foreach ($url in $monitorUrls) {
Start-Process $url
}
Start-Process にURLを渡すと、通常は既定のブラウザで開きます。
監視画面が複数ある場合は、配列にURLを追加します。
$monitorUrls = @(
"https://monitor.example.local/",
"https://zabbix.example.local/",
"https://syslog.example.local/"
)
特定のブラウザを指定したい場合は、ブラウザの実行ファイルを指定します。
Start-Process "msedge.exe" "https://monitor.example.local/"
Outlookを起動する
Start-Process -FilePath $outlookPath
運用端末では、監視メールや作業依頼メールを確認するためにOutlookを開くことがあります。
Officeのインストール形態によってOutlookのパスが異なるため、サンプルでは複数パスを確認しています。
環境によっては、以下のように単純に起動できる場合もあります。
Start-Process outlook.exe
共有フォルダを開く
Start-Process explorer.exe "\\fileserver\operation"
運用手順書、ログ置き場、作業依頼フォルダなど、日常的に使う共有フォルダを開きます。
複数の共有フォルダを開きたい場合は、配列に追加します。
$sharePaths = @(
"\\fileserver\operation",
"\\fileserver\log",
"\\fileserver\manual"
)
RDP接続を開く
Start-Process mstsc.exe -ArgumentList "/v:server01.example.local"
mstsc.exe を使って、指定したサーバへのリモートデスクトップ接続を開きます。
複数サーバへ接続したい場合は、配列にサーバ名を並べます。
$rdpServers = @(
"server01.example.local",
"server02.example.local",
"server03.example.local"
)
このサンプルでは資格情報の自動入力は行っていません。
資格情報の保存や自動入力を組み合わせることもできますが、セキュリティ上の注意点が増えるため、この記事では扱いません。
タスクスケジューラで起動時に実行する
端末起動時に自動実行したい場合は、タスクスケジューラに登録します。
プログラム
powershell.exe
引数
-ExecutionPolicy Bypass -File "C:\script\Open-MonitorConsole.ps1"
トリガー例
ログオン時
監視端末にログオンしたタイミングで、必要な画面をまとめて開くことができます。
batからPowerShellを呼び出す場合
PowerShellに不慣れな作業者向けに、batから呼び出す形にしてもよいです。
@echo off
powershell.exe -ExecutionPolicy Bypass -File "C:\script\Open-MonitorConsole.ps1"
デスクトップにbatのショートカットを置いておけば、作業者がダブルクリックで起動できます。
このスクリプトでできること
このスクリプトでは、以下のことができます。
- 監視Web画面をまとめて開く
- Outlookを起動する
- 共有フォルダを開く
- 複数サーバへのRDP接続を開く
- 運用開始時の準備作業を標準化する
- 開き忘れを減らす
- 監視端末の立ち上げ手順を簡略化する
注意点
資格情報は自動入力しない
このサンプルでは、RDPの資格情報や共有フォルダの資格情報を自動入力していません。
資格情報をスクリプトに直接書くと、漏えいリスクが高くなります。
必要な場合でも、以下のような点を検討してください。
- スクリプトに平文パスワードを書かない
- Windows資格情報マネージャーの扱いに注意する
- 実行端末を限定する
- 権限のある作業者だけが使う
- 共有フォルダやRDPの保存済み資格情報を定期的に見直す
開く画面が多すぎると逆に使いづらい
便利だからといって、監視画面やRDPを大量に開きすぎると、端末の負荷が上がったり、画面が散らかったりします。
最初は本当に必要なものだけに絞るのがよいです。
起動順序と待ち時間を調整する
端末起動直後は、ネットワーク接続やプロキシ設定、常駐アプリの起動が完了していないことがあります。
うまく開けない場合は、Start-Sleep の秒数を調整します。
Start-Sleep -Seconds 30
IE前提のスクリプトは見直す
過去にはInternet ExplorerのCOMオブジェクトを使ってWeb画面を開く方法もありました。
$ie = New-Object -ComObject InternetExplorer.Application
ただし、現在はInternet Explorer前提の運用は避けた方がよいため、既定ブラウザやMicrosoft Edgeなどで開く形に見直すのがよいです。
RDP接続先は環境に合わせて管理する
接続先サーバが増える場合は、スクリプト内の配列を変更します。
台数が多い場合は、CSVファイルに接続先一覧を持たせて読み込む形にしてもよいです。
$rdpServers = Import-Csv "C:\script\rdp_servers.csv"
この場合は、CSVの列名や読み込み処理を別途整える必要があります。
まとめ
PowerShellを使うことで、監視端末や運用端末の起動時に必要な画面をまとめて開くことができます。
監視Web画面、Outlook、共有フォルダ、RDP接続などを毎回手作業で開いている場合、スクリプト化しておくと小さな手間を減らせます。
大事なのは、
便利だから何でも自動で開く
ではなく、
運用開始時に本当に必要なものだけを、同じ順番で開けるようにする
ことだと思います。
小さな自動化ですが、日々の運用ではこういう準備作業の標準化が効いてきます。