我知道分号是 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>
答案1
PowerShell 自动添加
Out-Default
到每条管道的末端…
当然,分号本身不足以识别这种状态:
Get-Alias -Name gal; Get-Location
CommandType Name Version Source ----------- ---- ------- ------ Alias gal -> Get-Alias Drive : D Provider : Microsoft.PowerShell.Core\FileSystem ProviderPath : D:\PShell Path : D:\PShell
添加Out-Default
到管道明确解决了该问题:
Get-Alias -Name gal | Out-Default; Get-Location
CommandType Name Version Source ----------- ---- ------- ------ Alias gal -> Get-Alias Path ---- D:\PShell
答案2
由于 powershell 逐个执行语句,我认为它将第一个语句的输出格式应用于所有后续语句。
Get-Date
返回类型为的对象时DateTime
,它会被格式化为列表,从而影响您的“dir”输出。
您可以通过使用“格式”选项将返回类型更改Get-Date
为字符串来测试这一假设:
date -Format yyyy-MM-dd ; dir
(这将产生‘dir’的默认输出)
或者通过管道方式更改默认输出格式Format-Table
:
date | Format-Table ; dir
答案3
这似乎仅当您使用日期时才会发生;“之后的几乎任何其他内容”包括其他 PS cmdlet(刚尝试了几个)。
输入的“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