Powershell脚本获取计划任务列表

Powershell scrip get list of scheduled tasks

我有这个脚本(见下文)并且我想要:

  1. 在“PSComputerName”列的输出文件中包含服务器名称
  2. 两个文件,一个是禁用的任务,一个是启用的任务
$ComputerName = Invoke-Expression -Command 'hostname'
$FilePathEnabled = "c\temp" + $ComputerName + "-EnabledTasksResult.csv"
$FilePathDisabled = "c\temp" + $ComputerName + "-DisabledTasksResult.csv"

(Get-ScheduledTask).where{!($_.TaskPath -like "\Microsoft\*") -and !($_.Status -eq "Disabled")} | Get-ScheduledTaskInfo | 
Export-Csv -NoTypeInformation -Path $FilePathEnabled 

(Get-ScheduledTask).where{!($_.TaskPath -like "\Microsoft\*") -and !($_.Status -ne "Disabled")} | Get-ScheduledTaskInfo | 
Export-Csv -NoTypeInformation -Path $FilePathDisabled 

谁能帮帮我? 谢谢

为了在输出中包含计算机名称,您可以使用 select-object 创建自定义对象并添加 属性,如下所示:


Get-ScheduledTaskInfo | Select-Object *,@{Name = 'PSComputerName'; Expression = {$ComputerName}}

所以你的代码应该是这样的

$ComputerName = Invoke-Expression -Command 'hostname'
$FilePathEnabled = "c:\temp\" + $ComputerName + "-EnabledTasksResult.csv"
$FilePathDisabled = "c:\temp\" + $ComputerName + "-DisabledTasksResult.csv"

(Get-ScheduledTask).where{!($_.TaskPath -like "\Microsoft\*") -and !($_.Status -eq "Disabled")} | Get-ScheduledTaskInfo | Select-Object *,@{Name = 'PSComputerName'; Expression = {$ComputerName}}
Export-Csv -NoTypeInformation -Path $FilePathEnabled 

(Get-ScheduledTask).where{!($_.TaskPath -like "\Microsoft\*") -and !($_.Status -ne "Disabled")} | Get-ScheduledTaskInfo | | Select-Object *,@{Name = 'PSComputerName'; Expression = {$ComputerName}}
Export-Csv -NoTypeInformation -Path $FilePathDisabled 

先对您的代码做一些说明:

  • 创建文件路径,最好使用Join-Path组合元素或.Net方法[IO.Path]::Combine()
  • 你忘了在盘符后面加一个冒号 "c\temp"
  • 在变量中获取计算机名的最简单方法是使用环境:$env:COMPUTERNAME 而不是 Invoke-Expression -Command 'hostname'
  • Status 应该是 State(至少在我的 Win10 机器上..)

接下来,我将首先收集所有任务,无论是否启用,然后从该集合中筛选出启用和禁用的任务。这使您免于 运行 Get-ScheduledTask cmdlet 两次。

$ComputerName     = $env:COMPUTERNAME
$FilePathEnabled  = Join-Path -Path 'c:\temp ' -ChildPath "$ComputerName-EnabledTasksResult.csv"
$FilePathDisabled = Join-Path -Path 'c:\temp ' -ChildPath "$ComputerName-DisabledTasksResult.csv"

$allTasks = (Get-ScheduledTask).Where{$_.TaskPath -notlike "\Microsoft\*"}
# filter and export the Enabled tasks
$allTasks.Where{$_.State -ne 'Disabled'} | Get-ScheduledTaskInfo | 
    Select-Object *, @{Name = 'PSComputerName'; Expression = {$ComputerName}} -ExcludeProperty PSComputerName |
    Export-Csv -Path $FilePathEnabled  -NoTypeInformation

# filter and export the Disabled tasks
$allTasks.Where{$_.State -eq 'Disabled'} | Get-ScheduledTaskInfo |
    Select-Object *, @{Name = 'PSComputerName'; Expression = {$ComputerName}} -ExcludeProperty PSComputerName |
    Export-Csv -Path $FilePathDisabled  -NoTypeInformation