在一个脚本中使用powershell编辑两个计划任务

时间:2015-03-28 21:37:19

标签: powershell

我在powershell中使用这两个命令来编辑两个计划任务

schtasks.exe /tn Task1 /sd 2015-01-01  /ed 2015-02-02 /rp mypassword
schtasks.exe /tn Task2 /sd 2015-04-04  /ed 2015-05-05 /rp mypassword

我想知道我是否可以使用一行命令来编辑这两个任务。 谢谢你的帮助。

2 个答案:

答案 0 :(得分:1)

当需要更改多条信息时,将此设置为单线程更加困难。让我们尝试将一组哈希表传递给Invoke-Expression

@(  @{Name = "Task1";StartDate = "2015-01-01";EndDate = "2015-02-02"},
    @{Name = "Task2";StartDate = "2015-04-04";EndDate = "2015-05-05"}
) | ForEach-Object{
    Invoke-Expression ("schtasks.exe /tn {0} /sd {1}  /ed {2} /rp mypassword" -f $_.Name, $_.StartDate, $_.EndDate)
}

如果您的CSV文件包含NameStartDateEndDate列,那么您可以将其直接传输到我们所在的ForEach。那就是你不需要在代码中静态声明数组。

大多数PowerShell代码都可以写成一行。只是取决于你期望它寻找下一个人的可怕程度。

答案 1 :(得分:0)

类似脚本的方法:

# Set password
$Password = 'Passw0rd'

# This is multidimensional array, i.e. an array that contains other arrays
# Each of those sub-arrays contains commandline parameters for schtasks.exe
$Commands = @(
    @('/tn', 'Task1', '/sd', '2015-01-01', '/ed', '2015-02-02', '/rp', $Password),
    @('/tn', 'Task2', '/sd', '2015-04-04', '/ed', '2015-05-05', '/rp', $Password)
)

# Iterate sub-arrays, and run schtasks.exe with commandline arguments from each
$Commands | ForEach-Object {& 'schtasks.exe' $_}

一衬垫:

@('/tn', 'Task1', '/sd', '2015-01-01', '/ed', '2015-02-02', '/rp'), @('/tn', 'Task2', '/sd', '2015-04-04', '/ed', '2015-05-05', '/rp') | ForEach-Object {& 'schtasks.exe' ($_ + 'Passw0rd')}