Si el separador de comando Powershell es; (punto y coma), ¿por qué "fecha"; dir "hacer detalles adicionales de salida de dir?

11

Entiendo que el punto y coma es un separador de comandos en Powershell. echo "hello"; dirda esta salida.

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>

Pero, ¿por qué date; dirda esta salida?

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
fuente
Interesante pregunta. Espero que se responda, porque no tengo idea de mí mismo, y sé cómo manejar PowerShell.
LPChip
1
Creo que este ERROR es el resultado de la función PowerShells para posponer / diferir la salida para que no inserte el mismo encabezado para los comandos sucesivos y parece existir durante mucho tiempo.
LotPings
@LotPings: lo fascinante es que Get-ChildItem no parece tener ninguna opción que genere la salida que> fecha; Resultados de Get-ChildItem.
Michael Teter
De acuerdo, también tengo curiosidad por saber con qué se ejecuta date. No es un alias ni un cmdlet o un archivo .exe (mismo problema en PSv6 BTW)
LotPings

Respuestas:

2

A medida que powershell ejecuta las declaraciones una por una, creo que aplica el formato de salida de la primera declaración a todas las declaraciones posteriores.

A medida que Get-Datedevuelve un objeto de DateTimetipo, se formatea como una lista, lo que afecta su salida 'dir'.

Puede probar esta suposición cambiando el tipo de retorno de Get-Datea cadena usando la opción 'formato':

date -Format yyyy-MM-dd ; dir

(esto producirá una salida predeterminada para 'dir')

O cambiando el formato de salida predeterminado canalizándolo a Format-Table:

 date | Format-Table ; dir
mikalai
fuente
0

Esto parece ocurrir solo cuando usa fecha; 'casi cualquier otra cosa después' que incluye otros cmdlets de PS (solo probé algunos).

'date' como se escribe parece estar llamando a Windows central (al igual que cmd.exe) para recuperar esa fecha, PowerShell está tratando de hacer algo con esa cadena que parece.

Si invierte esto, 'cualquier cosa aquí'; fecha, no exhibe esta rareza. Simplemente hace esto ...

 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
fuente