このコード行を使用してドライブ文字をマップしようとしています。これにより、dからzまで使用可能なドライブのリストが表示されます。
ls function:[d-z]: -n|?{!(test-path $_)}
次に、リストからランダムではなく最後の文字を選択したいと思います。どうすればそれを行うことができますか? Powershellは初めてで、助けてくれてありがとう。
そのパイプラインの最後でSelect-Object -Last 1
を使用できます。
もっと冗長なものを探しているが、(私の意見では)読みやすく改善されたバージョンを探している場合:
# Get all drives which are used (unavailable)
# Filter for the "Name" property ==> Drive letter
$Drives = (Get-PSDrive -PSProvider FileSystem).Name
# Create an array of D to Z
# Haven't found a more elegant version...
$Letters = [char[]]([char]'D'..[char]'Z')
# Filter out, which $Letters are not in $Drives (<=)
# Again, filter for their letter
$Available = (Compare-Object -ReferenceObject $Letters -DifferenceObject $Drives | Where {$_.SideIndicator -eq "<="}).InputObject
# Get the last letter
$LastLetter = $Available[-1]
これを試して:
ls function:[d-z]: -n|?{!(test-path $_)} | Select-Object -Last 1
D-Zからのすべてのパスを試す必要がない別のオプションは、Get-Psdrive
を解析することです。次に例を示します。
$lettersInUse = Get-Psdrive | ? { $_.Name.Length -eq 1 } | % { $_.Name }
$lastDriveLetter = [Char]'Z'
while ($lettersInUse -contains $lastDriveLetter) {
$lastDriveLetter = [Char]($lastDriveLetter - 1)
}
$lastDriveLetter