Jika pemisah perintah Powershell adalah; (titik koma), mengapa "tanggal; dir ”membuat dir output tambahan detail?

11

Saya mengerti bahwa titik koma adalah pemisah perintah di Powershell. echo "hello"; dirmemberikan hasil ini.

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>

Tetapi mengapa date; dirmemberikan hasil ini?

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
sumber
Pertanyaan menarik. Saya harap itu dijawab, karena saya sendiri tidak tahu, dan saya tahu jalan saya sekitar PowerShell.
LPChip
1
Saya pikir BUG ini adalah hasil dari fitur PowerShells untuk menunda / menunda output untuk tidak memasukkan header yang sama untuk perintah yang berurutan dan sepertinya ada untuk waktu yang cukup lama.
Lotings
@LotPings - yang menarik adalah bahwa Get-ChildItem tampaknya tidak memiliki opsi apa pun yang akan menghasilkan keluaran yang> tanggal; Get-ChildItem menghasilkan.
Michael Teter
Setuju, saya juga ingin tahu apa yang dieksekusi datesama sekali. Ini bukan alias atau file cmdlet atau .exe (masalah yang sama di PSv6 BTW)
LotPings

Jawaban:

2

Ketika powershell mengeksekusi pernyataan satu per satu, saya pikir, itu menerapkan format output dari pernyataan pertama untuk semua pernyataan berikutnya.

Saat Get-Datemengembalikan objek DateTimebertipe, objek itu diformat sebagai daftar, memengaruhi keluaran 'dir' Anda.

Anda dapat menguji asumsi ini dengan mengubah tipe kembali Get-Dateke string menggunakan opsi 'format':

date -Format yyyy-MM-dd ; dir

(ini akan menghasilkan output default untuk 'dir')

Atau dengan mengubah format output default dengan mem-pipel-kannya ke Format-Table:

 date | Format-Table ; dir
mikalai
sumber
0

Ini sepertinya hanya terjadi ketika Anda menggunakan tanggal; 'Hampir apa pun setelah' itu termasuk cmdlet PS lainnya (hanya mencoba beberapa).

'date' seperti yang diketik tampaknya memanggil core Windows (seperti cmd.exe) untuk mendapatkan datestring itu kembali, PowerShell sedang mencoba melakukan sesuatu dengan string yang muncul.

Jika Anda membalikkan ini, 'apa pun di sini'; tanggal, tidak menunjukkan keanehan ini. Itu hanya melakukan ini ...

 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
sumber