如何修改PowerShell中Get-Date cmdlet的默认返回值
如何让Get-Date默认返回年份属性?
Get-Date默认输出的是DateTime类型对象,控制台显示的“26 July 2023 12:54:21”是该类型的默认格式化字符串。要让Get-Date直接返回.Year属性值,而不是原DateTime对象,可行的方案是自定义包装函数覆盖原命令:
实现方式
创建一个同名函数Get-Date,内部调用原生命令并返回年份属性:
function Get-Date { [CmdletBinding()] param( # 保留原Get-Date的所有参数,确保功能完整 [Parameter(ParameterSetName='Date')] [datetime]$Date, [Parameter(ParameterSetName='Date')] [switch]$Year, [Parameter(ParameterSetName='Date')] [switch]$Month, [Parameter(ParameterSetName='Date')] [switch]$Day, [Parameter(ParameterSetName='Date')] [switch]$Hour, [Parameter(ParameterSetName='Date')] [switch]$Minute, [Parameter(ParameterSetName='Date')] [switch]$Second, [Parameter(ParameterSetName='Date')] [switch]$Millisecond, [Parameter(ParameterSetName='UFormat')] [string]$UFormat, [Parameter(ParameterSetName='Format')] [string]$Format, [Parameter()] [switch]$DisplayHint, [Parameter()] [System.TimeZoneInfo]$TimeZone, [Parameter()] [switch]$Utc ) # 调用原生Get-Date命令,传递所有参数避免功能缺失 $originalDate = Microsoft.PowerShell.Utility\Get-Date @PSBoundParameters # 返回年份属性 $originalDate.Year }
说明
- 用限定名
Microsoft.PowerShell.Utility\Get-Date调用原生命令,避免函数递归调用自身。 - 保留原命令的所有参数,确保你依然能使用Get-Date的其他功能(比如指定日期、时区等),最终返回的都是对应日期的年份。
- 这种方式直接改变了命令的返回值类型(从
DateTime变为Int32),无需额外写(Get-Date).Year即可直接获取年份。
为什么Update-TypeData不行?
Update-TypeData仅修改对象的格式化规则,也就是对象在控制台默认展示或通过Format-List/Table/Wide输出时的显示样式,但不会改变命令返回的对象本身。原生Get-Date始终返回DateTime对象,所以Update-TypeData无法让它直接返回年份值。
内容的提问来源于stack exchange,提问作者ZEE
相关产品推荐
相关产品推荐

