我正在编写运行在一堆计划任务中的powershell脚本,并试图在Windows Server 2008上删除它们。当在powershell中测试schtasks.exe命令时,它似乎运行良好。但是,当我把它放在我的剧本,我得到以下错误:(注意,我删除了公司名称,并以“公司名称”替代它们)通过powershell运行Schtasks抛出无效的参数/选项错误
ERROR: Invalid argument/option - 'ScheduledJobs\Companyname\0.999.1-CompanynameMacStation Delivery Manager-Test'.
Removing , Exit code: 1
这是从脚本代码的片段; $ version是我们的软件版本,在这种情况下是0.999.1,而$ environment是部署环境,在这种情况下是Test。 $ server是我们试图删除计划任务的服务器。我觉得很奇怪的是,如果你看看上面的错误,它会显示我们传入schtasks的$ name,但是当我为了诊断目的而在下一行中引用它时(“Removing,Exit code:1” )它看起来像$ name现在是空的。这个脚本是我们的构建模板的一部分,所以它是从我们的构建服务器运行的,并针对远程机器运行该命令。思考?
function RemoveScheduledJob($server, $name)
{
Write-Host "Deleting Scheduled job $name."
$windowsVersion = (Get-CimInstance Win32_OperatingSystem).Version
$windowsVersion = $Version.Substring(0,3)
if ([double]$windowsVersion -ge 6.2)
{
Remove2012ScheduledJob($server, $name)
}
else
{
Remove2008ScheduledJob($server, $name)
}
}
function Remove2008ScheduledJob($server, $name)
{
schtasks.exe /delete /s $server /F /tn $name
Write-Host "Removing $name, Exit code: $LASTEXITCODE"
}
$taskPath = "ScheduledJobs\CompanyName"
$taskName = "$taskPath\{0}-CompanyName Delivery Manager-{1}" -f $Version, $Environment
RemoveScheduledJob $Server $taskName
在PowerShell中运行带有包含空格的参数的外部程序会非常麻烦。尝试将'schtasks.exe'的参数定义为一个数组('$ params ='/ delete','/ s','$ server','/ f','/ tn','$ name'')和像这样运行程序:'&schtasks.exe $ params'。 –
我稍后可能会对此进行更改,以便进行清理。 –
可能的重复[如何将多个参数传递到PowerShell中的函数?](http://stackoverflow.com/questions/4988226/how-do-i-pass-multiple-parameters-into-a-function-in -电源外壳) –