所以,我有一个特定的情况,我试图从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。
答案 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