在Powershell中,从FormatTable中选择数据以将其作为字符串进行操作的正确方法是什么?

时间:2015-03-18 19:03:20

标签: powershell

所以,我有一个特定的情况,我试图从Windows任务计划中获取所有已启用任务的列表并将其转储到该文件。到目前为止我已经走了多远:

schtasks /QUERY /FO CSV | ConvertFrom-Csv | where { $_."Next Run Time" -ne "Disabled" } | ft -HideTableHeaders TaskName

这将给我一个任务列表,但它们都以' \'开头,因此我希望在将结果捕获到文件之前对每个值执行SubString(1) 。但是,我似乎无法弄清楚如何去做。

如果我尝试这样的话:

select "$_".SubString(1)

我得到类似的东西:

icrosoft.PowerShell.Commands.Internal.Format.FormatEntryData

其中,是类名的SubString,但我无法弄清楚如何获取对象值的SubString。

2 个答案:

答案 0 :(得分:1)

这样的事情也适用于你的情况

(schtasks /QUERY /FO CSV | ConvertFrom-Csv | where { $_."Next Run Time" -ne "Disabled" -and $_.TaskName -ne "taskname" } | Select -ExpandProperty Taskname) -replace "^\\"

必须一遍又一遍地添加$_.TaskName -ne "taskname"作为输出包含的标题。删除它们很容易。使用select提取任务名称,然后只需替换前导斜杠。 -replace适用于数组,因此我们将结果从schtasks

中包含起来

如果你可以避免它,通常很容易,从不尝试和操纵来自Format-*的数据。它们的主要功能是仅在屏幕上显示数据。

格式cmdlet返回Microsoft.PowerShell.Commands.Internal.Format.FormatEntryData个对象,而不是字符串,这是您遇到的。如果您喜欢布局,可以通过管道到Out-String来绕过它。那将是唯一的原因。

每当您尝试处理来自Format-Anything的原始数据时,我都会在内部哭泣。

关于schtask

我已经考虑了有关where子句的输出的一个异常,但输出可能存在其他问题。请阅读Bill_Stewart关于如何:Use PowerShell to Report on Scheduled Tasks

的博客文章

答案 1 :(得分:0)

如果您使用的是Win8 / Server 2012或更高版本,请使用:

Get-ScheduledTask | where-object{$_.state -ne "disabled"} | select-object TaskName