2 votes

Pourquoi ce tri powershell ne fonctionne-t-il pas (objets PhysicalDisk) ?

PS C:\WINDOWS\system32> Get-PhysicalDisk | Sort-Object Number

Number FriendlyName           SerialNumber MediaType   CanPool OperationalStatus HealthStatus Usage            Size
------ ------------           ------------ ---------   ------- ----------------- ------------ -----            ----
3      Seagate Backup+  Desk  NA7E5JCS     Unspecified False   OK                Healthy      Auto-Select   2.73 TB
0      Crucial_CT500MX200SSD1 162112CAE0AE SSD         False   OK                Healthy      Auto-Select 465.76 GB
2      Seagate Expansion Desk NA4K7L4K     Unspecified False   OK                Healthy      Auto-Select   3.64 TB

PS C:\WINDOWS\system32> $psversionTable

Name                           Value
----                           -----
PSVersion                      5.1.19041.610
PSEdition                      Desktop
PSCompatibleVersions           {1.0, 2.0, 3.0, 4.0...}
BuildVersion                   10.0.19041.610
CLRVersion                     4.0.30319.42000
WSManStackVersion              3.0
PSRemotingProtocolVersion      2.3
SerializationVersion           1.1.0.1

3voto

Johan Leino Points 2533

Pourquoi ce tri PowerShell ne fonctionne-t-il pas ?

Get-PhysicalDisk | Sort-Object Number

Il semble que votre syntaxe ne soit pas correcte.

Get-PhysicalDisk | Sort-Object -Property DeviceID -Descending
Get-PhysicalDisk | Sort-Object -Property DeviceID

Sorties :

Number FriendlyName            SerialNumber         MediaType CanPool OperationalStatus HealthStatus Usage            Size
    ------ ------------            ------------         --------- ------- ----------------- ------------ -----            ----
    5      MSFT XVDD                                    SSD       False   OK                Healthy      Auto-Select  29.38 GB
    4      MSFT XVDD                                    SSD       False   OK                Healthy      Auto-Select 109.91 GB
    3      MSFT XVDD                                    SSD       False   OK                Healthy      Auto-Select  11.34 GB
    2      ST10000NM0086                                HDD       True    OK                Healthy      Auto-Select    9.1 TB
    1      Samsung SSD 860 EVO 2TB                      SSD       False   OK                Healthy      Auto-Select   1.82 TB
    0      Samsung SSD 970 PRO 1TB                      SSD       False   OK                Healthy      Auto-Select 953.87 GB

Number FriendlyName            SerialNumber         MediaType CanPool OperationalStatus HealthStatus Usage            Size
    ------ ------------            ------------         --------- ------- ----------------- ------------ -----            ----
    0      Samsung SSD 970 PRO 1TB                      SSD       False   OK                Healthy      Auto-Select 953.87 GB
    1      Samsung SSD 860 EVO 2TB                      SSD       False   OK                Healthy      Auto-Select   1.82 TB
    2      ST10000NM0086                                HDD       True    OK                Healthy      Auto-Select    9.1 TB
    3      MSFT XVDD                                    SSD       False   OK                Healthy      Auto-Select  11.34 GB
    4      MSFT XVDD                                    SSD       False   OK                Healthy      Auto-Select 109.91 GB
    5      MSFT XVDD                                    SSD       False   OK                Healthy      Auto-Select  29.38 GB

Source : Exemple 1 : trier le répertoire actuel par nom

Get-PhysicalDisk ne renvoie pas réellement une propriété nommée Number comme le montre la commande suivante :

 Get-PhysicalDisk | Select-Object Number, FriendlyName, Size

Number FriendlyName                      Size
------ ------------                      ----
       MSFT XVDD                  12179415040
       MSFT XVDD                 118010777600
       MSFT XVDD                  31548567552
       Samsung SSD 970 PRO 1TB  1024209543168
       ST10000NM0086            10000831348736
       Samsung SSD 860 EVO 2TB  2000398934016

Alors que la commande suivante renvoie le résultat correct :

Get-PhysicalDisk | Select-Object DeviceID, FriendlyName,Size

DeviceID FriendlyName                      Size
-------- ------------                      ----
3        MSFT XVDD                  12179415040
4        MSFT XVDD                 118010777600
5        MSFT XVDD                  31548567552
0        Samsung SSD 970 PRO 1TB  1024209543168
2        ST10000NM0086           10000831348736
1        Samsung SSD 860 EVO 2TB  2000398934016

3voto

postanote Points 3762

Utilisez toujours Get-Member pour être sûr d'obtenir les attributs bruts. par rapport à ce qui est affiché sur l'écran, dont nous savons tous qu'il est souvent manipulé.

(Get-PhysicalDisk)[0] | 
Get-Member
# Results
<#
   TypeName: Microsoft.Management.Infrastructure.CimInstance#root/microsoft/windows/storage/MSFT_PhysicalDisk

Name                             MemberType     Definition                                                                                                                        
----                             ----------     ----------                                                                                                                        
...                                                                                                                
AdapterSerialNumber              Property       string AdapterSerialNumber {get;}                                                                                                 
AllocatedSize                    Property       uint64 AllocatedSize {get;}                                                                                                       
CanPool                          Property       bool CanPool {get;}                                                                                                               
Description                      Property       string Description {get;}                                                                                                         
DeviceId                         Property       string DeviceId {get;}                                                                                                            
EnclosureNumber                  Property       uint16 EnclosureNumber {get;}                                                                                                     
FirmwareVersion                  Property       string FirmwareVersion {get;}                                                                                                     
FriendlyName                     Property       string FriendlyName {get;}                                                                                                        
IsIndicationEnabled              Property       bool IsIndicationEnabled {get;}                                                                                                   
IsPartial                        Property       bool IsPartial {get;}                                                                                                             
LogicalSectorSize                Property       uint64 LogicalSectorSize {get;}                                                                                                   
Manufacturer                     Property       string Manufacturer {get;}                                                                                                        
Model                            Property       string Model {get;}                                                                                                               
ObjectId                         Property       string ObjectId {get;}                                                                                                            
OperationalDetails               Property       string[] OperationalDetails {get;}                                                                                                
OtherCannotPoolReasonDescription Property       string OtherCannotPoolReasonDescription {get;}                                                                                    
PartNumber                       Property       string PartNumber {get;}                                                                                                          
PassThroughClass                 Property       string PassThroughClass {get;}                                                                                                    
PassThroughIds                   Property       string PassThroughIds {get;}                                                                                                      
PassThroughNamespace             Property       string PassThroughNamespace {get;}                                                                                                
PassThroughServer                Property       string PassThroughServer {get;}                                                                                                   
PhysicalLocation                 Property       string PhysicalLocation {get;}                                                                                                    
PhysicalSectorSize               Property       uint64 PhysicalSectorSize {get;}                                                                                                  
PSComputerName                   Property       string PSComputerName {get;}                                                                                                      
SerialNumber                     Property       string SerialNumber {get;}                                                                                                        
Size                             Property       uint64 Size {get;}                                                                                                                
SlotNumber                       Property       uint16 SlotNumber {get;}                                                                                                          
SoftwareVersion                  Property       string SoftwareVersion {get;}                                                                                                     
StoragePoolUniqueId              Property       string StoragePoolUniqueId {get;}                                                                                                 
UniqueId                         Property       string UniqueId {get;}                                                                                                            
...
#>

De toute évidence, "Number" est une réécriture de DeviceId.

2voto

Burt_Harris Points 149

Malgré les apparences, les objets retournés par la cmdlet Get-PhysicalDisk n'ont pas de propriété "Number". Ce titre de colonne semble être placé sur une propriété connue sous le nom de DeviceID.

Cela a donc fonctionné :

PS C:\WINDOWS\system32> Get-PhysicalDisk | Sort-Object DeviceID

Number FriendlyName           SerialNumber MediaType   CanPool OperationalStatus HealthStatus Usage            Size
------ ------------           ------------ ---------   ------- ----------------- ------------ -----            ----
0      Crucial_CT500MX200SSD1 162112CAE0AE SSD         False   OK                Healthy      Auto-Select 465.76 GB
2      Seagate Expansion Desk NA4K7L4K     Unspecified False   OK                Healthy      Auto-Select   3.64 TB
3      Seagate Backup+  Desk  NA7E5JCS     Unspecified False   OK                Healthy      Auto-Select   2.73 TB

Il me semble qu'il s'agit d'un bogue ! Qu'en pensez-vous ?

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X