API 简单介绍


  • 需要提供的参数

UserPrincipalName
Alias
DisplayName
Name
OrganizationalUnit
FirstName
LastName
Password

  • 脚本自身提供的参数

database

  • 脚本内容
    脚本名称: create-mailbox.ps1
Add-PSSnapin microsoft.exchange*

# Function to start the HTTP server
function Start-HttpListener {
    param (
        [string]$Prefix = "http://*:10087/"
    )

    $listener = New-Object System.Net.HttpListener
    $listener.Prefixes.Add($Prefix)
    $listener.Start()
    Write-Host "HTTP Server started at $Prefix."

    $user = "ldapwrite"
    $pwd= "ldappwd"  

    while ($listener.IsListening) {
        $context = $listener.GetContext()
        $request = $context.Request 
        $response =$context.Response
        $authHeader = $request.Headers["Authorization"]
        Write-Output $authheader 

        if (-not $authHeader -or -not $authHeader.StartsWith("Basic ")) {
            $response.StatusCode = 401
            $responseString = "Unauthorized"
            $buffer = [System.Text.Encoding]::UTF8.GetBytes($responseString)
            $response.ContentLength64 = $buffer.Length
            $response.OutputStream.Write($buffer,0,$buffer.Length)
            $response.OutputStream.Close()
        
        }

        # 解码用户名和密码并验证
        $encodedCredentials = $authHeader.Substring(6)
        #Write-Output $encodedCredentials
        $decodedCredentials = [System.Text.Encoding]::UTF8.GetString([System.Convert]::FromBase64String($encodedCredentials))
        #Write-Output $decodedCredentials
        $username, $password = $decodedCredentials.Split(":")
        Write-Output "$username , $password"

        if ($username -cne $user -or $password -cne $pwd) {
            $response.StatusCode = 401
            $responseString = "Unauthorized"
            $response.ContentType = "text/plain"
            $buffer = [System.Text.Encoding]::UTF8.GetBytes($responseString)
            $response.ContentLength64 = $buffer.Length
            $response.OutputStream.Write($buffer,0,$buffer.Length)
            $response.OutputStream.Close()      
        }

        $absolute_path = $request.Url.AbsolutePath
        if ($request.HttpMethod -eq "POST" -and $request.Url.AbsolutePath -eq "/api/create-mailbox") {      
            $reader = New-Object System.IO.StreamReader($request.InputStream)
            $postData = $reader.ReadToEnd()
            $reader.Close()

            # Parse JSON body
            $data = $postData | ConvertFrom-Json
            Write-Output $data
            
            # Create mailbox
            $mailbox = get-mailbox -Identity $data.Alias
            if(!$mailbox){ 
                $pass = ConvertTo-SecureString $data.Password  -AsPlainText -Force
                $database = (Get-MailboxDatabase).name | Get-Random
                $result = New-Mailbox -UserPrincipalName $data.UserPrincipalName -Alias $data.Alias -DisplayName $data.DisplayName -Password $pass -OrganizationalUnit $data.OU -Database $database -Name $data.Name -FirstName $data.FirstName -LastName $data.LastName -ResetPasswordOnNextLogon $true 
                $mailbox1 = get-mailbox -Identity $data.Alias
            # Send response
                if($mailbox1){
                    $response.ContentType = "application/json"
                    $response.StatusCode = 200
                    $response.StatusDescription = "OK"
                    $responseBody = "Create Sucess!" | ConvertTo-Json
                    $buffer = [System.Text.Encoding]::UTF8.GetBytes($responseBody)
                    $response.ContentLength64 = $buffer.Length
                    $response.OutputStream.Write($buffer, 0, $buffer.Length)
                    $response.OutputStream.Close()
                 }
             }else{
                $response.ContentType = "application/json"
                $response.StatusCode = 409
                $response.StatusDescription = "Mailbox already exist!"
                $responseBody = "Mailbox already exist!" | ConvertTo-Json
                $buffer = [System.Text.Encoding]::UTF8.GetBytes($responseBody)
                $response.ContentLength64 = $buffer.Length
                $response.OutputStream.Write($buffer, 0, $buffer.Length)
                $response.OutputStream.Close()     
             }
             
        } else {
            # Send 404 response
            $response.StatusCode = 404
            $response.ContentType = "application/json"
            $response.StatusDescription = "Page Not Found"
            $responseBody = "Page Not Found" |ConvertTo-Json
            $buffer = [System.Text.Encoding]::UTF8.GetBytes($responseBody)
            $response.ContentLength64 = $buffer.Length
            $response.OutputStream.Write($buffer, 0, $buffer.Length)
            $response.OutputStream.Close()
        }
   }

    $listener.Stop()
}

# Start the HTTP listener
Start-HttpListener -Prefix "http://*:10087/"

  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.
  • 18.
  • 19.
  • 20.
  • 21.
  • 22.
  • 23.
  • 24.
  • 25.
  • 26.
  • 27.
  • 28.
  • 29.
  • 30.
  • 31.
  • 32.
  • 33.
  • 34.
  • 35.
  • 36.
  • 37.
  • 38.
  • 39.
  • 40.
  • 41.
  • 42.
  • 43.
  • 44.
  • 45.
  • 46.
  • 47.
  • 48.
  • 49.
  • 50.
  • 51.
  • 52.
  • 53.
  • 54.
  • 55.
  • 56.
  • 57.
  • 58.
  • 59.
  • 60.
  • 61.
  • 62.
  • 63.
  • 64.
  • 65.
  • 66.
  • 67.
  • 68.
  • 69.
  • 70.
  • 71.
  • 72.
  • 73.
  • 74.
  • 75.
  • 76.
  • 77.
  • 78.
  • 79.
  • 80.
  • 81.
  • 82.
  • 83.
  • 84.
  • 85.
  • 86.
  • 87.
  • 88.
  • 89.
  • 90.
  • 91.
  • 92.
  • 93.
  • 94.
  • 95.
  • 96.
  • 97.
  • 98.
  • 99.
  • 100.
  • 101.
  • 102.
  • 103.
  • 104.
  • 105.
  • 106.
  • 107.
  • 108.
  • 109.
  • 测试效果
    写一个创建Exchange邮箱的API_powershell api