First ITIL Check Tool

<#
.SYNOPSIS
First ITIL Check Tool

.DESCRIPTION
This script provides a basic assessment of ITIL practices within an IT organization,
focusing on the five core areas of ITIL: Service Strategy, Service Design, Service Transition,
Service Operation, and Continual Service Improvement.

.NOTES
File Name      : FirstITILCheckTool.ps1
Author         : [Your Name]
Prerequisite   : PowerShell V5.1 or later
Version        : 1.0
Date           : [Current Date]

.EXAMPLE
.\FirstITILCheckTool.ps1
#>

# Global variables
$global:reportPath = "$env:USERPROFILE\Desktop\ITIL_Assessment_Report_$(Get-Date -Format 'yyyyMMdd_HHmmss').html"
$global:assessmentResults = @{}

<#
.SYNOPSIS
Displays the main menu of the tool.
#>
function Show-Menu {
    Clear-Host
    Write-Host "=== First ITIL Check Tool ===" -ForegroundColor Cyan
    Write-Host "1. Assess Service Strategy"
    Write-Host "2. Assess Service Design"
    Write-Host "3. Assess Service Transition"
    Write-Host "4. Assess Service Operation"
    Write-Host "5. Assess Continual Service Improvement"
    Write-Host "6. Generate Comprehensive HTML Report"
    Write-Host "7. Exit"
}

<#
.SYNOPSIS
Conducts an assessment based on provided questions.

.PARAMETER AreaName
The name of the ITIL area being assessed.

.PARAMETER Questions
An array of questions for the assessment.

.OUTPUTS
PSObject containing assessment results.
#>
function Conduct-Assessment {
    param (
        [string]$AreaName,
        [array]$Questions
    )

    Write-Host "`nAssessing $AreaName..." -ForegroundColor Yellow
    $results = @()

    foreach ($question in $Questions) {
        $response = Read-Host "$question (Y/N)"
        $score = if ($response.ToLower() -eq 'y') { 1 } else { 0 }
        $results += [PSCustomObject]@{
            Question = $question
            Implemented = if ($score -eq 1) { "Yes" } else { "No" }
        }
    }

    $implementedCount = ($results | Where-Object { $_.Implemented -eq "Yes" }).Count
    $totalQuestions = $Questions.Count
    $percentageImplemented = [math]::Round(($implementedCount / $totalQuestions) * 100, 2)

    $assessmentSummary = [PSCustomObject]@{
        Area = $AreaName
        ImplementedPractices = $implementedCount
        TotalPractices = $totalQuestions
        PercentageImplemented = $percentageImplemented
    }

    $results | Format-Table -AutoSize
    $assessmentSummary | Format-Table -AutoSize

    return @{
        Details = $results
        Summary = $assessmentSummary
    }
}

<#
.SYNOPSIS
Assesses Service Strategy practices.
#>
function Assess-ServiceStrategy {
    $questions = @(
        "Is there a defined IT service strategy aligned with business goals?",
        "Are service portfolios maintained and regularly reviewed?",
        "Is there a process for demand management?",
        "Are financial management practices in place for IT services?",
        "Is there a defined approach for business relationship management?"
    )
    $global:assessmentResults.ServiceStrategy = Conduct-Assessment -AreaName "Service Strategy" -Questions $questions
}

<#
.SYNOPSIS
Assesses Service Design practices.
#>
function Assess-ServiceDesign {
    $questions = @(
        "Is there a formal process for designing new or changed services?",
        "Are service level agreements (SLAs) defined and managed?",
        "Is there a capacity management process in place?",
        "Is availability management considered in service design?",
        "Is there a formal IT service continuity management process?"
    )
    $global:assessmentResults.ServiceDesign = Conduct-Assessment -AreaName "Service Design" -Questions $questions
}

<#
.SYNOPSIS
Assesses Service Transition practices.
#>
function Assess-ServiceTransition {
    $questions = @(
        "Is there a formal change management process?",
        "Is there a process for managing service assets and configurations?",
        "Is release and deployment management formalized?",
        "Is knowledge management practiced and encouraged?",
        "Are service validations and testing performed before deployment?"
    )
    $global:assessmentResults.ServiceTransition = Conduct-Assessment -AreaName "Service Transition" -Questions $questions
}

<#
.SYNOPSIS
Assesses Service Operation practices.
#>
function Assess-ServiceOperation {
    $questions = @(
        "Is there a formal incident management process?",
        "Is problem management practiced to identify root causes?",
        "Is there a defined process for fulfilling service requests?",
        "Are events monitored and managed across IT infrastructure?",
        "Is access to IT services controlled and managed?"
    )
    $global:assessmentResults.ServiceOperation = Conduct-Assessment -AreaName "Service Operation" -Questions $questions
}

<#
.SYNOPSIS
Assesses Continual Service Improvement practices.
#>
function Assess-ContinualServiceImprovement {
    $questions = @(
        "Is there a process for continually identifying improvements?",
        "Are service performance metrics defined and monitored?",
        "Is customer feedback regularly collected and analyzed?",
        "Are improvement initiatives prioritized and implemented?",
        "Is there a process for reviewing and measuring improvement outcomes?"
    )
    $global:assessmentResults.ContinualServiceImprovement = Conduct-Assessment -AreaName "Continual Service Improvement" -Questions $questions
}

<#
.SYNOPSIS
Generates a comprehensive HTML report of all assessments.

.OUTPUTS
Saves an HTML report to the desktop.
#>
function Generate-HTMLReport {
    Write-Host "`nGenerating Comprehensive HTML Report..." -ForegroundColor Yellow
    $reportContent = @"
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>ITIL Assessment Report</title>
    <style>
        body { font-family: Arial, sans-serif; line-height: 1.6; color: #333; max-width: 800px; margin: 0 auto; padding: 20px; }
        h1, h2, h3 { color: #0078D4; }
        table { border-collapse: collapse; width: 100%; margin-bottom: 20px; }
        th, td { border: 1px solid #ddd; padding: 8px; text-align: left; }
        th { background-color: #f2f2f2; }
        .implemented { color: green; }
        .not-implemented { color: red; }
        .summary { font-weight: bold; }
    </style>
</head>
<body>
    <h1>ITIL Assessment Report</h1>
    <p>Generated on: $(Get-Date)</p>

"@

    foreach ($area in $global:assessmentResults.Keys) {
        $reportContent += @"
    <h2>$area</h2>
    <h3>Detailed Assessment</h3>
    <table>
        <tr>
            <th>Practice</th>
            <th>Implemented</th>
        </tr>
"@
        foreach ($detail in $global:assessmentResults[$area].Details) {
            $class = if ($detail.Implemented -eq "Yes") { "implemented" } else { "not-implemented" }
            $reportContent += @"
        <tr>
            <td>$($detail.Question)</td>
            <td class="$class">$($detail.Implemented)</td>
        </tr>
"@
        }
        $reportContent += @"
    </table>

    <h3>Summary</h3>
    <table>
        <tr>
            <th>Metric</th>
            <th>Value</th>
        </tr>
        <tr>
            <td>Implemented Practices</td>
            <td>$($global:assessmentResults[$area].Summary.ImplementedPractices)</td>
        </tr>
        <tr>
            <td>Total Practices</td>
            <td>$($global:assessmentResults[$area].Summary.TotalPractices)</td>
        </tr>
        <tr>
            <td>Percentage Implemented</td>
            <td class="summary">$($global:assessmentResults[$area].Summary.PercentageImplemented)%</td>
        </tr>
    </table>
"@
    }

    $reportContent += @"
</body>
</html>
"@

    $reportContent | Out-File -FilePath $global:reportPath
    Write-Host "Report generated and saved to: $global:reportPath" -ForegroundColor Green
}

# Main program loop
do {
    Show-Menu
    $choice = Read-Host "`nEnter your choice (1-7)"

    switch ($choice) {
        "1" { Assess-ServiceStrategy }
        "2" { Assess-ServiceDesign }
        "3" { Assess-ServiceTransition }
        "4" { Assess-ServiceOperation }
        "5" { Assess-ContinualServiceImprovement }
        "6" { Generate-HTMLReport }
        "7" { Write-Host "Exiting program..." -ForegroundColor Yellow; break }
        default { Write-Host "Invalid choice. Please try again." -ForegroundColor Red }
    }

    if ($choice -ne "7") {
        Read-Host "`nPress Enter to continue..."
    }
} while ($choice -ne "7")

This First ITIL Check Tool includes:

  1. A menu-driven interface for easy navigation.
  2. Functions to assess the five core areas of ITIL:
    • Service Strategy
    • Service Design
    • Service Transition
    • Service Operation
    • Continual Service Improvement
  3. A generic assessment function that can be used for all ITIL areas.
  4. HTML report generation for a comprehensive overview of the assessment.

Key features:

  • Simple yes/no questions for each ITIL area to assess implementation of key practices
  • Calculation of implementation percentage for each ITIL area
  • Detailed assessment results showing which practices are implemented
  • Summary view of implemented practices, total practices, and implementation percentage
  • Comprehensive HTML report generation with color-coded results

This tool is particularly useful for:

  • IT managers starting to implement ITIL practices
  • Organizations wanting to get a quick overview of their ITIL implementation status
  • IT professionals learning about ITIL and its key practices
  • Teams preparing for a more comprehensive ITIL assessment or certification

To use this script effectively:

  1. Run the script in PowerShell
  2. Go through each ITIL area assessment, answering the questions honestly
  3. Generate the HTML report for a visual representation of your ITIL implementation status

This script provides a basic starting point for assessing ITIL practices within an organization. It’s important to note that this is a simplified tool and doesn’t cover all aspects of ITIL. For a comprehensive ITIL assessment, it’s recommended to consult with ITIL experts or use more detailed assessment tools.

0 replies

Leave a Reply

Want to join the discussion?
Feel free to contribute!

Leave a Reply

Your email address will not be published. Required fields are marked *