en-US/about_Mgx_Errors.help.txt

TOPIC
    about_Mgx_Errors
 
SHORT DESCRIPTION
    What terminates, what writes an error record, and how -ErrorAction and
    -ErrorVariable behave across every Mgx cmdlet.
 
LONG DESCRIPTION
    Mgx follows one rule: only failures that make the whole invocation
    meaningless terminate. Everything the service or transport says about an
    individual request is a non-terminating error record, so a 10,000-item
    fan-out that loses three items reports three errors and delivers 9,997
    results.
 
TERMINATING ERRORS
 
    ThrowTerminatingError is reserved for pre-flight failures - the request
    never went out, and no partial work exists:
 
    - Not connected, or Microsoft.Graph.Authentication missing
      (NotConnected, GraphAuthModuleNotLoaded, HttpClientInitFailed)
    - Invalid parameters or combinations: an absolute -Uri
      (AbsoluteUriNotAllowed), -Search without ConsistencyLevel
      (ConsistencyLevelRequired), a missing {id} placeholder, an unwritable
      state or output file validated before the first request, a body value
      with no JSON meaning (InvalidBodyValue), a second piped item against
      one -OutFile (OutFileWithMultipleInputs) - refused before its content
      is fetched
 
    Everything else is non-terminating.
 
NON-TERMINATING ERRORS
 
    Every service and transport failure writes an ErrorRecord and continues:
 
    ErrorId When
    ------- ----
    <Graph error code> A Graph error with a code (e.g.
                                Request_ResourceNotFound); "GraphError"
                                when the body carried none
    HttpError Transport failure with no response
    CircuitBroken The circuit breaker is open; the record wraps
                                the guidance text
    BatchItemError A batch item answered >= 400
    BatchItemNotSent A batch item never sent because
                                another chunk of the batch failed
    BatchChunkFailed A chunk's own $batch call failed, or
                                answered nothing that was sent
    FanOutError A per-id GET failed during fan-out
    BulkWriteError A per-id write failed during fan-out
    BulkWriteInfraError A fan-out write died before an HTTP status
    ExpandRelationError A relation fetch failed during expansion
    NonJsonResponse The body is not JSON (use -Raw or
                                Get-MgxContent)
    MalformedJsonResponse The body declared JSON and does not parse
    IOError / AccessDenied An output, checkpoint, or state file failed
 
    The ErrorCategory derives from the failure: ObjectNotFound (404),
    PermissionDenied (403), AuthenticationError (401), LimitsExceeded (429),
    ResourceUnavailable (5xx, open circuit), ConnectionError (transport,
    408), InvalidArgument (400 family), ResourceExists (409, 412).
 
-ERRORACTION
 
    Stop turns the first error record into a terminating error, ending the
    pipeline. For batches this stops at the first failed item - after the
    dead-letter file is written, so -DeadLetterPath always captures every
    failure even under Stop. Continue writes the record and carries on.
    SilentlyContinue suppresses the display and continues; records still land
    in $Error and -ErrorVariable.
 
    Ignore discards the record: nothing is displayed, nothing reaches $Error,
    and -ErrorVariable stays empty. It is a common parameter only -
    $ErrorActionPreference cannot be set to Ignore - so it applies to the one
    invocation that carries it.
 
-ERRORVARIABLE
 
    Collects every non-terminating record: one per failed item, URL, or
    page. A fan-out over N ids can produce up to N records.
 
RETRIES AND ERRORS
 
    A failure that is retried is not an error until retries are exhausted:
    a request that survives three 503s and succeeds writes nothing to the
    error stream. The retry history is visible under -Verbose, and the
    final record reflects the last failure.
 
CANCELLATION
 
    Ctrl-C produces a warning, not an error record, because the pipeline is
    already stopping and error records written during teardown are
    unreliable. A cancelled run is therefore indistinguishable from an empty
    result by $Error alone; checkpointed cmdlets write their checkpoint, and
    -Verbose says the run was cancelled.
 
SKIP SWITCHES
 
    -SkipNotFound and -SkipForbidden (Invoke-MgxRequest, Expand-MgxRelation)
    downgrade 404 and 403 per-item failures to a counted warning summary.
    Skipped items produce no error records - by design, since the caller
    declared them expected.
 
SEE ALSO
    about_Mgx
    about_Mgx_Tuning