2017-04-21 38 views
1

我有这样的PowerShell的代码,获取不为0的错误代码,并有“准备”的状态的预定任务:PowerShell的计划任务报告 - 从数字的变化状态字

Get-ScheduledTask | Select-Object @{Name="Task Name";Expression={$_.Path}}, LastRunTime, NextRunTime, LastTaskResult, State | Where-Object {($_.LastTaskResult -NE '0') -AND ($_.State -LIKE '3') } 

下面是一个输出例如:

Task Name  : \UserScheduleTaskNet4 
LastRunTime : 21/04/2017 15:25:00 
NextRunTime : 21/04/2017 15:30:00 
LastTaskResult : 267009 
State   : 4 

我想状态,以作为字而非数字输出 - 在这种情况下,状态“4”将作为“正在运行”输出。

我有这个代码片段,但我不知道如何实现它变成我的Select-Object的cmdlet:

New-Object -TypeName PSCustomObject -Property @{ 
        'Name' = $_.name 
        'Path' = $_.path 
        'State' = switch ($_.State) { 
         0 {'Unknown'} 
         1 {'Disabled'} 
         2 {'Queued'} 
         3 {'Ready'} 
         4 {'Running'} 
        Default {'Unknown'} 
        } 

回答

2
[email protected]('Unknown','Disabled','Queued','Ready','Running') 
Get-ScheduledTask | 
    Where-Object {($_.LastTaskResult -NE '0') -AND ($_.State -LIKE '3') } | 
    Select-Object @{Name="Task Name";Expression={$_.Path}}, LastRunTime, NextRunTime, LastTaskResult, @{name='State';expression={$states[$_.state]}} 

您可以作为枚举指定国家或键值对的对象,然后从提供的领域得到它的领域。被警告,如果你遇到一个意想不到的state,列将有一个空值而不是原始状态值。在你的情况,$states可以是一个简单的基于0阵列,因为你的枚举不是空心的,并从0

+0

谢谢开始 - 我能不能先确认一下......我看你已经把'在那里,object'在'选择-object' cmdlet的前cmdlet的是,仅仅更好的做法还是会做出我的结果有区别吗? – Ricky

+1

没有区别主要是,但是如果你的地方选择之后,你不能按属性过滤你没有选择。另外最好先过滤,然后选择,格式等。 – Vesper