20

このコード行を使用してドライブ文字をマップしようとしています。これにより、d から z までの使用可能なドライブのリストが得られます。

ls function:[d-z]: -n|?{!(test-path $_)}

次に、リストからランダムではなく最後の文字を選びたいと思います。どうすればそれを行うことができますか?Powershell を初めて使用します。助けてくれてありがとう。

4

6 に答える 6

9

はるかに冗長ですが、(私の意見では)読みやすく改善されたバージョンを探している場合:

# 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]
于 2013-08-02T14:35:50.920 に答える
6

リストの後ろから始めて、上に行くことができます。

最後の項目: 最後$array[-1] から 2 番目:$array[-2] など。

于 2020-06-05T19:45:10.107 に答える
3

これを試して:

ls function:[d-z]: -n|?{!(test-path $_)} | Select-Object -Last 1
于 2013-08-02T14:14:11.647 に答える
2

DZ からのすべてのパスを試す必要がない別のオプションは、 parseGet-Psdriveです。次に例を示します。

$lettersInUse = Get-Psdrive | ? { $_.Name.Length -eq 1 } | % { $_.Name }
$lastDriveLetter = [Char]'Z'
while ($lettersInUse -contains $lastDriveLetter) {
  $lastDriveLetter = [Char]($lastDriveLetter - 1)
}
$lastDriveLetter
于 2013-08-02T14:20:32.487 に答える