2015-05-05 33 views
1

我正在编写运行在一堆计划任务中的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 
+0

在PowerShell中运行带有包含空格的参数的外部程序会非常麻烦。尝试将'schtasks.exe'的参数定义为一个数组('$ params ='/ delete','/ s','$ server','/ f','/ tn','$ name'')和像这样运行程序:'&schtasks.exe $ params'。 –

+0

我稍后可能会对此进行更改,以便进行清理。 –

+0

可能的重复[如何将多个参数传递到PowerShell中的函数?](http://stackoverflow.com/questions/4988226/how-do-i-pass-multiple-parameters-into-a-function-in -电源外壳) –

回答

0

想通了;这就是我如何调用函数。

我调用函数“Remove2008ScheduledJob”就像它是一个C#或JavaScript函数,它的工作方式不同。

我打电话它像这样:

Remove2008ScheduledJob($server, $name) 

当我要调用它像这样:

Remove2008ScheduledJob $server $name 

正因为如此,$服务器基本上成为$服务器,空格之后$名称和$名称是空白的。这解释了为什么它声称$ name是无效的参数/选项。

相关问题