Добрый день, я пытаюсь написать скрипт, который будет проверять, действителен ли пользователь, и экспортировать результаты в файл .csv. Я использую командлет «для каждого» и erroraction -silentlycontinue, чтобы проверить список пользователей из CSV-файла, а затем проверить в центре администрирования Microsoft Teams, действительно ли это пользователь.
Проблема, с которой я сталкиваюсь, заключается в том, что если я добавляю командлет «$ errorActionpreference», который подавляет ошибки (или пользователей, не найденных на экране), результаты в файле CSV пусты. Если я удаляю командлет $ errorAction (заштриховано в сценарии ниже ), то он отлично работает, экспортируя действительных пользователей, НО он выдает много ошибок на экране.
Сценарии просто должны подавить сообщения об ошибках для недействительных пользователей, перейти к следующему пользователю в CSV-файле и, наконец, экспортировать результаты действительных пользователей в другой CSV-файл.
$path = Read-Host -Prompt "`nEnter the path of .csv file:"
if (Test-Path -Path $path) { break }
Write-Host "Wrong file or path specified. Please enter the correct
path to file!" -ForegroundColor Red
Write-Host "File has been located in the path specified!" -
ForegroundColor Green
$CsvFilePath = Import-CSV -Path $path
# $ErrorActionPreference = "silentlycontinue"
$results = foreach ($Users in $CsvFilePath) {
$User = $Users.UserPrincipalName
Get-CsOnlineUser $User | Select-Object UserPri*, LineURI,
TeamsUpgradeE*,IsSipEnabled, Enterprise*,
@{l = "AssignedPlan";e = {$_.AssignedPlan
- join "; "}}, @{l = "FeatureTypes";e = {$_.FeatureTypes -join ";
"}}
}
# $ErrorActionPreference = "silentlycontinue
#Export Results: Prompt for Path, If file does not exist, create it!#
$resultspathfilelocation = Read-Host -Prompt "`nEnter file path
to export results of
the Post Checks: "
$FileName = "$resultspathfilelocation"
if (Get-Item -Path $FileName -ErrorAction Ignore){
Write-Host "File found in directory specified!"
}
else{
New-Item -Verbose $FileName -ItemType File
}
$results | Export-Csv $resultspathfilelocation
@MathiasR.Jessen, спасибо за ответ. Я получаю пакеты пользователей в файле CSV. Мне нужно проверить, являются ли они действительными пользователями или нет. Если Пользователь не существует (например, неверный домен или адрес электронной почты с ошибкой), просто отключите сообщения об ошибках и сообщайте только об успешных Пользователях. Если возможно, если есть недействительные пользователи, экспортируйте их тоже. Надеюсь, это имеет смысл.
Используйте конструкцию Try...Catch
вместе с -ErrorAction Stop
вокруг вашего запроса, а затем просто передавайте ошибки Catch?
Вместо того, чтобы пытаться игнорировать ошибки, почему бы просто не обработать их должным образом?
$Results = foreach ($Users in $CsvFilePath) {
Try {
$User = $Users.UserPrincipalName
$ThisUser = Get-CsOnlineUser $User -ErrorAction Stop
# Output as custom object
[pscustomobject]@{UPN = $User
TeamsUpgradeEffectiveMode = $ThisUser.TeamsUpgradeEffectiveMode
IsSipEnabled = $ThisUser.IsSipEnabled
AssignedPlan = ($ThisUser.AssignedPlan -join "; ")
FeatureTypes = ($ThisUser.FeatureTypes -join "; ")
Error = ''}
}
Catch {
# User not found or error, output object with blank fields except for error
[pscustomobject]@{UPN = $User
TeamsUpgradeEffectiveMode = ''
IsSipEnabled = ''
AssignedPlan = ''
FeatureTypes = ''
Error = $_.Exception.Message}
}
}
Это отлично работает для меня. Большое спасибо. Таким образом, для недопустимого имени участника-пользователя он сообщает в CSV, что идентификатор пользователя не найден, а для действительного пользователя он предоставляет всю необходимую информацию, как и планировалось, все в одном CSV-файле, который превосходен. Еще раз спасибо :)
Почему вы «предварительно создаете» файл?