This discussion has been locked.
You can no longer post new replies to this discussion. If you have a question you can start a new discussion

Export mailbox of deprovisioned user in ARS 7.x

In previous versions of ARS v6.x I've been able run the following script to export an Exchange mailbox to a .pst file as part of a deprovisioning policy:

function onDeprovision($Request) {

# Check target object class
if ($Request.Class -ne "user") { return; }

# Get user information
$userLogon = $dirObj.Get("sAMAccountName")
if (($userLogon -eq $null) -or ($userLogon -eq "")) { return; }

$userSMTP = $dirObj.Get("mail")
if (($userSMTP -eq $null) -or ($userSMTP -eq "")) { return; }

$userGN = $dirObj.Get("givenName")
if (($userGN -eq $null) -or ($userGN -eq "")) { return; }

$userSN = $dirObj.Get("sn")
if (($userSN -eq $null) -or ($userSN -eq "")) { return; }

$dstPath = "\\myfileserver.acme.com\Deprovisioned-Users" + "\" + $userGN + "." + $userSN
$fileName = $userLogon + "_mbox.pst"
$jobName = $userLogon + "_mbox-export"

# Perform path testing
if (Test-Path -Path "$dstPath\$fileName") { return }
if (-not (Test-Path -Path $dstPath)) { New-Item -Path $dstPath -ItemType Directory -Force -Confirm:$false }

# Add PowerShell snapin for Exchange 2010 management
Add-PSSnapin -Name "Microsoft.Exchange.Management.PowerShell.E2010" -ErrorAction SilentlyContinue

# Submit Exchange Mailbox Export Request
New-MailboxExportRequest -Mailbox $userSMTP -FilePath "$dstPath\$fileName" -Name $jobName
} # End function onDeprovision

This process does not work in ARS v7.x which results in the following error:

Administrative Policy returned error. At line: 18 char:5. Exception calling "Get" with "1" argument(s): "The directory property cannot be found in the cache."

The error seems pretty explicit but for some reason I haven't been able to get this to work. I'm obviously doing something (or many things) wrong, any recommendations?

 

Secondary question: Does it make more sense to use a workflow for this?

Parents
  • So I've gotten a bit further. Here's the updated script:


    # Begin Script ----------------------------------------------------------------
    # Declare ARS event handler
    function onDeprovision($Request) {
    # Check target object class
    if ($Request.Class -ne 'User') { exit }

    # Get user information
    $userLogon = $Request.OriginalUserAccount.Get("sAMAccountName")
    if (($userLogon -eq $null) -or ($userLogon -eq "")) { return }

    $userGN = $Request.OriginalUserAccount.Get("givenName")
    if (($userGN -eq $null) -or ($userGN -eq "")) { return }

    $userSN = $Request.OriginalUserAccount.Get("sn")
    if (($userSN -eq $null) -or ($userSN -eq "")) { return }

    $dstPath = "\\fileserver.acme.com\Deprovisioned-Users\${userGN}.${userSN}"
    $fileName = "${userLogon}_mbox.pst"
    $jobName = "${userLogon}_ars-mbox-export"

    # Perform path testing
    if ((Test-Path -Path $dstPath) -eq $false) { New-Item -Path $dstPath -ItemType Directory -Force -Confirm:$false }
    if ((Test-Path -Path "${dstPath}\${fileName}") -eq $true) { throw "Exported mailbox .pst file already exists." }

    # Create PSSession to Exchange 2010 server
    $Session = New-PSSession -ConfigurationName Microsoft.Exchange -ConnectionUri "mailserver.acme.com/.../" -Authentication Kerberos
    Import-PSSession $Session

    # Submit Exchange Mailbox Export Request
    New-MailboxExportRequest -Mailbox $userLogon -FilePath "${dstPath}\${fileName}" -Name $jobName

    # Close the remote powershell session
    Remove-PSSession $Session
    } # End function onDeprovision
    # End Script ------------------------------------------------------------------

     

    No error is thrown. The file server directory *does* get created but the mailbox export request does *not* get created.

Reply
  • So I've gotten a bit further. Here's the updated script:


    # Begin Script ----------------------------------------------------------------
    # Declare ARS event handler
    function onDeprovision($Request) {
    # Check target object class
    if ($Request.Class -ne 'User') { exit }

    # Get user information
    $userLogon = $Request.OriginalUserAccount.Get("sAMAccountName")
    if (($userLogon -eq $null) -or ($userLogon -eq "")) { return }

    $userGN = $Request.OriginalUserAccount.Get("givenName")
    if (($userGN -eq $null) -or ($userGN -eq "")) { return }

    $userSN = $Request.OriginalUserAccount.Get("sn")
    if (($userSN -eq $null) -or ($userSN -eq "")) { return }

    $dstPath = "\\fileserver.acme.com\Deprovisioned-Users\${userGN}.${userSN}"
    $fileName = "${userLogon}_mbox.pst"
    $jobName = "${userLogon}_ars-mbox-export"

    # Perform path testing
    if ((Test-Path -Path $dstPath) -eq $false) { New-Item -Path $dstPath -ItemType Directory -Force -Confirm:$false }
    if ((Test-Path -Path "${dstPath}\${fileName}") -eq $true) { throw "Exported mailbox .pst file already exists." }

    # Create PSSession to Exchange 2010 server
    $Session = New-PSSession -ConfigurationName Microsoft.Exchange -ConnectionUri "mailserver.acme.com/.../" -Authentication Kerberos
    Import-PSSession $Session

    # Submit Exchange Mailbox Export Request
    New-MailboxExportRequest -Mailbox $userLogon -FilePath "${dstPath}\${fileName}" -Name $jobName

    # Close the remote powershell session
    Remove-PSSession $Session
    } # End function onDeprovision
    # End Script ------------------------------------------------------------------

     

    No error is thrown. The file server directory *does* get created but the mailbox export request does *not* get created.

Children
No Data