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>

興味深い質問です。私は自分自身がわからないので、それが答えられることを願っています。
LPChip 2018

1
また、vistax64.com
threads

1
このバグは、連続するコマンドに同じヘッダーを挿入しないように出力を延期/延期するPowerShells 機能の結果であり、かなり長い間存在しているように思われます。
LotPings 2018

@LotPings-興味深いのは、Get-ChildItemに、日付を超える出力を生成するオプションがないように見えることです。で結果ます。Get-ChildItem。
マイケルTeter

同意します、私はまた、何が何で実行されるのかにも興味がありdateます。エイリアスでも、コマンドレットでも.exeファイルでもない(PSv6 BTWで同じ問題)
LotPings 2018

回答:


2

powershellはステートメントを1つずつ実行するので、最初のステートメントの出力フォーマットを後続のすべてのステートメントに適用すると思います。

タイプGet-Dateのオブジェクトを返すのでDateTime、リストとしてフォーマットされ、「dir」出力に影響します。

Get-Date'format'オプションを使用して戻り値の型を文字列に変更することで、この仮定をテストできます。

date -Format yyyy-MM-dd ; dir

(これにより、「dir」のデフォルト出力が生成されます)

または、デフォルトの出力フォーマットをパイプライン化してFormat-Table次のように変更します。

 date | Format-Table ; dir

0

これは日付を使用した場合にのみ発生するようです。他のPSコマンドレットを含む「あとはほとんど何でも」(いくつか試しただけです)。

入力された 'date'は、(cmd.exeのように)コアWindowsを呼び出してその日付文字列を取得しているようです。PowerShellは、表示されたその文字列で何かを実行しようとしています。

これを逆にすると、 'anything here'; dateはこの奇妙さを示しません。これはちょうどこれを行います...

 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
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.