はじめに
以前に書いたドライブレターを変える方法では、「現在割り当てられているドライブレターを、未割り当ての別のドライブレターに変える方法」を紹介しました。
今回はそれと関連して、「未割り当ての(空いている)ドライブレターをPowerShellで探す方法」をまとめてみました。
未割り当てのドライブレターを把握できれば、例えばPowerShellで「共有フォルダをドライブとして割り当てる」という時に、割り当て済みのドライブレターを指定したことによるエラーを防ぐことが出来ます。
作成したスクリプト
- 今回は「A~Zまでの全ドライブレター」から「割り当て済みのドライブレター」を差し引いて、「割り当て済みのドライブレター」を求める方法を採用しました。
- 割り当て済みのドライブレターを直接的に求める方法が分からなかったので、このような実装になりました...
- 「A~Zまでの全ドライブレター」を生成する部分では、Graceful way to create an alphabet arrayに掲載されているコードをほぼそのまま利用させてもらいました。
find_assignable_letters.ps1
# A:~Z:までの全ドライブレターを作る。
$drive_letters = @()
for ([byte]$c = [char]'A'; $c -le [char]'Z'; $c++)
{
$drive_letters += ([char]$c + ":")
}
# 現在割り当てられているドライブレターを取得する。
$assigned_letters = Get-WmiObject Win32_LogicalDisk | % { $_.Name}
# 全ドライブレターから割り当て済みのドライブレターを差し引く
$result = Compare-Object -ReferenceObject $drive_letters -DifferenceObject $assigned_letters -PassThru | Sort-Object
# 結果を表示する
echo $result
実行した環境
- 以下の図のように、
C
、D
、F
、H
のドライブレターが割り当て済み(使用されている)環境において、上記のスクリプトを実行しました。
実行結果
- 割り当て済みの
C
、D
、F
、H
を除いたドライブレターが抽出されました。
実行結果
A:
B:
E:
G:
I:
J:
K:
L:
M:
N:
O:
P:
Q:
R:
S:
T:
U:
V:
W:
X:
Y:
Z: