Si le séparateur de commandes Powershell est; (point-virgule), pourquoi «date; dir ”rendre la sortie dir des détails supplémentaires?

11

Je comprends que le point-virgule est un séparateur de commandes dans Powershell. echo "hello"; dirdonne cette sortie.

PS C:\> echo "hello"; dir
hello

Directory: C:\

Mode         LastWriteTime     Length Name
----         -------------     ------ ----
d-----       2018-04-29 13:02         BCD_Backup
d-----       2018-12-02 14:08         Dell
<snip>

Mais pourquoi date; dirdonne cette sortie?

PS C:\> date; dir

Friday, December 14, 2018 11:14:23

PSPath            : Microsoft.PowerShell.Core\FileSystem::C:\BCD_Backup
PSParentPath      : Microsoft.PowerShell.Core\FileSystem::C:\
PSChildName       : BCD_Backup
PSDrive           : C
PSProvider        : Microsoft.PowerShell.Core\FileSystem
PSIsContainer     : True
Name              : BCD_Backup
FullName          : C:\BCD_Backup
Parent            :
Exists            : True
Root              : C:\
Extension         :
CreationTime      : 2018-04-29 13:02:31
CreationTimeUtc   : 2018-04-29 11:02:31
LastAccessTime    : 2018-04-29 13:02:31
LastAccessTimeUtc : 2018-04-29 11:02:31
LastWriteTime     : 2018-04-29 13:02:31
LastWriteTimeUtc  : 2018-04-29 11:02:31
Attributes        : Directory
Mode              : d-----
BaseName          : BCD_Backup
Target            : {}
LinkType          :


PSPath            : Microsoft.PowerShell.Core\FileSystem::C:\Dell
PSParentPath      : Microsoft.PowerShell.Core\FileSystem::C:\
<snip>
Michael Teter
la source
Question interessante. J'espère qu'on y répondra, car je n'en ai aucune idée moi-même, et je connais bien mon PowerShell.
LPChip
1
Je pense que ce BUG est le résultat de la fonctionnalité PowerShells de reporter / différer la sortie pour ne pas insérer le même en-tête pour les commandes successives et semble exister depuis assez longtemps.
LotPings
@LotPings - ce qui est fascinant, c'est que Get-ChildItem ne semble pas avoir d'options qui généreraient la sortie qui> date; Get-ChildItem résulte en.
Michael Teter
D'accord, je suis également curieux de savoir ce qui est exécuté date. Ce n'est pas un alias ni une cmdlet ou un fichier .exe (même problème dans PSv6 BTW)
LotPings

Réponses:

2

Comme PowerShell exécute les instructions une par une, je pense, qu'il applique le formatage de sortie de la première instruction à toutes les instructions suivantes.

Comme Get-Daterenvoie un objet de DateTimetype, il est formaté en liste, affectant votre sortie 'dir'.

Vous pouvez tester cette hypothèse en changeant le type de retour de Get-Dateen chaîne en utilisant l'option 'format':

date -Format yyyy-MM-dd ; dir

(cela produira une sortie par défaut pour 'dir')

Ou en modifiant le formatage de sortie par défaut en le redirigeant vers Format-Table:

 date | Format-Table ; dir
mikalai
la source
0

Cela semble se produire uniquement lorsque vous utilisez la date; `` presque tout le reste après '', y compris d'autres applets de commande PS (j'en ai essayé quelques-unes).

'date' telle que tapée semble appeler le noyau de Windows (tout comme cmd.exe) pour récupérer cette chaîne de données, PowerShell essaie de faire quelque chose avec cette chaîne qui apparaît.

Si vous inversez cela, `` n'importe quoi ici ''; la date, ne présente pas cette bizarrerie. Il fait juste ça ...

 dir;date


    Directory: D:\Scripts


Mode                LastWriteTime         Length Name
----                -------------         ------ ----
d-----         9/1/2018   2:12 PM                .vscode
d-----         7/3/2018   4:44 PM                CheckURI

....


DisplayHint : DateTime
Date        : 12/14/2018 12:00:00 AM
Day         : 14
DayOfWeek   : Friday
DayOfYear   : 348
Hour        : 14
Kind        : Local
Millisecond : 516
Minute      : 42
Month       : 12
Second      : 22
Ticks       : 636803953425164049
TimeOfDay   : 14:42:22.5164049
Year        : 2018
DateTime    : Friday, December 14, 2018 2:42:22 PM
postanote
la source