Если разделитель команд Powershell есть; (точка с запятой), почему «дата; dir »сделать вывод dir дополнительных деталей?


11

Я понимаю, что точка с запятой - это разделитель команд в Powershell. echo "hello"; dirдает этот вывод.

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>

Но почему date; dirдает этот вывод?

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>

Интересный вопрос. Я надеюсь, что на него получат ответ, потому что я сам не знаю, и знаю свой путь к PowerShell.
LPChip


1
Я думаю , что это BUG является результатом PowerShells предлагается отложить выход / отложить до не вставить тот же заголовок для последовательных команд и , кажется, существует в течение довольно длительного времени.
LotPings

@LotPings - то, что является захватывающим, - то, что у Get-ChildItem, кажется, нет никаких опций, которые генерировали бы выходные данные> дата; Результаты Get-ChildItem в.
Майкл Тетер

Согласился, мне тоже любопытно, с чем вообще выполняется date. Это не псевдоним, ни командлет или .exe-файл (та же проблема в PSv6 BTW)
LotPings

Ответы:


2

Я думаю, что PowerShell выполняет операторы один за другим, и ко всем последующим инструкциям применяется форматирование первого оператора.

As Get-Dateвозвращает объект DateTimeтипа, он форматируется как список, влияя на ваш вывод 'dir'.

Вы можете проверить это предположение, изменив тип возвращаемого значения Get-Dateна строку, используя опцию 'format':

date -Format yyyy-MM-dd ; dir

(это выдаст вывод по умолчанию для 'dir')

Или изменив форматирование вывода по умолчанию, передав его по конвейеру Format-Table:

 date | Format-Table ; dir

0

Кажется, это происходит только при использовании даты; «почти все остальное после», включая другие командлеты PS (только что попробовал несколько).

Кажется, что введенный «date» вызывает ядро ​​Windows (точно так же, как cmd.exe), чтобы вернуть эту строку даты, PowerShell пытается что-то сделать с этой строкой, которая появляется.

Если вы перевернете это, «что-нибудь здесь», дата не демонстрирует эту странность. Это просто делает это ...

 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
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.