1
5

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

【Powershell】Windows10の標準機能だけで一定間隔でスクショを取りたい

Last updated at Posted at 2021-11-22

業務ごとに工数入力をしないといけないのに、過去に何をしていたか思い出せない。
それなら、定期的にスクショを取っておけばいいじゃないという発想で作成。

目次

1. 構成
2. powershellスクリプト
3. VBS
4. タスクスケジューラ設定

1. 構成

使用する機能は以下の3つを使用します。

  • Powershell
  • VBS
  • タスクスケジューラ

フォルダ構成は以下を想定しています。

C:\worklog
 ┣ printscreen.xml
 ┣ printscreen.vbs
 ┣ printscreen.ps1
 ┗ yyyymmdd-hhmm.png ← 5分に1ファイル作成される

2. powershellスクリプト

printscreen.ps1
$path = "C:\worklog\"
$file = (Get-Date).ToString("yyyyMMdd-HHmmss") + ".png"

Add-Type -A System.Windows.Forms

[Windows.Forms.Screen]::PrimaryScreen.Bounds |
    % {[Drawing.Bitmap]::New($_.Width, $_.Height)} |
    sv b

[Drawing.Graphics]::FromImage($b).CopyFromScreen(0, 0, $b.Size)

md -f $path

% { $path + $file -f $_ }  |
? { (Test-Path $_) -eq $false } |
select -F 1 |
% { $b.Save($_) }

3. VBS

VBSを使用する理由としては、Powershell実行時のウィンドウポップアップ表示を防ぐため。

Powershellウィンドウが突如現れると作業がいちいち止まるので、VBS経由で実行するのが吉。

VBSからps1ファイルを実行する方法は、下記サイトを参考にさせていただきました。
PowerShell のウィンドウを一切表示させずに実行する

printscreen.vbs
Option Explicit
Dim psFilePath : psFilePath = Replace(WScript.ScriptFullName, ".vbs", ".ps1")
WScript.CreateObject("WScript.Shell").Run "C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe -NoLogo -File " & Chr(34) & psFilePath & Chr(34), 0

4. タスクスケジューラ設定

クライアントPCで使用するなら電源ケーブル未使用時にも実行させるよう設定値を編集する必要があったり、スクショ漏れを防ぐためにタスク未完了時は並列処理させたりと、なんだかんだ考慮すべき点があります。

なので、①下記をコピー、②xmlファイルとして保存、③タスクスケジューラでインポート、することを推奨します。

※ユーザー名等、環境固有情報は適宜修正いただく必要があります。

printscreen.xml
<?xml version="1.0" encoding="UTF-16"?>
<Task version="1.2" xmlns="http://schemas.microsoft.com/windows/2004/02/mit/task">
  <RegistrationInfo>
    <Date>2021-11-23T00:02:12.9020652</Date>
    <Author>TNTHINKPAD\user</Author>
    <URI>\printscreen</URI>
  </RegistrationInfo>
  <Triggers>
    <CalendarTrigger>
      <Repetition>
        <Interval>PT5M</Interval>
        <Duration>P1D</Duration>
        <StopAtDurationEnd>false</StopAtDurationEnd>
      </Repetition>
      <StartBoundary>2022-01-18T09:00:00</StartBoundary>
      <Enabled>true</Enabled>
      <ScheduleByDay>
        <DaysInterval>1</DaysInterval>
      </ScheduleByDay>
    </CalendarTrigger>
  </Triggers>
  <Principals>
    <Principal id="Author">
      <UserId>S-1-5-21-1659786343-3538112764-2108308975-1001</UserId>
      <LogonType>InteractiveToken</LogonType>
      <RunLevel>LeastPrivilege</RunLevel>
    </Principal>
  </Principals>
  <Settings>
    <MultipleInstancesPolicy>Parallel</MultipleInstancesPolicy>
    <DisallowStartIfOnBatteries>false</DisallowStartIfOnBatteries>
    <StopIfGoingOnBatteries>true</StopIfGoingOnBatteries>
    <AllowHardTerminate>false</AllowHardTerminate>
    <StartWhenAvailable>false</StartWhenAvailable>
    <RunOnlyIfNetworkAvailable>false</RunOnlyIfNetworkAvailable>
    <IdleSettings>
      <StopOnIdleEnd>true</StopOnIdleEnd>
      <RestartOnIdle>false</RestartOnIdle>
    </IdleSettings>
    <AllowStartOnDemand>false</AllowStartOnDemand>
    <Enabled>true</Enabled>
    <Hidden>false</Hidden>
    <RunOnlyIfIdle>false</RunOnlyIfIdle>
    <WakeToRun>false</WakeToRun>
    <ExecutionTimeLimit>PT0S</ExecutionTimeLimit>
    <Priority>7</Priority>
  </Settings>
  <Actions Context="Author">
    <Exec>
      <Command>C:\worklog\printscreen.vbs</Command>
    </Exec>
  </Actions>
</Task>
1
5
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
5

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?