可以将Powershell中的计算属性重构为函数吗?

时间:2014-03-03 22:01:11

标签: powershell powershell-v2.0

例如,我有几个日期属性,我想从一个文件夹中检索。我想以特定格式格式化它们。我已经找到了一种方法,可以使用calculated property内的Get-Date来完成此操作。

PS B:\abrabackups> Get-ItemProperty -Path .\AbraSuite01.03.2014 | select Name,@{Name="CreationTime";Expression={($_.CreationTime | Get-Date -format 'ddd MMM dd yyyy HH:mm:ss') + ' GMT-000' }} | ConvertTo-JSON

但是,如果我对剩余的日期属性执行此操作,则必须多次复制并粘贴计算属性的表达式:

@{Name=$some_date_attr;Expression={($_.$some_date_attr | Get-Date -format 'ddd MMM dd yyyy HH:mm:ss') + ' GMT-000' }}

如果格式有任何变化,我必须多次更改它有日期属性。有没有办法将它重构为一个函数,我可以传递一个日期属性,让函数以请求的格式返回它?

2 个答案:

答案 0 :(得分:4)

这是基本编程。您所要做的就是使用输入创建一个函数并让它返回一个值。我将假设日期值的数据类型为DateTime或可转换为一个。

function MyDateFormat([DateTime]$date) {
    return (Get-Date $date -format 'ddd MMM dd yyyy HH:mm:ss') + ' GMT-000'
}

(当然,请选择一个更好的名字。这只是一个例子。)然后调用你的函数:

@{Name=$some_date_attr;Expression=(MyDateFormat $_.some_date_attr)}

如果你真的想要它在GMT,你可能想确保它实际上使用UTC time

答案 1 :(得分:1)

Function Format-Date{
    Param([DateTime]$InputDate)
    (Get-Date $InputDate -format 'ddd MMM dd yyyy HH:mm:ss') + ' GMT-000'
}

然后只是在那个日期对象或日期格式的字符串(“1/13/14”或“2/14/14 21:12:47”)抛出一个日期对象,然后它会回吐你想要的格式。您可以将该函数命名为更短,以便于粗略使用。