Se o separador de comandos do Powershell for; (ponto e vírgula), por que “data; dir ”torna os detalhes adicionais da saída dir?

11

Entendo que ponto e vírgula é um separador de comandos no Powershell. echo "hello"; dirdá essa saída.

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>

Mas por que date; dirdar essa saída?

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
fonte
Pergunta interessante. Espero que seja respondido, porque não tenho idéia de mim mesmo e sei o que fazer em torno do PowerShell.
LPChip
1
Eu acho que esse erro é o resultado do recurso PowerShells para adiar / adiar a saída para não inserir o mesmo cabeçalho para comandos sucessivos e parece existir por um longo tempo.
LotPings
@ LotPings - o que é fascinante é que Get-ChildItem não parece ter nenhuma opção que gere a saída nessa data; Get-ChildItem resulta em.
Michael Teter
Concordo, também estou curioso sobre o que é executado date. Não é um alias, nem um cmdlet ou .exe (mesmo problema no PSv6 BTW)
LotPings

Respostas:

2

Como o PowerShell executa as instruções uma a uma, eu acho, aplica a formatação de saída da primeira instrução a todas as instruções subseqüentes.

Como Get-Dateretorna um objeto do DateTimetipo, ele é formatado como lista, afetando a saída 'dir'.

Você pode testar essa suposição alterando o tipo de retorno de Get-Datepara string usando a opção 'format':

date -Format yyyy-MM-dd ; dir

(isso produzirá a saída padrão para 'dir')

Ou alterando a formatação de saída padrão, canalizando-a para Format-Table:

 date | Format-Table ; dir
Mikalai
fonte
0

Isso parece ocorrer apenas quando você usa a data; 'quase qualquer outra coisa depois', inclusive outros cmdlets PS (tentei alguns).

'date', conforme digitado, parece estar chamando o Windows principal (assim como o cmd.exe) para recuperar essa cadeia de dados, o PowerShell está tentando fazer algo com a string que aparece.

Se você reverter isso, 'qualquer coisa aqui'; a data não exibirá essa singularidade. Apenas faz isso ...

 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
fonte