HOW TO: Using WebDAV from PowerShell 1.0


I was just trying my hands on PowerShell and wanted to try using WebDAV from it. I wrote a small sample that searches the inbox of a user for unread mails and lists out the Href and the Subject of the email.

Create a .PS1 file as below:

#Change the Server name and Credentials
[System.String]$serverName ="EX200701"
[System.String]$UserName="Administrator"
[System.String]$Password = "TestLab!"
[System.String]$UserDomain ="mycompany"

[System.Net.HttpWebRequest]$Request
[System.Net.WebResponse]$Response
[System.Net.CredentialCache]$MyCredentialCache
[System.IO.Stream]$RequestStream
[System.IO.Stream]$ResponseStream
[System.Xml.XmlDocument]$ResponseXmlDoc
[System.Xml.XmlNodeList]$SubjectNodeList
[System.Xml.XmlNodeList]$HrefNodeList
[System.String]$strQuery
[byte[]]$bytes

write-host("Accessing Inbox for User:" + $UserName + " using URI " + $URI +"..") -ForeGroundColor Yellow
$URI = "http://" + $serverName + "/exchange/" + $UserName + "/Inbox/"
$Request = [System.Net.HttpWebRequest]::Create($URI)

#Set the Credentials
write-host("Setting the Credentials now..") -ForeGroundColor Yellow
[System.Net.NetworkCredential]$NetworkCredential = New-Object System.Net.NetworkCredential($UserName, $Password, $UserDomain)
$MyCredentialCache = New-Object System.Net.CredentialCache
$MyCredentialCache.Add($URI, "Basic", $NetworkCredential)
$Request.Credentials = $MyCredentialCache

#Set the headers.    
write-host("Setting the Headers now..") -ForeGroundColor Yellow
$Request.ContentType = "text/xml"
$Request.Method = "SEARCH"
$Request.Timeout = 300000
    
$strQuery = "<?xml version=""1.0""?><g:searchrequest xmlns:g=""DAV:"">"
$strQuery = $strQuery +    "<g:sql>SELECT ""urn:schemas:httpmail:subject"" FROM Scope('SHALLOW TRAVERSAL OF """ + $URI + """') WHERE"
$strQuery = $strQuery +    " ""urn:schemas:httpmail:read"" = false</g:sql></g:searchrequest>"

$bytes = [System.Text.Encoding]::UTF8.GetBytes($strQuery)
$Request.ContentLength = $bytes.Length
$RequestStream = $Request.GetRequestStream()
$RequestStream.Write($bytes, 0, $bytes.Length)
$RequestStream.Close()
$Response = $Request.GetResponse()

#Check the Status
[System.int32]$intStatusCode = $Response.StatusCode

if ($intStatusCode -ge 200 -and $intStatusCode -lt 300)
{
    $ResponseStream = $Response.GetResponseStream()
    [System.IO.StreamReader]$streamReader = New-Object System.IO.StreamReader $ResponseStream
    [System.String]$strResponse = $streamReader.ReadToEnd()
    $ResponseStream.Close()
    $ResponseXmlDoc = New-Object System.Xml.XmlDocument
    $ResponseXmlDoc.LoadXml($strResponse)
    $HrefNodeList = $ResponseXmlDoc.GetElementsByTagName("a:href")
    $SubjectNodeList = $ResponseXmlDoc.GetElementsByTagName("d:subject")
        
    if($HrefNodeList.Count -gt 0)
    {
        for($i = 0; $i -lt $HrefNodeList.Count; $i++)
        {
            #Write Out the Href and the Subject of the mail
            write-host("HREF:" + $HrefNodeList.Item($i).psbase.InnerText) -ForeGroundColor Yellow
            write-host("Subject: " + $SubjectNodeList.Item($i).psbase.InnerText) -ForeGroundColor Yellow
            write-host("")
        }
    }
    
}

$Response.Close()

To Run the script:

1)Open the Windows PowerShell Console

2)Navigate to the location where you have stored the script file.

3)Type in .\ScriptName.PS1 and hit enter to execute the script.

Comments (0)

Skip to main content