web-dev-qa-db-fra.com

Si Powershell command separator est; (point-virgule), pourquoi "date; dir" donne-t-il à la sortie des détails supplémentaires?

Je comprends que le point-virgule est un séparateur de commandes dans Powershell. echo "hello"; dir donne 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; dir donne-t-il ce résultat?

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>
10
Michael Teter

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

Comme Get-Date renvoie un objet de type DateTime, il est formaté en tant que liste, ce qui affecte votre sortie 'dir'.

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

date -Format yyyy-MM-dd ; dir

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

Ou en modifiant le format de sortie par défaut en le mettant en pipeline en Format-Table:

 date | Format-Table ; dir
2
mikalai

Cela semble se produire uniquement lorsque vous utilisez la date. "presque tout le reste après cela", y compris les autres applets de commande PS (juste essayé quelques-unes).

'date' comme tapé semble appeler Windows de base (tout comme cmd.exe) pour récupérer cette chaîne de données, PowerShell tente 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
0
postanote