Больше условий в powershell, а не логическое возвращение - PullRequest
0 голосов
/ 26 ноября 2018

Мне нужно получить букву диска для моего состояния, но PowerShell возвращает значение «истина» или «ложь» для этого

(Get-Volume).driveletter `
  -and (get-volume).size -gt "700000000000" `
  -and (get-physicaldisk).MediaType -eq "HDD"

Когда get (Get-Volume).driveletter возвращает букву диска, когда больше условий возвращает логическое значение.Почему?

Thnx

1 Ответ

0 голосов
/ 26 ноября 2018

Логические операторы PowerShell возвращают логические значения $true и $false.Пока аргументы операторов преобразуются, их исходные значения не сохраняются.

(Некоторые языки, такие как JavaScript, возвращают предварительно преобразованные значения из логических операторов, но многие языки этого не делают.)

Для этого вам лучше использовать конвейер:

$res = Get-Volume `
   | ? { $_.driveletter -and $_.size -gt "700000000000" `
          -and (get-physicaldisk -objectid $_.ObjectId).MediaType -eq "HDD" }

Это также позволяет избежать проблемы, которая будет иметь значение (get-physicaldisk).MediaType -eq "HDD", если какой-либо диск является жестким диском.В то время как я подозреваю, что вы хотите диск, который является жестким диском, имеет букву диска и имеет достаточный размер.

...