Public/Invoke-SpellCheck.ps1

<#
.Synopsis
   Checks a document for spelling mistakes
.DESCRIPTION
   Uses the NetSpell .Net spelling library with the default dictionary that comes with it to check a given document for spelling mistakes, and can correct the mistakes in the document.
.EXAMPLE
   Invoke-SpellCheck -NetSpellDLL "C:\Modules\NetSpell.SpellChecker.dll" -DictionaryDirectory C:\Dictionary\ -Path C:\test\document.txt
#>

function Invoke-SpellCheck
{
    [CmdletBinding()]
    Param
    (
        # Enter Path to NetSpell Dll
        [Parameter(Mandatory=$false,Position=2)]
        #[ValidateScript( { $_.Exists }, "The specified file does not exist.")]
        [string]$NetSpellDLL = (Join-Path $PSScriptRoot "NetSpell.SpellChecker.dll"),
        # Dictionary Folder
        [Parameter(Mandatory=$false, Position=1)]
        [ValidateScript({ Test-Path $_ -PathType 'Container' })]
        [string]$DictionaryDirectory = $PSScriptRoot,
        [Parameter(Mandatory=$true, Position=0)]
        [System.IO.FileInfo]$Path,
    [int]$Height = 500,
    [int]$Width = 700,
    [int]$fontSize = 12
    )

    Begin{
    if(!(Test-Path $DictionaryDirectory -PathType 'Container')){
    Write-Error "Directory '$DictionaryDirectory' does not exist."
    exit 1
    }
    }
    Process
    {
    Add-Type -Path "$NetSpellDLL"
    $TextBox = New-Object System.Windows.Forms.TextBox
    #$TextBox = New-Object System.Windows.Forms.RichTextBox
    $SpellChecker = New-Object NetSpell.SpellChecker.Spelling
    $SpellChecker.Dictionary.DictionaryFolder = "$DictionaryDirectory"
    $SpellChecker.add_MisspelledWord({
    param($sender, $args)
    # Show message box
$result = [System.Windows.Forms.MessageBox]::Show(
        "Misspelled word: $($_.Word)" + [Environment]::NewLine,
        "Powershell Spell Check",
        [System.Windows.Forms.MessageBoxButtons]::YesNoCancel,
        [System.Windows.Forms.MessageBoxIcon]::Information
    )
    if ($result -eq [System.Windows.Forms.DialogResult]::Yes -and $_.Suggestions -ne $null -and $_.Suggestions.Count -gt 0) {
        # Replace with the first suggestion
        $start = $TextBox.GetFirstCharIndexFromLine($_.LineIndex) + $_.TextIndex
        $length = $_.Word.Length
        $TextBox.Select($start, $length)
        $TextBox.SelectedText = $_.Suggestions[0].ToString()
        #$TextBox.SelectedText = $_.Suggestions[0]
    }
})
$SpellChecker.add_EndOfText({
    param($sender, $args)
    # Update text
    $TextBox.Text = $SpellChecker.Text
    # Show message box
    [System.Windows.Forms.MessageBox]::Show("Spell check complete.", "Spell Check", [System.Windows.Forms.MessageBoxButtons]::OK, [System.Windows.Forms.MessageBoxIcon]::Information)
})
$SpellChecker.add_DoubledWord({
    param($sender, $args)
    # Update text
    $TextBox.Text = $SpellChecker.Text
    # Show message box
    [System.Windows.Forms.MessageBox]::Show("Doubled word: $($_.Word)", "Spell Check", [System.Windows.Forms.MessageBoxButtons]::OK, [System.Windows.Forms.MessageBoxIcon]::Information)
})
    # Create spell check window
    $Form = New-Object System.Windows.Forms.Form
    $Form.Text = "Spell Check"
    $Form.Size = New-Object System.Drawing.Size($Height, $Width)
    $TextBox = New-Object System.Windows.Forms.TextBox
    $TextBox.Multiline = $true
    $TextBox.ScrollBars = "Vertical"
    $TextBox.Dock = "Fill"
    $TextBox.Font = New-Object System.Drawing.Font("Arial", $fontSize)
    $TextBox.Text = get-content -Path "$Path"
    $Form.Controls.Add($TextBox)

    $Button = New-Object System.Windows.Forms.Button
    $Button.Text = "Spell Check"
    $Button.Dock = "Bottom"
    $Button.add_Click({
        # Start Spell Checking
        $SpellChecker.Text = $TextBox.Text
        $SpellChecker.SpellCheck()
    })
    $Form.Add_Shown({
        # Set the size of the form after it is shown
        $Form.Width = $Width
        $Form.Height = $Height
    })

    $Form.Controls.Add($Button)
    # Show the form
    $Form.ShowDialog() | Out-Null
    }
    End
    {
    $Form.add_FormClosed({
    # Clean up form resources
    $Form.Dispose()
    })
    }
}