Wenn Powershell-Befehlstrennzeichen ist; (Semikolon), warum ist “Datum; dir ”dir dir zusätzliche Details ausgeben lassen?

11

Ich verstehe, dass Semikolon ein Befehlstrennzeichen in Powershell ist. echo "hello"; dirgibt diese Ausgabe.

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>

Aber warum gibt date; dirdiese Ausgabe?

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
quelle
Interessante Frage. Ich hoffe, es wird beantwortet, weil ich selbst keine Ahnung habe und mich mit Powershell auskenne.
LPChip
1
Ich denke, dieser BUG ist das Ergebnis der PowerShells- Funktion , die Ausgabe zu verschieben / zu verschieben, um nicht denselben Header für aufeinanderfolgende Befehle einzufügen, und scheint ziemlich lange zu existieren.
LotPings
@LotPings - Faszinierend ist, dass Get-ChildItem anscheinend keine Optionen hat, die die Ausgabe am> Datum generieren würden. Get-ChildItem Ergebnisse in.
Michael Teter
Einverstanden, ich bin auch neugierig, womit überhaupt ausgeführt wird date. Es ist weder ein Alias ​​noch eine Cmdlet- oder EXE-Datei (dasselbe Problem in PSv6 BTW)
LotPings

Antworten:

2

Da Powershell Anweisungen einzeln ausführt, wird meiner Meinung nach die Ausgabeformatierung der ersten Anweisung auf alle nachfolgenden Anweisungen angewendet.

Wenn Get-Dateein Objekt vom DateTimeTyp zurückgegeben wird, wird es als Liste formatiert, was sich auf Ihre 'dir'-Ausgabe auswirkt.

Sie können diese Annahme testen, indem Sie den Rückgabetyp von Get-Datein Zeichenfolge mit der Option 'Format' ändern :

date -Format yyyy-MM-dd ; dir

(Dies erzeugt eine Standardausgabe für 'dir')

Oder indem Sie die Standardformatierung der Ausgabe ändern, indem Sie sie wie folgt weiterleiten Format-Table:

 date | Format-Table ; dir
mikalai
quelle
0

Dies scheint nur zu geschehen, wenn Sie das Datum verwenden. "Fast alles andere danach", einschließlich anderer PS-Cmdlets (habe nur ein paar ausprobiert).

'Datum', wie eingegeben, scheint Windows-Kern (genau wie cmd.exe) aufzurufen, um diesen Datenstring zurückzubekommen. PowerShell versucht, etwas mit der angezeigten Zeichenfolge zu tun.

Wenn Sie dies umkehren, zeigt "irgendetwas hier", Datum, diese Seltsamkeit nicht. Es macht einfach das ...

 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
quelle