Результат, отличный от Powershell.exe по сравнению с Powershell IDE - PullRequest
0 голосов
/ 28 февраля 2019

Есть идеи, почему это происходит?Я пытаюсь создать строку, которая содержит всю информацию, которую я хочу (в конечном итоге выводится в графическом интерфейсе, в ячейке DataGridView), в Powershell.exe mediatype и healthstatus отображаются в виде кодов (3,4,0) вместо строк (HDD, SSD, OK), как показано в IDE:

Код в обоих случаях одинаков:

$DisquesPhysiques = invoke-command -ComputerName XXXX -ScriptBlock {get-physicaldisk}

foreach ($disque in $DisquesPhysiques) {
$infodisque = $($disque.FriendlyName) + " - " + $($disque.SerialNumber)+ " - "  + $($disque.MediaType)+ " - "  + $($disque.HealthStatus)+ " - "  + $([math]::Round($disque.Size/1gb))  + " GB"
$infodisque
}

enter image description here

Часть WEIRDEST иногда не отображает коды и отображает реальные слова (SDD, HDD, Healthy).Это очень проблематично, поскольку я не могу полагаться на то, чтобы это было число или слово последовательно!

1 Ответ

0 голосов
/ 28 февраля 2019

Это было очень странно, поэтому я получил информацию из CIM (WMI) и выполнил IF для типа носителя (4 - SDD):

$DisquesPhysiques = Get-CimInstance -ComputerName $poste MSFT_PhysicalDisk -Namespace Root\Microsoft\Windows\Storage

                foreach ($disque in $DisquesPhysiques)
                {
                    if ($disque.MediaType -eq 4) { $type = "SSD" }
                    else { $type = "HDD" }
                    $infodisque = $($disque.FriendlyName) + " - " + $($disque.SerialNumber) + " - " + $type + " - " + $([math]::Round($disque.Size/1gb)) + " GB"
                    $tableInfoPoste.Rows.add("Disque physique", $infodisque)
                }
...