シェルスクリプトマガジン

特集1 PowerShellを学ぼう(Vol.73記載)

著者:三沢 友治

PowerShellとは、米Microsoft社が開発したシェルおよびスクリプト言語です。Windows OSや、Microsoft Office製品に関連するサービス「Microsoft 365」を管理するのに活用されています。本特集では、これからPowerShellに取り組み始めたい人を対象に、PowerShellについて基本から分かりやすく解説します。

シェルスクリプトマガジン Vol.73は以下のリンク先でご購入できます。

図47 時刻を取得するスクリプト(writeTime.ps1)

# 現在の時刻で時間オブジェクトを取得
# 時間オブジェクトは文字列ではなく時間の情報を保持している
# そのため一部の情報を容易に取得できる
$date = Get-Date
# 取得した時間から指定のフォーマットでファイルを上書き
# 時間を取得するhh:mmを指定し、その内容をfile.txtに上書きしている。追記したい場合は >> file.txtとする
$date.ToString("hh:mm") > file.txt

図48 ランダムな名前、ランダムな作成日でファイルを作成するスクリプト(CreateRandomFiles.ps1)

# 指定したディレクトリにランダムな内容のファイルを指定サイズで作成する
# 成功時はTrue、失敗時はFalseを返す
Function CreateRandomBiteArrayFile([string]$Path, [int]$sizeMB)
{
    try
    {
        # ランダムな10文字のファイル名を作成 
        $fileName = -join ((1..10) | %{(65..90) + (97..122) | Get-Random} | foreach-object {[char]$_})
        # フルパスのファイル名を作る
        $fullFileName = $Path + "\" + $fileName + ".tmp"
        # ファイルの存在を確認
        if(Test-Path $fullFileName)
        {
            # 同一ファイル名が失敗として終了する
            return $false
        } 
        # 指定サイズでバイト配列を作成する
        $file = new-object byte[] ($sizeMB * 1024 * 1024)
        # バイト配列にランダムデータを入れる
        (new-object Random).NextBytes($file)
        # IO APIを利用してファイルに書き込む
        [IO.File]::WriteAllBytes($fullFileName, $file)
        # 100日の間でランダムな日を決める
        $day = Get-Random -maximum 100
        # ファイルの作成日付を変更する(100日の間でランダム)
        Set-ItemProperty $fullFileName -Name LastWriteTime -Value (Get-Date).addDays($day * -1) 
        return $true
    }
    catch
    {
        # サンプルスクリプトのため例外を大きく割愛している
        # 実務的なコードでは例外発生個所が分かる範囲でCatchするのが理想となる(同じ例外が発生しない粒度で)
        return $false
    }
}


# ファイルを格納するディレクトリ(今回の指定はカレントディレクトリ)
$fileDirectoryPath = pwd
# ファイルサイズ(Mバイト指定)
$size = 1
# 作成ファイル数
$num = 10
# num個のファイルが作成される
# ただし、ランダムなファイル名が被る場合、作成されるファイルが減る
@(1..$num) | Foreach{
    CreateRandomBiteArrayFile $fileDirectoryPath $size
}