Как получить значение из выражения PS? - PullRequest
0 голосов
/ 31 января 2020

Я пытаюсь собрать выражение, которое возвращает пустое значение, без таблицы или имени включенного выражения.

Например, у меня есть эта строка из другого решения :

gwmi win32_logicaldisk -Filter "DeviceID = 'C:'" |
  Format-Table @{n="Size";e={[math]::Round($_.Size/1GB,2)}}

Возвращает:

 Size
 ----
475.33

Как мне взять только 475,33?

Ответы [ 3 ]

0 голосов
/ 31 января 2020
  • Format-* командлеты возвращают объекты, единственной целью которых является предоставление инструкций по форматированию в систему форматирования вывода PowerShell - см. этот ответ . Короче говоря, используйте только Format-* командлеты для форматирования данных для отображения , никогда для последующих программ c обработки .

  • gwmi - это встроенный псевдоним для командлета Get-WmiObject, который устарел. Командлеты CIM (например, Get-CimInstance) заменили командлеты WMI в PowerShell v3 (выпущен в сентябре 2012 г.). Поэтому следует избегать командлетов WMI, не в последнюю очередь потому, что PowerShell [Core] v6 +, где все будущие усилия будут go, даже не будет их больше. Для получения дополнительной информации см. этот ответ .

  • Если вы просто хотите вычислить значение , полученное из (каждого из) ваших входных объектов, используйте ForEach-Object cmdlet.

Следовательно:

Get-CimInstance win32_logicaldisk -Filter "DeviceID = 'C:'" | ForEach-Object {
  [math]::Round($_.Size / 1gb, 2)
}

Или, проще, используя выражение:

[math]::Round(
  (Get-CimInstance win32_logicaldisk -Filter "DeviceID = 'C:'").Size / 1gb, 2
)
0 голосов
/ 31 января 2020

Если вы используете свою первую строку:

gwmi win32_logicaldisk -Filter "DeviceID = 'C:'" | Format-Table @{n="Size";e={[math]::Round($_.Size/1GB,2)}}

Но передайте его через Select-объект вместо таблицы форматирования, затем передайте его снова, чтобы выбрать объект, расширяющий свойство (или просто .size)

  gwmi win32_logicaldisk -Filter "DeviceID = 'C:'" | Select @{n="Size";e={[math]::Round($_.Size/1GB,2)}} | select -ExpandProperty Size
0 голосов
/ 31 января 2020

Используйте Select-Object вместо Format-Table:

$DiskC = gwmi win32_logicaldisk -Filter "DeviceID = 'C:'" | Select-Object @{n="Size";e={[math]::Round($_.Size/1GB,2)}}

$DiskC.Size
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...