PC起動時にWindows Terminalの背景画像をランダムで変えるスクリプトを書いてみた

PC起動時にWindows Terminalの背景画像をランダムで変えるスクリプトを書いてみた

こんにちは、Mako(@makokamiya)です。

CODE BASE OKINAWA プログラミングスクール Advent Calendar 2020 の2記事めとして投稿します!

経緯

学校PCのWindows Terminalに、(最近個人的にはまっている鬼滅の刃のキャラクターの)背景画像を設定して使っていますが、自動でランダムに画像を変えられたらいいなと思いました。

「スクリプト」ってなに?というレベルの私がいろいろ調べながらやったものなので、間違っているところや、もっといい方法があるよ―などコメントいただけると嬉しいです。

前提

  • Windows PowerShellで背景画像を設定している。
  • 背景に設定する画像の名前を決めておく。例)terminal_img.jpg
  • 画像の保存先のパスを確認しておく。例)C:/Users/*****/terminal_imgs/
    (*****)の部分はご自身の環境に合わせる

画像をランダムに変更するスクリプトを作成

スクリプトとは

スクリプトとは、台本、脚本、原稿、手書き、筆記体などの意味を持つ英単語。ITの分野では簡易なコンピュータプログラムをスクリプトと呼ぶことが多い。

http://e-words.jp/w/%E3%82%B9%E3%82%AF%E3%83%AA%E3%83%97%E3%83%88.html

さっそくスクリプトを書いてみる

まず任意のフォルダに任意の名前のスクリプトを作成する。拡張子はps1。
(ps1はpowershellのスクリプトファイルらしい。)

私の場合は、覚えやすいように画像を保存しているフォルダに「terminal_img.ps1」という名前で作成しました。

中身は以下のように作成する。

// フォルダの中にあるjpg画像を配列として格納。
$array = Get-ChildItem 'C:\Users\*****\terminal_imgs' -Name -Filter *.jpg

// 配列の長さ
$array_length = $array.Length

// 配列のインデックス番号をランダムで設定。(番号は0から配列の数の間)
$array_number = Get-Random -Minimum 0 -Maximum $array_length

// ランダムで決められた画像の名前を格納。
$img = $array[$array_number]

// ランダムで決められた画像をコピーして決めておいた名前に変更。
Copy-Item "C:/Users/*****/terminal_imgs/$img" -Destination "C:\Users\*****\terminal_imgs\terminal_img.jpg"

Get-ChildItem

ディレクトリの中のアイテムの名前を取得する。

-Name で名前だけを取得する。

-Filter でフィルターかけて検索。

参考:https://docs.microsoft.com/ja-jp/powershell/module/microsoft.powershell.management/get-childitem?view=powershell-7.1#example-2–get-child-item-names-in-a-directory

Get-Random

乱数を取得する。

-Maximum で最大値よりも小さい値を返す。(以下ではない。)

参考:https://docs.microsoft.com/ja-jp/powershell/module/microsoft.powershell.utility/get-random?view=powershell-7.1#example-2–get-a-random-integer-between-0-and-99

Copy-Item

アイテムをコピーする。

-Destination で移動先を指定する。defaultはカレントディレクトリ。

参考:https://docs.microsoft.com/ja-jp/powershell/module/microsoft.powershell.management/copy-item?view=powershell-7.1#example-4–copy-a-file-to-the-specified-directory-and-rename-the-file

スクリプトを実行してみる

実行ポリシーを有効にする

ps1ファイルはデフォルトで実行できないようになっているようです。

Windows PowerShellを管理者として実行し、下記コマンドを実行する。

Set-ExecutionPolicy -ExecutionPolicy RemoteSigned

確認メッセージが表示されるので、yを入力する。

これでps1ファイルの実行ができるようになりました。

スクリプトの実行

下記のように実行する。

\Users\*****\terminal_imgs\terminal_img.ps1

Powershellを再起動してみる。画像が変わっているはず。

PC起動時にスクリプトを実行する

毎回スクリプトを実行するのは面倒なので、PC起動時にスクリプトを実行するように設定してみる。

  1. Windows PowerShell のショートカットを「C:\Users\*****\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup」に作成する。
    (環境によって場所が違うかもしれない。)
  2. 作成したショートカットを右クリックしてプロパティを開く。
  3. 「リンク先」を「%SystemRoot%\system32\WindowsPowerShell\v1.0\powershell.exe -Command “C:\Users\*****\terminal_imgs\terminal_img.ps1″」のように設定する。

これでPCを起動したときに、作成したWindows PowerShell のショートカットが”C:\Users\*****\terminal_imgs\terminal_img.ps1“のコマンドとともに実行され、画像がランダムに入れ替わる!

おわり。

まとめ

やっぱりテンション上がりますね。