Powershell脚本获取计划任务列表
Powershell scrip get list of scheduled tasks
我有这个脚本(见下文)并且我想要:
- 在“PSComputerName”列的输出文件中包含服务器名称
- 两个文件,一个是禁用的任务,一个是启用的任务
$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
我有这个脚本(见下文)并且我想要:
- 在“PSComputerName”列的输出文件中包含服务器名称
- 两个文件,一个是禁用的任务,一个是启用的任务
$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