从本机应用程序恢复 powershell 错误
powershell error recovery from native applications
在 windows 2008R2 服务器上,我必须使用本机 schtasks 来安排任务。我创建了以下脚本,它首先删除 ID 为 Watson 的所有旧任务,然后安排它。唯一的问题是化妆品。 Schtasks /DELETE 会给出一个错误:
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
更新:
我尝试执行 /query,但如果任务不存在,它本身会转储大量错误文本。
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
您可以使用指示最后退出代码的两个自动变量之一:$LASTEXITCODE
和 $?
如果schtasks /query
成功,$LASTEXITCODE
将是0
,$?
将是$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
中的 error/output
在 windows 2008R2 服务器上,我必须使用本机 schtasks 来安排任务。我创建了以下脚本,它首先删除 ID 为 Watson 的所有旧任务,然后安排它。唯一的问题是化妆品。 Schtasks /DELETE 会给出一个错误:
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
更新:
我尝试执行 /query,但如果任务不存在,它本身会转储大量错误文本。
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
您可以使用指示最后退出代码的两个自动变量之一:$LASTEXITCODE
和 $?
如果schtasks /query
成功,$LASTEXITCODE
将是0
,$?
将是$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