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>

2 ответа2

2

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

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

Вы можете проверить это предположение, изменив тип возвращаемого значения Get-Date на string, используя опцию '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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .