Запускаю скрипт с таким участком кода:
$taskName = "SetupModeTempAllow"
$task = Get-ScheduledTask -TaskName "$taskName"
Если задача с именем «SetupModeTempAllow» не существует, то в результате выполнения скрипта получаю сообщение об ошибке:
Get-ScheduledTask : No MSFT_ScheduledTask objects found with property 'TaskName' equal to 'SetupModeTempAllow'. Verify the value of the property and retry. + $task = Get-ScheduledTask -TaskName "$taskName" + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + CategoryInfo : ObjectNotFound: (SetupModeTempAllow:String) [Get-ScheduledTask], CimJobException + FullyQualifiedErrorId : CmdletizationQuery_NotFound_TaskName,Get-ScheduledTask
В принципе на функциональности скрипта это не отражается, но большое количество красных букв напрягает :) Поэтому я решил отловить исключения:
try
{
$task = Get-ScheduledTask -TaskName "$taskName" -ErrorAction Stop
}
catch [CimJobException]
{
Write-Verbose "Path $($_.TargetObject) not found!"
}
Но получил другую ошибку:
Unable to find type [CimJobException]. + catch [CimJobException] + ~~~~~~~~~~~~~~~~~ + CategoryInfo : InvalidOperation: (CimJobException:TypeName) [], RuntimeException + FullyQualifiedErrorId : TypeNotFound
Очевидно, что был указан неверный тип исключения (не полное название).
На сайте MS про исключения я ничего не нашёл. Пришлось найти другой способ получить детальное описание исключения.
После того, как скрипт выбросил исключение, нужно в той же консоле выполнить:
$Error[0] | Select –Property *
получим:
PS C:\Windows\system32> $Error[0] | Select –Property * writeErrorStream : True PSMessageDetails : OriginInfo : Exception : Microsoft.PowerShell.Cmdletization.Cim.CimJobException: No MSFT_ScheduledTask objects found with property 'TaskName' equal to 'SetupModeTempAllow'. Verify the value of the property and retry. TargetObject : SetupModeTempAllow CategoryInfo : ObjectNotFound: (SetupModeTempAllow:String) [Get-ScheduledTask], CimJobException FullyQualifiedErrorId : CmdletizationQuery_NotFound_TaskName,Get-ScheduledTask ErrorDetails : InvocationInfo : System.Management.Automation.InvocationInfo ScriptStackTrace : PipelineIterationInfo : {0, 1}
Здесь в строчке Exception будет указано полное наименование исключения:
Microsoft.PowerShell.Cmdletization.Cim.CimJobException
Ещё одним вариантом будет такой код:
$Error[0].Exception.GetType().FullName
Таким образом код будет следующим:
try
{
$task = Get-ScheduledTask -TaskName "$taskName" -ErrorAction Stop
}
catch [Microsoft.PowerShell.Cmdletization.Cim.CimJobException]
{
Write-Verbose "Path $($_.TargetObject) not found!"
}
- C#: Сравнить два массива - 12.12.2024
- EVE-Online: Фильтры каналов - 23.11.2024
- Не приходит СМС для авторизации на сайте Госуслуги - 01.11.2024