Jeśli separatorem poleceń PowerShell jest; (średnik), dlaczego „data; dir ”zrobić dodatkowe szczegóły w reż.

10

Rozumiem, że średnik jest separatorem poleceń w PowerShell. echo "hello"; dirdaje ten wynik.

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>

Ale dlaczego date; dirdaje to wyjście?

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
źródło
Interesujące pytanie. Mam nadzieję, że odpowiedź zostanie udzielona, ​​ponieważ sam nie mam pojęcia i znam swoją drogę do rozwiązania PowerShell.
LPChip
1
Myślę, że ten BŁĄD jest wynikiem funkcji PowerShells, która odkłada / odkłada wyjście, aby nie wstawiać tego samego nagłówka dla kolejnych poleceń i wydaje się istnieć od dłuższego czasu.
LotPings,
@LotPings - fascynujące jest to, że Get-ChildItem nie wydaje się mieć żadnych opcji, które wygenerowałyby dane wyjściowe tego> dnia; Wyniki Get-ChildItem w.
Michael Teter
Zgadzam się, jestem też ciekawy, co datew ogóle jest wykonywane . To nie jest alias ani plik cmdlet lub .exe (ten sam problem w PSv6 BTW)
LotPings

Odpowiedzi:

2

Ponieważ PowerShell wykonuje instrukcje jeden po drugim, myślę, że stosuje formatowanie wyjściowe pierwszej instrukcji do wszystkich kolejnych instrukcji.

Gdy Get-Datezwraca obiekt DateTimetypu, zostaje sformatowany jako lista, co wpływa na dane wyjściowe „dir”.

Możesz przetestować to założenie, zmieniając typ zwracanego Get-Dateciągu na ciąg za pomocą opcji „format”:

date -Format yyyy-MM-dd ; dir

(spowoduje to utworzenie domyślnego wyjścia dla „dir”)

Lub zmieniając domyślne formatowanie wyjściowe przez potokowanie go do Format-Table:

 date | Format-Table ; dir
mikalai
źródło
0

Wydaje się, że dzieje się to tylko wtedy, gdy używasz daty; „prawie wszystko inne po”, w tym inne polecenia cmdlet PS (po prostu wypróbowałem kilka).

„data”, jak się wydaje, wywołuje rdzeń Windows (podobnie jak cmd.exe), aby odzyskać to przesyłanie danych, PowerShell próbuje zrobić coś z tym wyświetlanym ciągiem.

Jeśli to odwrócisz, „cokolwiek tutaj”; data, nie wykazuje tej osobliwości. Po prostu robi to ...

 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
źródło