ich die Funktion get_user haben, die für den Benutzernamen sucht getippt:Try/Catch funktioniert nicht in Powershell
function get_user
{
$url2 = "myurl/userName:" + $userName
$contentType2 = "application/json"
$basicAuth2 = post_token
$headers2 = @{
Authorization = $basicAuth2
}
$body2 = @{
grant_type = 'client_credentials'
}
$getUser = Invoke-RestMethod -Method Get -Uri $url2 -ContentType $contentType2 -Headers $headers2 -Body $body2
return $getUser.userName
}
Und dann habe ich meine try/catch-Anweisung im Hauptverfahren, das nicht funktioniert:
#MAIN
try {
$userName = Read-Host -Prompt "Input the user's username"
$getUser = get_user
if ($userName -eq $getUser)
{
$courseId = Read-Host -Prompt "Input the course's ID"
$availability = Read-Host -Prompt "Available? (Yes/No)"
$courseRoleId = Read-Host -Prompt "Course Role? (Student/Instructor)"
$confirmationEnrollment = putStudentCourse
" "
"####################################################"
"Success!"
"####################################################"
}
else
{
$firstName = Read-Host -Prompt "First Name"
$lastName = Read-Host -Prompt "Last Name"
$netId = $userName
$email = $userName + "@school.edu"
$password = Read-Host -Prompt "Password"
$uin = Read-Host -Prompt "ID Number"
$isAvailable = Read-Host -Prompt "Available? (Yes/No)"
$confirmationUserCreate = user_create
" "
"####################################################"
"User created!"
"####################################################"
" "
$courseId = Read-Host -Prompt "Input the course's ID"
$confirmEnroll = putStudentCourse
" "
"####################################################"
"User enrolled!"
"####################################################"
}
}
catch [System.Net.HttpWebRequest]
{
"####################################################"
"User not found. We'll create it now!"
"####################################################"
" "
}
Im Moment ist es wirft Fehler, nachdem Sie einen Benutzernamen ein, der nicht existiert:
Invoke-RestMethod : The remote server returned an error: (404) Not Found.
At E:\Blackboard_REST_API_Project\PowerShell\Post_Student_Course.ps1:42 char:13
+ $getUser = Invoke-RestMethod -Method Get -Uri $url2 -ContentType $contentType2 ...
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : InvalidOperation: (System.Net.HttpWebRequest:HttpWebRequest) [Invoke-RestMethod], WebException
+ FullyQualifiedErrorId : WebCmdletWebResponseException,Microsoft.PowerShell.Commands.InvokeRestMethodCommand
ich bin versucht, Verstecke den roten Fehler und gib aus, was ich in der catch-Anweisung habe, aber er überspringt den catch und springt direkt zum else, wenn er keinen Benutzernamen finden kann. Irgendwelche Ideen?
Hallo emanresu. Das fängt den Fehler ab und gibt aus, was in der Catch-Anweisung steht, großartig! Das einzige Problem ist, dass es das Programm beendet und es nicht in die else-Anweisung geht. – SPedraza
Sie fangen wahrscheinlich den falschen Ausnahmetyp. Außerdem glaube ich nicht, dass dieser Code tun wird, was Sie wollen. Wenn get_user einen Fehler auslöst, überspringen Sie den Codeabschnitt, der den Text "user created" enthält. Wollen Sie den Benutzer erstellen, wenn ein Fehler auftritt? – emanresu
Korrekt. Wenn der Benutzer gefunden wird, fahren Sie mit der if-Anweisung fort (fragen Sie nach einer Kurs-ID und es wird den Benutzer registrieren, ich habe eine andere Funktion dafür). Wenn dies nicht der Fall ist, wechseln Sie zur else-Anweisung und erstellen Sie den Benutzer. – SPedraza