Se il comando di separazione Powershell è; (punto e virgola), perché "data; dir ”rendere dir output ulteriori dettagli?


11

Capisco che il punto e virgola è un separatore di comandi in Powershell. echo "hello"; dirdà questo risultato.

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>

Ma perché date; dirdà questo risultato?

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>

Domanda interessante. Spero che riceva risposta, perché non ho idea di me stesso, e conosco il mio modo di aggirare PowerShell.
LPChip


1
Penso che questo BUG sia il risultato della funzione PowerShells per posticipare / posticipare l'output per non inserire la stessa intestazione per i comandi successivi e sembra esistere per un tempo piuttosto lungo.
LotPings,

@LotPings - la cosa affascinante è che Get-ChildItem non sembra avere alcuna opzione che generi l'output che> data; Risultati Get-ChildItem in.
Michael Teter,

D'accordo, sono anche curioso di sapere cosa viene eseguito date. Non è un alias né un file cmdlet o .exe (stesso problema in PSv6 BTW)
LotPings

Risposte:


2

Poiché PowerShell esegue le istruzioni una per una, penso, applica la formattazione dell'output della prima istruzione a tutte le istruzioni successive.

Quando Get-Daterestituisce un oggetto di DateTimetipo, viene formattato come elenco, influenzando l'output 'dir'.

È possibile verificare questo presupposto modificando il tipo restituito Get-Datein stringa utilizzando l'opzione 'formato':

date -Format yyyy-MM-dd ; dir

(questo produrrà un output predefinito per 'dir')

O modificando la formattazione di output predefinita effettuando il pipelining in Format-Table:

 date | Format-Table ; dir

0

Questo sembra accadere solo quando usi la data; "quasi qualsiasi altra cosa dopo" che includa altri cmdlet PS (ne ho provati solo alcuni).

'date' come digitato sembra chiamare Windows core (proprio come cmd.exe) per recuperare quel datestring, PowerShell sta cercando di fare qualcosa con quella stringa che appare.

Se si inverte questo, "qualsiasi cosa qui"; data, non mostra questa stranezza. Fa solo questo ...

 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
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.