2015-06-11 35 views
0

在Windows 2008R2服務器上,我必須使用本機schtasks來安排任務。我創建了下面的腳本,它首先用Watson的ID刪除任何舊的任務,然後安排它。唯一的問題是化妝品。 Schtasks/DELETE將給出以下錯誤:從本地應用程序恢復PowerShell錯誤

ERROR: The system cannot find the path specified 

如果任務原本不在那裏。不是一個非常友好的信息。我想做一個

schtasks /QUERY /TN $name 

找出它是否存在,然後才刪除它。但我的powershell技能並不適合。我嘗試了一個TRY塊,但它似乎不適用於本地應用程序)

有什麼建議嗎?

start-transcript -Path install.log -Append 
Write-Host "schedule.ps1 Script`r`n" 

$reg = Get-Item -Path "hklm:\SOFTWARE\Draper Laboratory\EGPL\GeoLibrarian" 
$path = $reg.GetValue('VHDPath').ToString() 


$name = "Watson" 
$bin = "powershell.exe" 
$trigger = "ONCE" 
$ts = New-TimeSpan -Minutes 1 
$time = (get-date) + $ts 
$when = "{0:HH\:mm}" -f $time 
$policy ="-executionpolicy Unrestricted" 
$profile = "-noprofile" 
$file = "$path\setup\boot-watson.ps1" 
$sixtyfour = [Environment]::Is64BitProcess 
Write-Host "64-Bit Powershell: "$sixtyfour 
Write-Host "PowerShell Version: "$PSVersionTable.PSVersion 
Write-Host "Deleting old watson task" 
schtasks /DELETE /TN $name /F 2>&1 | %{ "$_" } 
Write-Host "If watson was not scheduled, ignore ERROR: The system cannot find the path specified" 
Write-Host "Adding new watson start-up task" 
#schtasks /CREATE /TN $name /TR "$bin $policy $profile -file $file" /SC $trigger /ST $when /RU SYSTEM /RL HIGHEST 2>&1 | %{ "$_" } | Out-Host 
schtasks /CREATE /TN $name /TR "$bin $policy $profile -file $file" /SC ONSTART /RU SYSTEM /RL HIGHEST 2>&1 | %{ "$_" } | Out-Host 

更新:

我試圖做一個/查詢,但如果任務不存在,本身轉儲很多錯誤的文本。

schtasks : ERROR: The system cannot find the file specified. 
At G:\wwwroot\setup\uninstall.ps1:11 char:1 
+ schtasks /QUERY /TN $name | Out-Null 
+ ~~~~~~~~~~~~~~~~~~~~~~~~~ 
    + CategoryInfo   : NotSpecified: (ERROR: The syst...file specified.:String) [], RemoteException 
    + FullyQualifiedErrorId : NativeCommandError 

回答

1

您可以使用兩個自動變量表示最後退出代碼之一:$LASTEXITCODE$?

如果schtasks /query成功,$LASTEXITCODE0$?$true

在另一方面,如果schtasks /query呼叫失敗,$LASTEXITCODE將包含非0退出代碼,而$?將評估爲$false

schtasks /QUERY /TN $name > $null 2>&1 
if($?){ 
    schtasks /DELETE /TN $name /F 
} 

或者,使用$LASTEXITCODE

schtasks /QUERY /TN $name > $null 2>&1 
if($LASTEXITCODE -eq 0){ 
    schtasks /DELETE /TN $name /F 
} 

使用output redirection$null來說,攔截從schtasks

+0

錯誤/輸出所以,現在它吐出來。如果任務/查詢了很多錯誤文本不存在。如果它在那裏,工作正常。但是做/查詢的全部原因是爲了避免錯誤文本。想法? schtasks:錯誤:系統找不到指定的文件。 在G:\ wwwroot \ setup \ uninstall.ps1:11 char:1 + schtasks/QUERY/TN $ name | Out-Null + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + CategoryInfo:NotSpecified:(錯誤:指定的syst ...文件:String) [],RemoteException + FullyQualifiedErrorId:NativeCommandError –

+0

如果您無法閱讀此內容,請參閱更新。 –

+0

謝謝,完美的作品 –