Microsoft Certification
Practice Assessments

Realistische Prüfungssimulation: 50 Fragen aus einem Pool von 100, Countdown-Timer, freie Navigation und detaillierte Auswertung nach Microsoft-Bewertungsmaßstäben.

6Prüfungen verfügbar
600Übungsfragen
50Fragen/Session
700Passing Score

Fragen werden geladen…

Fragenübersicht

Aktuelle Frage Beantwortet Markiert Offen
AZ-104 Frage 1 von 50 Prüfung
1:40:00
Identität & Governance
/ 1000

Ihr Ergebnis

Ergebnis nach Themenbereich
Frage 1 von 50
d ? 'Bereits geprüft' : 'Antwort prüfen'; } else { checkArea.classList.add('hidden'); } const area = document.getElementById('question-area'); area.innerHTML = ''; if (q.type === 'casestudy') { csSub = { idx: 0, correct: 0 }; renderCsQuestion(q, area, ans); return; } const card = document.createElement('div'); card.className = 'question-card'; const typeLabels = { single:'Einzelauswahl', multiple:'Mehrfachauswahl – alle richtigen Antworten wählen', yesno:'Ja / Nein Frage', ordering:'Reihenfolge festlegen' }; card.innerHTML = `
${typeLabels[q.type] || q.type}
`; if (q.type === 'yesno' && q.scenario) { card.innerHTML += `
${q.scenario}
`; } if (q.type === 'multiple') { card.innerHTML += `
Wählen Sie alle zutreffenden Antworten.
`; } card.innerHTML += `
${q.question || q.statement}
`; // Antwortenbereich const answerDiv = document.createElement('div'); answerDiv.id = 'answer-area'; const letters = ['A','B','C','D','E','F']; const isRevealed = currentMode === 'learn' && ans.learnChecked; if (q.type === 'single' || q.type === 'multiple') { const list = document.createElement('div'); list.className = 'options-list'; q.options.forEach((opt, i) => { const item = document.createElement('div'); item.dataset.idx = i; if (isRevealed) { // Zeige Lösung const selected = Array.isArray(ans.selected) ? ans.selected : []; const isCorrect = q.correct.includes(i) && selected.includes(i); const isWrong = !q.correct.includes(i) && selected.includes(i); const isMissed = q.correct.includes(i) && !selected.includes(i); item.className = 'option-item locked ' + (isCorrect ? 'correct' : isWrong ? 'wrong' : isMissed ? 'correct-missed' : ''); } else { const selected = Array.isArray(ans.selected) ? ans.selected : []; item.className = 'option-item' + (selected.includes(i) ? ' selected' : ''); item.onclick = () => toggleOption(item, q.type); } item.innerHTML = `
${letters[i]}
${opt}
`; list.appendChild(item); }); answerDiv.appendChild(list); } else if (q.type === 'yesno') { const curSel = ans.selected; const makeClass = (val) => { let cls = 'yesno-btn'; if (curSel === null || curSel === undefined || curSel === '__timeout__') { // nichts markiert } else if (isRevealed) { if (val === q.correct && val === curSel) cls += ' correct'; else if (val !== q.correct && val === curSel) cls += ' wrong'; else if (val === q.correct) cls += ' correct'; cls += ' locked'; } else { if (val === curSel) cls += ' selected'; } return cls; }; answerDiv.innerHTML = `
`; } else if (q.type === 'ordering') { const list = document.createElement('div'); list.className = 'ordering-list'; list.id = 'ordering-list'; let displayItems; if (ans.selected && ans.selected !== '__timeout__') { // Gespeicherte Reihenfolge wiederherstellen displayItems = ans.selected.map((origIdx, pos) => ({ text: q.items[origIdx], origIdx })); } else { displayItems = shuffle(q.items.map((text, i) => ({ text, origIdx: i }))); } displayItems.forEach((item, pos) => { const div = document.createElement('div'); div.className = 'ordering-item' + (isRevealed ? (item.origIdx === q.correct[pos] ? ' correct' : ' wrong') : ''); div.draggable = !isRevealed; div.dataset.origIdx = item.origIdx; div.innerHTML = `${isRevealed ? '' : '⠿'}
${pos + 1}
${item.text}
`; if (!isRevealed) { div.addEventListener('dragstart', onDragStart); div.addEventListener('dragover', onDragOver); div.addEventListener('drop', onDrop); div.addEventListener('dragend', onDragEnd); } list.appendChild(div); }); answerDiv.appendChild(list); } card.appendChild(answerDiv); // Erklärung bei Lernmodus if (isRevealed) { const correct = isAnswerCorrect(q, ans.selected); const expBox = makeExplanationBox(q, correct); card.appendChild(expBox); } area.appendChild(card); } /* ── CASESTUDY ── */ function renderCsQuestion(cs, area, ans) { area.innerHTML = ''; const subQ = cs.questions[csSub.idx]; const header = document.createElement('div'); header.className = 'casestudy-header'; header.innerHTML = `

📋 ${cs.title}

${cs.scenario}

`; area.appendChild(header); const prog = document.createElement('div'); prog.className = 'cs-sub-prog'; prog.textContent = `Fallstudien-Frage ${csSub.idx + 1} von ${cs.questions.length}`; area.appendChild(prog); const card = document.createElement('div'); card.className = 'question-card'; card.innerHTML = `
Fallstudie – Einzelauswahl
${subQ.question}
`; const list = document.createElement('div'); list.className = 'options-list'; const letters = ['A','B','C','D']; subQ.options.forEach((opt, i) => { const item = document.createElement('div'); item.className = 'option-item'; item.dataset.idx = i; item.innerHTML = `
${letters[i]}
${opt}
`; item.onclick = () => toggleOption(item, 'single'); list.appendChild(item); }); card.appendChild(list); area.appendChild(card); // Casestudy überschreibt den Check-Button if (currentMode === 'learn') { const checkArea = document.getElementById('learn-check-area'); checkArea.classList.remove('hidden'); const btn = document.getElementById('btn-check-learn'); btn.disabled = false; btn.textContent = 'Antwort prüfen'; btn.onclick = () => checkCsLearnAnswer(cs, area); } } /* ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ INTERAKTION ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ */ function toggleOption(item, type) { if (item.classList.contains('locked') || item.classList.contains('correct') || item.classList.contains('wrong')) return; if (type === 'single') { document.querySelectorAll('.option-item').forEach(o => o.classList.remove('selected')); } item.classList.toggle('selected'); saveCurrentAnswer(); } function selectYesNo(btn) { if (btn.classList.contains('locked')) return; document.querySelectorAll('.yesno-btn').forEach(b => b.classList.remove('selected')); btn.classList.add('selected'); saveCurrentAnswer(); } function saveCurrentAnswer() { const q = questions[currentIdx]; const ans = sessionAnswers[currentIdx]; if (q.type === 'single' || q.type === 'multiple') { ans.selected = [...document.querySelectorAll('.option-item.selected')].map(el => parseInt(el.dataset.idx)); if (ans.selected.length === 0) ans.selected = null; } else if (q.type === 'yesno') { const btn = document.querySelector('.yesno-btn.selected'); ans.selected = btn ? (btn.dataset.val === 'true') : null; } else if (q.type === 'ordering') { const items = [...document.querySelectorAll('#ordering-list .ordering-item')]; ans.selected = items.map(el => parseInt(el.dataset.origIdx)); } } /* ── DRAG & DROP (Ordering) ── */ function onDragStart(e) { dragSrcIdx = [...e.target.parentNode.children].indexOf(e.target); e.target.classList.add('dragging'); } function onDragOver(e) { e.preventDefault(); e.currentTarget.classList.add('drag-over'); } function onDrop(e) { e.preventDefault(); const list = document.getElementById('ordering-list'); const items = [...list.children]; const dropIdx = items.indexOf(e.currentTarget); items.forEach(i => i.classList.remove('drag-over')); if (dragSrcIdx !== null && dragSrcIdx !== dropIdx) { const dragged = items[dragSrcIdx]; if (dropIdx < dragSrcIdx) list.insertBefore(dragged, items[dropIdx]); else list.insertBefore(dragged, items[dropIdx].nextSibling); [...list.children].forEach((el, i) => el.querySelector('.ordering-num').textContent = i + 1); } saveCurrentAnswer(); } function onDragEnd(e) { e.target.classList.remove('dragging'); document.querySelectorAll('.ordering-item').forEach(i => i.classList.remove('drag-over')); } /* ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ LERNMODUS: SOFORTIGES FEEDBACK ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ */ function checkLearnAnswer() { const q = questions[currentIdx]; const ans = sessionAnswers[currentIdx]; if (q.type === 'casestudy') return; // eigene Logik saveCurrentAnswer(); if (ans.selected === null) { alert('Bitte wählen Sie eine Antwort.'); return; } ans.learnChecked = true; renderQuestion(currentIdx); } function checkCsLearnAnswer(cs, area) { const subQ = cs.questions[csSub.idx]; const selected = [...document.querySelectorAll('.option-item.selected')].map(el => parseInt(el.dataset.idx)); if (selected.length === 0) { alert('Bitte wählen Sie eine Antwort.'); return; } const isCorrect = subQ.correct.every(c => selected.includes(c)) && selected.length === subQ.correct.length; if (isCorrect) csSub.correct++; document.querySelectorAll('.option-item').forEach(el => { const idx = parseInt(el.dataset.idx); el.onclick = null; el.classList.add('locked'); if (subQ.correct.includes(idx) && selected.includes(idx)) el.classList.add('correct'); else if (!subQ.correct.includes(idx) && selected.includes(idx)) el.classList.add('wrong'); else if (subQ.correct.includes(idx)) el.classList.add('correct-missed'); }); const expBox = makeExplanationBox({ explanation: subQ.explanation, docLink: subQ.docLink }, isCorrect); document.querySelector('.question-card').appendChild(expBox); const btn = document.getElementById('btn-check-learn'); btn.disabled = true; btn.textContent = 'Bereits geprüft'; csSub.idx++; if (csSub.idx < cs.questions.length) { btn.disabled = false; btn.textContent = `Nächste Teil-Frage (${csSub.idx + 1}/${cs.questions.length}) →`; btn.onclick = () => renderCsQuestion(cs, area, sessionAnswers[currentIdx]); } else { // Casestudy abgeschlossen sessionAnswers[currentIdx].selected = { done: true }; sessionAnswers[currentIdx].learnChecked = true; btn.textContent = 'Fallstudie abgeschlossen'; } } function makeExplanationBox(q, isCorrect) { const box = document.createElement('div'); box.className = `explanation-box ${isCorrect ? 'correct' : 'wrong'}`; box.innerHTML = `
${isCorrect ? '✅ Richtig!' : '❌ Falsch'}
${q.explanation || ''}
${q.docLink ? `📖 Microsoft Dokumentation →` : ''}`; return box; } /* ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ NAVIGATION ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ */ function goTo(idx) { if (idx < 0 || idx >= questions.length) return; saveCurrentAnswer(); renderQuestion(idx); window.scrollTo(0, 0); } function goPrev() { goTo(currentIdx - 1); } function goNext() { goTo(currentIdx + 1); } function toggleFlag() { sessionAnswers[currentIdx].flagged = !sessionAnswers[currentIdx].flagged; const btn = document.getElementById('flag-btn'); const flagged = sessionAnswers[currentIdx].flagged; btn.classList.toggle('flagged', flagged); btn.textContent = flagged ? '🚩 Markiert' : '🚩 Markieren'; } /* ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ FRAGENÜBERSICHT MODAL ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ */ function openOverview() { saveCurrentAnswer(); const answered = sessionAnswers.filter(a => a.selected !== null).length; const flagged = sessionAnswers.filter(a => a.flagged).length; const open = questions.length - answered; document.getElementById('overview-summary').textContent = `${answered} beantwortet · ${flagged} markiert · ${open} offen`; const grid = document.getElementById('q-grid'); grid.innerHTML = ''; sessionAnswers.forEach((ans, i) => { const btn = document.createElement('button'); btn.textContent = i + 1; btn.className = 'q-grid-btn'; if (i === currentIdx) btn.classList.add('current'); else if (ans.flagged) btn.classList.add('flagged'); else if (ans.selected !== null) btn.classList.add('answered'); btn.onclick = () => { closeOverview(); goTo(i); }; grid.appendChild(btn); }); document.getElementById('overview-modal').classList.add('open'); } function closeOverview() { document.getElementById('overview-modal').classList.remove('open'); } /* ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ ABGABE ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ */ function confirmSubmit() { saveCurrentAnswer(); const open = sessionAnswers.filter(a => a.selected === null).length; const msg = open > 0 ? `Sie haben noch ${open} Fragen nicht beantwortet. Diese werden als falsch gewertet.\n\nPrüfung jetzt abgeben?` : 'Prüfung jetzt abgeben?'; if (confirm(msg)) submitSession(); } function submitSession() { closeOverview(); clearInterval(timerInterval); sessionSubmitted = true; showResults(); } /* ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ ERGEBNISSE ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ */ function isAnswerCorrect(q, selected) { if (selected === null || selected === undefined || selected === '__timeout__') return false; if (q.type === 'single' || q.type === 'multiple') { const sel = Array.isArray(selected) ? selected : []; return q.correct.length === sel.length && q.correct.every(c => sel.includes(c)); } if (q.type === 'yesno') return selected === q.correct; if (q.type === 'ordering') { if (!Array.isArray(selected)) return false; return selected.every((v, i) => v === q.correct[i]); } if (q.type === 'casestudy') return selected?.done === true; return false; } function showResults() { let correct = 0; questions.forEach((q, i) => { if (isAnswerCorrect(q, sessionAnswers[i].selected)) correct++; }); const total = questions.length; const pct = correct / total; const score = Math.round(pct * 1000); const passed = score >= PASS_SCORE; // Banner const circle = document.getElementById('score-circle'); circle.className = 'score-circle ' + (passed ? 'score-pass' : 'score-fail'); document.getElementById('res-score').textContent = score; document.getElementById('res-headline').textContent = passed ? '🎉 Bestanden!' : '📚 Nicht bestanden'; document.getElementById('res-desc').textContent = passed ? `Sehr gut! Sie haben ${correct} von ${total} Fragen richtig beantwortet.` : `Sie haben ${correct} von ${total} Fragen richtig beantwortet.`; document.getElementById('res-passing').textContent = `Erreichter Score: ${score} / 1000 · Passing Score: ${PASS_SCORE} / 1000 · ` + (passed ? '✓ Bestanden' : '✗ Nicht bestanden'); // Zeit const elapsed = currentMode === 'exam' ? (currentCourse.duration * 60 - secondsLeft) : 0; if (currentMode === 'exam') { const em = Math.floor(elapsed / 60); const es = elapsed % 60; document.getElementById('res-time').textContent = `Verwendete Zeit: ${em}:${String(es).padStart(2,'0')} von ${currentCourse.duration}:00 Min`; } else { document.getElementById('res-time').textContent = 'Lernmodus – kein Timer'; } // Themenauswertung const topicMap = {}; questions.forEach((q, i) => { const topic = q.topic || 'Allgemein'; if (!topicMap[topic]) topicMap[topic] = { correct: 0, total: 0 }; topicMap[topic].total++; if (isAnswerCorrect(q, sessionAnswers[i].selected)) topicMap[topic].correct++; }); const topicDiv = document.getElementById('topic-results'); topicDiv.innerHTML = ''; Object.entries(topicMap) .sort((a,b) => (a[1].correct/a[1].total) - (b[1].correct/b[1].total)) .forEach(([topic, data]) => { const p = data.total > 0 ? Math.round(data.correct / data.total * 100) : 0; const color = p >= 70 ? 'var(--green)' : p >= 50 ? 'var(--yellow)' : 'var(--red)'; topicDiv.innerHTML += `
${topic}
${p}%
${data.correct}/${data.total}
`; }); // CTA const cta = currentCourse.cta; document.getElementById('res-cta').innerHTML = `

Für die echte Prüfung bereit? ${currentCourse.code} Training

Praxisorientiertes ${currentCourse.code} Training mit Hands-on-Labs – direkt buchbar bei drilling-azure.de.

${cta.text} →`; showView('results'); } /* ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ REVIEW MODUS ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ */ function startReview() { reviewIdx = 0; showView('review'); renderReviewQuestion(0); } function renderReviewQuestion(idx) { reviewIdx = idx; const q = questions[idx]; const ans = sessionAnswers[idx]; const total = questions.length; const correct = isAnswerCorrect(q, ans.selected); document.getElementById('review-counter').textContent = `Frage ${idx + 1} von ${total}`; const badge = document.getElementById('review-status-badge'); if (q.type === 'casestudy') { badge.innerHTML = '📋 Fallstudie'; } else if (ans.selected === null || ans.selected === '__timeout__') { badge.innerHTML = '○ Nicht beantwortet'; } else { badge.innerHTML = correct ? '✅ Richtig' : '❌ Falsch'; } const area = document.getElementById('review-area'); area.innerHTML = ''; // Topic const topicEl = document.createElement('div'); topicEl.style.cssText = 'font-size:0.78rem;font-weight:700;color:var(--orange);text-transform:uppercase;letter-spacing:0.05em;margin-bottom:0.8rem'; topicEl.textContent = q.topic || ''; area.appendChild(topicEl); const card = document.createElement('div'); card.className = 'question-card'; const letters = ['A','B','C','D','E','F']; if (q.type === 'casestudy') { card.innerHTML = `
Fallstudie
${q.scenario}

Fallstudien-Fragen werden im Review-Modus einzeln angezeigt.

`; q.questions.forEach((subQ, si) => { const subCard = document.createElement('div'); subCard.style.marginTop = '1rem'; subCard.innerHTML = `
Teil-Frage ${si+1}
${subQ.question}
`; const list = document.createElement('div'); list.className = 'options-list'; list.style.marginTop = '0.8rem'; subQ.options.forEach((opt, oi) => { const item = document.createElement('div'); item.className = 'option-item locked ' + (subQ.correct.includes(oi) ? 'correct' : ''); item.innerHTML = `
${letters[oi]}
${opt}
`; list.appendChild(item); }); subCard.appendChild(list); const expBox = makeExplanationBox({ explanation: subQ.explanation }, true); expBox.className = 'explanation-box correct'; subCard.appendChild(expBox); card.appendChild(subCard); }); area.appendChild(card); return; } const typeLabels = { single:'Einzelauswahl', multiple:'Mehrfachauswahl', yesno:'Ja / Nein', ordering:'Reihenfolge' }; card.innerHTML = `
${typeLabels[q.type] || q.type}
`; if (q.type === 'yesno' && q.scenario) card.innerHTML += `
${q.scenario}
`; card.innerHTML += `
${q.question || q.statement}
`; const answerDiv = document.createElement('div'); if (q.type === 'single' || q.type === 'multiple') { const list = document.createElement('div'); list.className = 'options-list'; const sel = Array.isArray(ans.selected) ? ans.selected : []; q.options.forEach((opt, i) => { const item = document.createElement('div'); const wasSelected = sel.includes(i); const isCorrect = q.correct.includes(i) && wasSelected; const isWrong = !q.correct.includes(i) && wasSelected; const isMissed = q.correct.includes(i) && !wasSelected; item.className = 'option-item locked ' + (isCorrect ? 'correct' : isWrong ? 'wrong' : isMissed ? 'correct-missed' : ''); item.innerHTML = `
${letters[i]}
${opt}
`; list.appendChild(item); }); answerDiv.appendChild(list); } else if (q.type === 'yesno') { const sel = ans.selected; const makeClass = (val) => { let cls = 'yesno-btn locked'; if (sel === null || sel === '__timeout__') { if (val === q.correct) cls += ' correct'; } else { if (val === q.correct && val === sel) cls += ' correct'; else if (val !== q.correct && val === sel) cls += ' wrong'; else if (val === q.correct) cls += ' correct'; } return cls; }; answerDiv.innerHTML = `
`; } else if (q.type === 'ordering') { const list = document.createElement('div'); list.className = 'ordering-list'; const userOrder = Array.isArray(ans.selected) ? ans.selected : q.correct; userOrder.forEach((origIdx, pos) => { const item = document.createElement('div'); item.className = 'ordering-item locked ' + (origIdx === q.correct[pos] ? 'correct' : 'wrong'); item.innerHTML = `
${pos + 1}
${q.items[origIdx]}
`; list.appendChild(item); }); // Korrekte Reihenfolge if (!correct) { const note = document.createElement('div'); note.style.cssText = 'font-size:0.82rem;color:var(--muted);margin-top:0.8rem'; note.innerHTML = 'Korrekte Reihenfolge: ' + q.correct.map(i => q.items[i]).join(' → '); answerDiv.appendChild(list); answerDiv.appendChild(note); } else { answerDiv.appendChild(list); } } card.appendChild(answerDiv); card.appendChild(makeExplanationBox(q, correct)); area.appendChild(card); } function reviewPrev() { if (reviewIdx > 0) renderReviewQuestion(reviewIdx - 1); window.scrollTo(0, 0); } function reviewNext() { if (reviewIdx < questions.length - 1) renderReviewQuestion(reviewIdx + 1); window.scrollTo(0, 0); } /* ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ UTILITIES ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ */ function shuffle(arr) { const a = [...arr]; for (let i = a.length - 1; i > 0; i--) { const j = Math.floor(Math.random() * (i + 1)); [a[i], a[j]] = [a[j], a[i]]; } return a; } function showView(name) { ['landing','loading','quiz','results','review'].forEach(v => { const el = document.getElementById('view-' + v); if (v === name) { el.style.display = 'block'; el.classList.add('active'); } else { el.style.display = 'none'; el.classList.remove('active'); } }); if (name === 'quiz') { const el = document.getElementById('view-quiz'); el.style.display = 'flex'; el.classList.add('active'); } document.getElementById('nav-sub').textContent = name === 'landing' ? 'Practice Assessments' : name === 'quiz' ? (currentCourse?.code + ' – ' + (currentMode === 'exam' ? 'Prüfungssimulation' : 'Lernmodus')) : name === 'results' ? (currentCourse?.code + ' – Ergebnis') : name === 'review' ? (currentCourse?.code + ' – Antworten') : 'Practice Assessments'; } function retrySession() { confirmStart(); } function backToLanding() { clearInterval(timerInterval); showView('landing'); } /* ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ START ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ */ renderLanding();