任意サイズのランダムな中身のバイナリデータを作成するスクリプト

ネットワーク速度のベンチマークを取るのに、でっかいバイナリデータが必要だったので作りました。

<#
    .SYNOPSIS
    中身がランダム…というか順番なバイナリデータを作成します。
#>


[CmdletBinding()]
Param(
    [Parameter(Mandatory=$true)]
    [string]
    #作成するファイル名
    $filePath,
    [Parameter(Mandatory=$true)]
    [ValidateRange(1,8589934588)]
    [long]
    #作成するバイナリファイルのサイズをバイトで指定します。
    $byteSize
)


try{
    #相対パス指定された場合、BinaryWriter.Writeがどこかわからないところにファイル出力するので、絶対パスに変換します。(※1)
    if( (Split-Path $filePath -IsAbsolute) -ne $true){
        $pwd = Get-Location
        $outFilePath = Join-Path $pwd $filePath
    }
    
    write-host "Output: $outFilePath"
    $fs = New-Object -TypeName System.IO.FileStream -ArgumentList $outFilePath, Create
    $binWriter =  New-Object -TypeName System.IO.BinaryWriter -ArgumentList $fs
    
    [int]$limit = $byteSize / 4
    
    for($cnt=0; $cnt -lt $limit; $cnt++){
        $binWriter.Write($cnt)
    }
    
    $binWriter.flush()
   
}finally{
    $fs.Dispose()
}

なんか私の環境では$outFilePathの文字列が相対パスのままだと、カレントディレクトリからの相対パスではないどこかわからないところにファイル作成されてしまうので、
対策として※1部分の処理を追加しました。
(処理追加前には、結局どこに出力されたのか、未だにわかっていない…)

不思議なことに※1コードがなくても、

powershell -f .\binaryFileCreater.ps1 -filePath .\test.bin -byteSize (1024*1024*1024)

って実行すると、ちゃんとカレントディレクトリに作成されるんだよなー。でも

.\binaryFileCreater.ps1 -filePath .\test.bin -byteSize (1024*1024*1024)

だとカレントディレクトリに作成されないんだよなー。どういうことなんだろう…?

コメントを残す