为什么在Powershell中添加引号会更改表达式的值?

问题描述

我才刚刚开始学习Powershell,有一件事我只是束手无策。见下文:

> Write-output $(Get-Date -displayHint Date)  
    //Expect: Tuesday,November 3,2020
    //Got: Tuesday,2020

> Write-output "$(Get-Date -displayHint Date)" 
    //Expect: Tuesday,2020
    //Got: 11/03/2020 20:42:27

对于带有引号内插的第二行,有人可以解释为什么它显示了不同的格式吗?

谢谢

解决方法

这是当前区域性中ToString()方法的默认格式。此输出是“将其转换为字符串”的结果。以下示例在转换为字符串时均会产生相似的输出。

写入主机(将输出转换为字符串)

Write-Host (Get-Date -DisplayHint Date)

11/3/2020 11:46:00 PM

ToString()

(Get-Date -DisplayHint Date).ToString()

11/3/2020 11:48:55 PM

-作为操作员

(Get-Date -DisplayHint Date) -as [string]

11/03/2020 23:49:37

字符串插值

"{0}" -f (Get-Date -DisplayHint Date)

11/3/2020 11:51:27 PM

当然,您已经发现使用引号将其转换为字符串。

如果您想控制其格式,可以使用以下几种方法。

(Get-Date).ToLongDateString()

Tuesday,November 3,2020

(Get-Date).ToString("dddd,MMMM d,yyyy")

Tuesday,2020

Get-Date -f "dddd,yyyy"

Tuesday,2020
,

将日期转换为字符串时,可以以自定义方式显示日期。 在上面的代码中,您用双引号引起来,powershell将其视为字符串。 (获取日期-DisplayHint日期).toString()也可能会给您相同的结果。