Rozumiem, że średnik jest separatorem poleceń w PowerShell. echo "hello"; dir
daje 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; dir
daje 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>
command-line
powershell
Michael Teter
źródło
źródło
date
w ogóle jest wykonywane . To nie jest alias ani plik cmdlet lub .exe (ten sam problem w PSv6 BTW)Odpowiedzi:
Ponieważ PowerShell wykonuje instrukcje jeden po drugim, myślę, że stosuje formatowanie wyjściowe pierwszej instrukcji do wszystkich kolejnych instrukcji.
Gdy
Get-Date
zwraca obiektDateTime
typu, zostaje sformatowany jako lista, co wpływa na dane wyjściowe „dir”.Możesz przetestować to założenie, zmieniając typ zwracanego
Get-Date
ciągu na ciąg za pomocą opcji „format”:(spowoduje to utworzenie domyślnego wyjścia dla „dir”)
Lub zmieniając domyślne formatowanie wyjściowe przez potokowanie go do
Format-Table
:źródło
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 ...
źródło