0
0

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]ディスク使用率を任意の値まで上げるスクリプト

Last updated at Posted at 2024-07-14

こんにちは!れーあです。
なんだか久しぶりの投稿になります。

今回はディスクサイズを任意のサイズにできるスクリプトを作っていきます。

それではどうぞ。

前提情報

今回は前提条件としてPowerShellを「管理者として実行」する必要があります。

スクリプト実行環境

PS C:\WINDOWS\system32> $PSVersionTable.PSVersion

Major  Minor  Build  Revision
-----  -----  -----  --------
5      1      19041  4648

スクリプト内容

今回のスクリプトは下記です。
処理内容:
 任意のパーセンテージを入力して、くっついている
 ディスクのディスク使用率が入力したパーセンテージになるよう
 サイズだけ大きいダミーファイルを作成する。

Disk_Usage_LimitTest.ps1
# 目標ディスク使用率を定義
$Want_Pct = Read-Host "Target Disk Usage Percentage? [1-100]"

# 定義外の指定値ではないことを判定
if($Want_Pct -match '[0-9]+$' -and !($Want_Pct -match '^0')){
	if([int32]$Want_Pct -le 100){
		$Disk_Pct = $Want_Pct / 100
		Write-Host "Set Disk Percentage:" $Want_Pct"%"
	}else{
		Write-Host "Error: Please Set Disk Usage Percentage 1 to 100."
		exit 1
	}
}else{
	Write-Host "Error: Please Set Disk Usage Percentage 1 to 100."
	exit 1
}

# 
foreach($Drive_Name in (Get-Volume |Where-Object {($_.DriveLetter).Length -eq 1 -and $_.DriveType -eq "Fixed" -and $_.OperationalStatus -eq "OK"}).DriveLetter){
	# ファイルサイズを定義 (ファイルサイズ = 目標ディスク使用サイズ - 現在ディスク使用サイズ)
	[int64]$File_Size = ((Get-Volume -DriveLetter $Drive_Name).Size * $Disk_Pct) - (((Get-Volume -DriveLetter $Drive_Name).Size) - ((Get-Volume -DriveLetter $Drive_Name).SizeRemaining))

	# ドライブに空きがあればテストファイルを作成する
	if($File_Size -gt 0){

		# テストファイル作成
			fsutil file createnew $Drive_Name":\test_file" $File_Size
			Write-Host "Disk Limit Test file successfully created."
	}else{
		Write-Host "Error: Not Enough Free Disk Space."
		exit 1
	}
}

気になる箇所

今回は「Get-Volume」を使用してディスクの値を取得しています。
foreachの中でWhere-Objectを使って、条件に一致する値だけを抽出するようにしています。

通常、「Get-Volume」だけ実行すると下記のような情報が表示されます。

PS C:\WINDOWS\system32> Get-Volume

DriveLetter FriendlyName FileSystemType DriveType HealthStatus OperationalStatus SizeRemaining      Size
----------- ------------ -------------- --------- ------------ ----------------- -------------      ----
            SYSTEM       FAT32          Fixed     Healthy      OK                     69.14 MB     96 MB
C           Windows      NTFS           Fixed     Healthy      OK                    184.92 GB 237.48 GB
            Recovery     NTFS           Fixed     Healthy      OK                    356.89 MB    900 MB

こうしてみると、システム用やリカバリ用の領域まで表示されていることがわかると思います。今回は付与されているドライブだけを対象にしたいので「Where-Object」では下記条件に一致するディスクのドライブレターだけを抽出するようにしています。
本来的には①だけでよいのですが、②、③を指定している理由は、
意図しない動作を起こす可能性を減らしたいため、
ディスクドライブ(CD/DVD/BD)を対象から排除するためです。
 ①ドライブレターが空白ではない
 ②ドライブタイプが「Fixed」である
 ③オペレーションステータスが「OK」である

なお、ここの抽出条件はOSやPowerShellのバージョンによって異なる場合がありますので、適宜修正が必要な部分となります。

あとは今回「fsutil file」を利用してファイルを作成しました。
これを使用することで指定したファイル名、サイズでダミーファイルを作成することができます。
以前、「大量のファイルを作成するスクリプト」というものを書いたことがあるのですが、そちらでは「New-Item」を使用して0KBの空ファイルを作成していたのに対して、こちらではサイズを持ったファイルを作成することができます。

実際に動かしてみた

それでは実際に動かしてみましょう。
まずは、実行前のドライブの空き容量を確認します。
image.png


ローカル端末なのでそれほど空きはないのですが、「53GB」の空き容量があるようです。

「管理者として実行」で開いたPowerShellからスクリプトを実行しています。
image.png

何パーセントまで使用するかを聞かれますので、今回はわかりやすくするために「95」と入力してEnterを押します。
image.png


正常に作成されたメッセージが表示されました。
image.png


Cドライブを見に行くと、下記のように使用率が上がっているのがわかると思います。
image.png

また、Cドライブ直下を見に行くと、ファイルサイズの大きいダミーファイルが作成されていることが確認できました。
image.png

なお、ディスク使用量が増えたままなのはよくないので、この作業が終わったらダミーファイルを削除しておきます。

注意点

本スクリプトを実行する上で注意する点が3つあります。

1つ目:PowerShellを管理者として実行する
スクリプトの内容上、ドライブ直下にダミーファイルを
作成するようになっています。
そのため、管理者として実行にしないとユーザーの権限によっては
アクセス拒否されてスクリプトが失敗する場合があります。
スクリプト上の指定パスを変更すれば問題はありませんが
実行権限は注意してみるようにしてください。

2つ目:入力する値として100は極力入力しない
仕様上、ディスクの使用率を
「100%」にすることもできるようになっています。
しかしながら、100%にした場合、最悪の場合、PCやサーバが壊れて
起動しなくなる恐れがあります。
可能なら「90%」ぐらいに留めておきましょう。

3つ目:存在するすべてのディスク上にダミーファイルを作成する
抽出条件のときにも記載しましたが、今回ディスクドライブについては
対象から除外しております。しかし、そのほかのディスクについては
すべてダミーファイルを作成するようになっています。
そのため、このドライブは別にダミーファイルを作りたくない等条件がある場合は、抽出条件の処理を変更する必要があります。
具体的には「Where-Object」の内容に「-and $_.DriveLetter -ne "ドライブレター"」を追加してあげることで対象から外すことができます。

おわりに

ということで今回はディスクサイズを任意のパーセントにするスクリプトを作成してみました。
これを使用することで例えばディスク使用率のしきい値を
監視しているシステムのテストを行うことができます。
仕事中そういうテストのとき、手動でやるの面倒だなぁと思ったのが
今回のきっかけでした。

何かの参考になればと思います。

それではまた。

参考

0
0
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
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?