Якщо роздільник команд Powershell є; (крапка з комою), чому "дата; dir "зробити dir вихід додаткових деталей?


10

Я розумію, що крапка з комою є роздільником команд у 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>

Цікаве запитання. Я сподіваюся, що він отримає відповідь, тому що я сам не маю уявлення, і я знаю, як обійтись із можливостей.
LPChip


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

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

Домовились, мені також цікаво, що взагалі виконується date. Це не псевдонім, ні файл cmdlet чи .exe (та сама проблема у PSv6 BTW)
LotPings

Відповіді:


2

Оскільки посібник повноважень виконує операції один за одним, я думаю, що він застосовує форматування виводу першого оператора до всіх наступних операторів.

Як Get-Dateповертає об'єкт DateTimeтипу, він отримує в форматі списку, впливаючи на «реж» висновок.

Ви можете перевірити це припущення, змінивши тип повернення 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.