Решение Матиаса Р. Джессена эффективно, но есть более простая и быстрая альтернатива:
Общий параметр -ErrorVariable
имеет редко встречаемую функцию, которая позволяет Вы добавляете ошибок, собранных во время выполнения команды, к существующей переменной, просто добавляя +
к имени целевой переменной , что дает следующее решение:
foreach ($collectie in $sitecollectios)
{
# Using built-in alias parameter names, you could shorten to:
# Get-SPOUser -ea SilentlyContinue -ev +errs ...
Get-SPOUser -ErrorAction SilentlyContinue -ErrorVariable +errs -Site $collectie -LoginName $UserID
}
# Print the errors that occurred.
$errs
-ErrorAction SilentlyContinue
заставляет ошибки замолчать (не , не , используйте Ignore
, поскольку это полностью подавит ошибки).
-ErrorAction +errs
собирает любые ошибки в переменной $errs
, добавляя их к существующей коллекции в $errs
или создавая ее по требованию.
- Обратите внимание, как переменная имя ,
errs
должна не иметь префикс $
при передаче в -ErrorAction
.
впоследствии можно просмотреть коллекцию $errs
, чтобы узнать, для каких пользователей произошел сбой вызова.
$errs
(например, * 105 0 * automati c $Error
переменная , которая собирает ошибки в течение сеанса ) будет массивоподобным объектом (типа System.Collections.ArrayList
), содержащим System.Management.Automation.ErrorRecord
объектов.
Самый простой способ получить сообщение об ошибке сообщение (если не считать простого вывода $errs
в целом на экран) вызов .ToString()
в записи об ошибке; например, $errs[0].ToString()
; чтобы получить все сообщения об ошибках в коллекции, используйте $errs.ForEach('ToString')
. Существует свойство .Exception.Message
, но оно может быть ситуативно отменено на .ErrorDetails.Message
, когда ошибка выводится на дисплей; .ToString()
применяет эту логику c автоматически.
Свойство .TargetObject
сообщает вам целевой объект или вход , которые вызвали ошибку ; Я не могу лично проверить, что делает Get-SPOUser
, но было бы разумно, чтобы аргумент -LoginName
несуществующих пользователей был отражен там; Вот как это работает аналогично Get-Item -Path NoSuch
, например: в итоговой записи об ошибке .TargetObject
содержит 'NoSuch'
с полным путем.