画面スクショを定期的に送るツール
画面スクショを定期的に送るツールを作成します。
環境
OS:Windows10以上
言語:PowerShell
メールアドレス:Yahoo無料メール
ツールの動作
cドライブ直下にsukusyoフォルダを作り、
画面スクショを撮影、それをメールで送る
これらがタスクスケジューラーで自動的に動く
作り方
1.画面スクショを取るプログラムとYahooメールを送信するプログラムを作ります
下のコードをメモ帳に張り付けて保存してください。
「c:\temp\」フォルダにファイル名「send-sukusyo.ps1」で保存します。
Add-Type -AssemblyName System.Web
function send-yahoomail() {
param(
$YahooUser,
$YahooPassword,
$To ="$YahooUser@yahoo.co.jp",
$Subject = "空メール",
$Body = "内容",
$Attachment = ""
)
#アカウント情報
$user = $YahooUser # Yahooアカウント名 @以前の文字列
$password = $YahooPassword # Yahooアカウントパスワード
#メール情報
$mail = New-Object System.Web.Mail.MailMessage
$mail.From = "$user@yahoo.co.jp" # 送信元
$mail.To = $To # 送信先
#メールタイトル
$mail.Subject = $Subject
#本文
$mail.Body = $Body
#添付ファイル
if($Attachment -ne ""){
if(test-path $Attachment){
$mail.Attachments.Add((New-Object System.Web.Mail.MailAttachment($Attachment, [System.Web.Mail.MailEncoding]::Base64))) | Out-Null
}
}
$mail.Fields["http://schemas.microsoft.com/cdo/configuration/sendusing"] = 2 # 2 外部メールサーバへの接続
$mail.Fields["http://schemas.microsoft.com/cdo/configuration/smtpserver"] = "smtp.mail.yahoo.co.jp"
$mail.Fields["http://schemas.microsoft.com/cdo/configuration/smtpserverport"] = 465
$mail.Fields["http://schemas.microsoft.com/cdo/configuration/smtpauthenticate"] = 1 # 1:Basic認証、2:NTLM認証
$mail.Fields["http://schemas.microsoft.com/cdo/configuration/sendusername"] = $user
$mail.Fields["http://schemas.microsoft.com/cdo/configuration/sendpassword"] = $password
$mail.Fields["http://schemas.microsoft.com/cdo/configuration/smtpusessl"] = $true
[System.Web.Mail.SmtpMail]::SmtpServer = "smtp.mail.yahoo.co.jp"
[System.Web.Mail.SmtpMail]::Send($mail)
}
function screenshot() {
param(
$savefolder = "c:\sukusyo",
$savefile = "screenshot$(Get-Date -format 'yyyyMMddHHmmss').png"
)
if( -not (test-path $savefolder)){
New-Item $savefolder -ItemType Directory
}
# マルチモニター対応スクショ
Add-Type -AssemblyName System.Windows.Forms,System.Drawing
$screens = [Windows.Forms.Screen]::AllScreens
$top = ($screens.Bounds.Top | Measure-Object -Minimum).Minimum
$left = ($screens.Bounds.Left | Measure-Object -Minimum).Minimum
$width = ($screens.Bounds.Right | Measure-Object -Maximum).Maximum
$height = ($screens.Bounds.Bottom | Measure-Object -Maximum).Maximum
$bounds = [Drawing.Rectangle]::FromLTRB($left, $top, $width, $height)
$bitmap = New-Object System.Drawing.Bitmap ([int]$bounds.width), ([int]$bounds.height)
$graphics = [Drawing.Graphics]::FromImage($bitmap)
$graphics.CopyFromScreen($bounds.Location, [Drawing.Point]::Empty, $bounds.size)
$bitmap.Save("$savefolder\$savefile", [System.Drawing.Imaging.ImageFormat]::Png)
$graphics.Dispose()
$bitmap.Dispose()
if((test-path "$savefolder\$savefile")){
return "$savefolder\$savefile"
} else {
return ""
}
}
$sukusyo = screenshot
if($sukusyo -ne "") {
send-yahoomail -YahooUser "ヤフーアカウント" -YahooPassword "ヤフーアカウントパスワード" -To "送信先メールアドレス" -Subject "スクショ送信$(Get-Date -format 'yyyyMMddHHmmss')" -Attachment $sukusyo
}
(ヤフーアカウントのところはご自身のアカウントに書き換えてください)
(送信先メールアドレスは自分のメールアドレスにしてください)
2.さっきのコードをexe化します
ps2exe c:\temp\send-sukusyo.ps1 c:\temp\send-sukusyo.exe -noConsole
exe化について詳しくはこちら
exe化できたら一度実行して動作するか確認する。
上手く動作しない場合はヤフーアカウントが間違っていないか
送信先メールアドレスが間違っていないか確認してください。
3.タスクスケジューラーに登録する
下のコードでタスクスケジューラーに登録します。GPOでログインスクリプトとして配信してください。GPOが無い場合は、下のコードをexe化して、スタートアップに仕込む。
#アクション
$Action = New-ScheduledTaskAction -Execute c:\temp\send-sukusyo.exe
#30分ごとに無制限で実行し続けます。
$Trigger = New-ScheduledTaskTrigger -RepetitionInterval (New-TimeSpan -Minutes 30) -Once -At (Get-Date)
#5分以内にタスクが終了しない場合に自動でタスクを停止します。
#コンピュータがバッテリで稼働している場合でも、バッテリに切り替わった場合でもタスクを実行する。(”コンピュータをAC電源で使用している場合のみタスクを開始する”のオプションチェックを外した状態と同じ)
$Settings = New-ScheduledTaskSettingsSet -ExecutionTimeLimit (New-TimeSpan -Minutes 5) -AllowStartIfOnBatteries -DontStopIfGoingOnBatteries
#タスクを登録 同名のタスクがすでにある場合は上書きする
Register-ScheduledTask -TaskName "スクショ" -Action $Action -Trigger $Trigger -Force
これで設定時間毎に画面スクショがメール送信されます。
サーバ監視や社員監視にご活用ください。
今回はYahooメールを使いましたがメール送信部分を下のリンクを参考にしてGMAILや自サーバに書き換えても上手くいきます。
#PowerShell #コマンドレット #スクショ #AI #監視業務 #業務効率化
この記事が気に入ったらサポートをしてみませんか?