Powershell komut ayırıcısı; (noktalı virgül), neden “tarih; dir ”dir çıktı ekstra bilgi yapmak?


11

Noktalı virgülün Powershell'de bir komut ayırıcı olduğunu anlıyorum. echo "hello"; dirbu çıktıyı verir.

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>

Peki date; dirbu çıktıyı neden veriyor?

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>

İlginç soru. Umarım cevaplanır, çünkü kendim hakkında hiçbir fikrim yok ve powershell'de yolumu biliyorum.
LPChip


1
Bunu düşünmek BUG PowerShells sonucudur özelliği için / erteleme çıkışını ertelemek değil ardışık komutlar için aynı başlığa eklemek ve oldukça uzun bir süre için var gibi görünüyor.
LotPings

@LotPings - Büyüleyici olan şey Get-ChildItem'in çıktı üreten herhangi bir seçeneğe sahip olmadığıdır; Get-ChildItem sonuçları
Michael Teter

Aynı zamanda, neyin idam edildiğini de merak ediyorum date. Bu bir takma ad veya cmdlet veya .exe dosyası değil (PSv6 BTW'de aynı sorun)
LotPings 14:30 '

Yanıtlar:


2

Powershell ifadeleri tek tek yürütürken, bence ilk ifadenin çıktı biçimlendirmesini sonraki tüm ifadelere uygular.

Gibi Get-Dategetirileri bir nesne DateTimetürü, bu 'dir' çıktı etkileyen listesi biçimindeki alır.

Get-Date'Format' seçeneğini kullanarak dönüş türünü dizeye değiştirerek bu varsayımı test edebilirsiniz :

date -Format yyyy-MM-dd ; dir

(bu 'dir' için varsayılan çıktı üretir)

Veya varsayılan çıktı biçimlendirmesini şu şekilde sıralayarak değiştirin Format-Table:

 date | Format-Table ; dir

0

Bu yalnızca tarih kullandığınızda gerçekleşir; diğer PS cmdlet'leri içeren 'hemen hemen her şey' (sadece birkaçını denedim).

Yazıldığı gibi 'tarih', bu datestring'i geri almak için çekirdek Windows'u (cmd.exe gibi) çağırıyor gibi görünüyor, PowerShell göründüğü dize ile bir şeyler yapmaya çalışıyor.

Bunu tersine çevirirseniz, 'burada bir şey'; tarih, bu tuhaflığı göstermez. Sadece bunu yapar ...

 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
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.