見出し画像

画面スクショを定期的に送るツール

画面スクショを定期的に送るツールを作成します。


環境
 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 #監視業務 #業務効率化



この記事が気に入ったらサポートをしてみませんか?