rossy Posted July 20, 2018 Share Posted July 20, 2018 I'm trying to create an Exchange Mailbox for an existing user through AutoIT. I have Exchange Management Shell installed on my server and can run the following command fine through it to enable the mailbox: Enable-Mailbox -Identity Username -Database MyDatabase Is there any way of doing this through AutoIT? Thanks in advance! Link to comment Share on other sites More sharing options...
water Posted July 20, 2018 Share Posted July 20, 2018 Sure. IIRC I posted an example how AutoIt calls Powershell to create a Mailbox. Should be easy to find My UDFs and Tutorials: Spoiler UDFs: Active Directory (NEW 2024-07-28 - Version 1.6.3.0) - Download - General Help & Support - Example Scripts - Wiki ExcelChart (2017-07-21 - Version 0.4.0.1) - Download - General Help & Support - Example Scripts OutlookEX (2021-11-16 - Version 1.7.0.0) - Download - General Help & Support - Example Scripts - Wiki OutlookEX_GUI (2021-04-13 - Version 1.4.0.0) - Download Outlook Tools (2019-07-22 - Version 0.6.0.0) - Download - General Help & Support - Wiki PowerPoint (2021-08-31 - Version 1.5.0.0) - Download - General Help & Support - Example Scripts - Wiki Task Scheduler (2022-07-28 - Version 1.6.0.1) - Download - General Help & Support - Wiki Standard UDFs: Excel - Example Scripts - Wiki Word - Wiki Tutorials: ADO - Wiki WebDriver - Wiki Link to comment Share on other sites More sharing options...
FrancescoDiMuro Posted July 20, 2018 Share Posted July 20, 2018 Hi @rossy, and welcome to the AutoIt forum Yes, you can do it. Take a look at Run() functions in the Help file. Best Regards. Click here to see my signature: Spoiler ALWAYS GOOD TO READ: Forum Rules Forum Etiquette Link to comment Share on other sites More sharing options...
rossy Posted July 20, 2018 Author Share Posted July 20, 2018 24 minutes ago, water said: Sure. IIRC I posted an example how AutoIt calls Powershell to create a Mailbox. Should be easy to find Thanks water. I've got it now and it works a treat Also thank you very much for creating the AD.au3 UDF, I've been using it extensively for automating the creating of users in AD. Could the function you posted here be integrated into the _AD_CreateMailbox function? Link to comment Share on other sites More sharing options...
water Posted July 20, 2018 Share Posted July 20, 2018 Maybe create a new function _AD_CreateMailboxPS? My UDFs and Tutorials: Spoiler UDFs: Active Directory (NEW 2024-07-28 - Version 1.6.3.0) - Download - General Help & Support - Example Scripts - Wiki ExcelChart (2017-07-21 - Version 0.4.0.1) - Download - General Help & Support - Example Scripts OutlookEX (2021-11-16 - Version 1.7.0.0) - Download - General Help & Support - Example Scripts - Wiki OutlookEX_GUI (2021-04-13 - Version 1.4.0.0) - Download Outlook Tools (2019-07-22 - Version 0.6.0.0) - Download - General Help & Support - Wiki PowerPoint (2021-08-31 - Version 1.5.0.0) - Download - General Help & Support - Example Scripts - Wiki Task Scheduler (2022-07-28 - Version 1.6.0.1) - Download - General Help & Support - Wiki Standard UDFs: Excel - Example Scripts - Wiki Word - Wiki Tutorials: ADO - Wiki WebDriver - Wiki Link to comment Share on other sites More sharing options...
rossy Posted July 21, 2018 Author Share Posted July 21, 2018 On 20/07/2018 at 2:32 PM, water said: Maybe create a new function _AD_CreateMailboxPS? Yes, that would be useful for future use. Link to comment Share on other sites More sharing options...
water Posted July 24, 2018 Share Posted July 24, 2018 Such a function would set @error to tell if the PowerShell command was successful or not. The Powershell output (STDOUT or STDERR) would be returned as a string. Example: Local $sResult = Test() If @error Then $iError = @error _ArrayDisplay(StringSplit($sResult, @CRLF, $STR_ENTIRESPLIT), "Error " & $iError & " was returned!") Else _ArrayDisplay(StringSplit($sResult, @CRLF, $STR_ENTIRESPLIT), "Successful!") EndIf Func Test() Local $sCMD = "Powershell -Command -", $sSTDOUT = "", $sSTDERR = "", $bError = False $iPID = Run($sCMD, @SystemDir, @SW_MAXIMIZE, $STDIN_CHILD + $STDOUT_CHILD + $STDERR_CHILD) If @error Then Return SetError(2, 0, "") StdinWrite($iPID, "Get-ChildItem C:\TEMP -directory") If @error Then Return SetError(3, 0, "") StdinWrite($iPID) ; Process STDOUT While 1 $sOutput = StdoutRead($iPID) If @error Then ExitLoop If $sOutput <> "" Then $sSTDOUT = $sSTDOUT & $sOutput WEnd ; Process STDERR While 1 $sOutput = StderrRead($iPID) If @error Then ExitLoop If $sOutput <> "" Then $sSTDERR = $sSTDERR & $sOutput $bError = True WEnd If $bError Then Return SetError(1, 0, $sSTDERR) Else Return $sSTDOUT EndIf EndFunc ;==>Test Which parameters would be needed for_AD_CreateMailboxPS? I'm thinking of User to create the mailbox for URI of the Exchange server where to create the mailbox Optional: Alias of the mailbox Optional: Authentication Method (Kerberos ...) Optional: Specify all other needed PS parameters What do you think? My UDFs and Tutorials: Spoiler UDFs: Active Directory (NEW 2024-07-28 - Version 1.6.3.0) - Download - General Help & Support - Example Scripts - Wiki ExcelChart (2017-07-21 - Version 0.4.0.1) - Download - General Help & Support - Example Scripts OutlookEX (2021-11-16 - Version 1.7.0.0) - Download - General Help & Support - Example Scripts - Wiki OutlookEX_GUI (2021-04-13 - Version 1.4.0.0) - Download Outlook Tools (2019-07-22 - Version 0.6.0.0) - Download - General Help & Support - Wiki PowerPoint (2021-08-31 - Version 1.5.0.0) - Download - General Help & Support - Example Scripts - Wiki Task Scheduler (2022-07-28 - Version 1.6.0.1) - Download - General Help & Support - Wiki Standard UDFs: Excel - Example Scripts - Wiki Word - Wiki Tutorials: ADO - Wiki WebDriver - Wiki Link to comment Share on other sites More sharing options...
rossy Posted August 6, 2018 Author Share Posted August 6, 2018 On 24/07/2018 at 5:31 PM, water said: Such a function would set @error to tell if the PowerShell command was successful or not. The Powershell output (STDOUT or STDERR) would be returned as a string. Example: Local $sResult = Test() If @error Then $iError = @error _ArrayDisplay(StringSplit($sResult, @CRLF, $STR_ENTIRESPLIT), "Error " & $iError & " was returned!") Else _ArrayDisplay(StringSplit($sResult, @CRLF, $STR_ENTIRESPLIT), "Successful!") EndIf Func Test() Local $sCMD = "Powershell -Command -", $sSTDOUT = "", $sSTDERR = "", $bError = False $iPID = Run($sCMD, @SystemDir, @SW_MAXIMIZE, $STDIN_CHILD + $STDOUT_CHILD + $STDERR_CHILD) If @error Then Return SetError(2, 0, "") StdinWrite($iPID, "Get-ChildItem C:\TEMP -directory") If @error Then Return SetError(3, 0, "") StdinWrite($iPID) ; Process STDOUT While 1 $sOutput = StdoutRead($iPID) If @error Then ExitLoop If $sOutput <> "" Then $sSTDOUT = $sSTDOUT & $sOutput WEnd ; Process STDERR While 1 $sOutput = StderrRead($iPID) If @error Then ExitLoop If $sOutput <> "" Then $sSTDERR = $sSTDERR & $sOutput $bError = True WEnd If $bError Then Return SetError(1, 0, $sSTDERR) Else Return $sSTDOUT EndIf EndFunc ;==>Test Which parameters would be needed for_AD_CreateMailboxPS? I'm thinking of User to create the mailbox for URI of the Exchange server where to create the mailbox Optional: Alias of the mailbox Optional: Authentication Method (Kerberos ...) Optional: Specify all other needed PS parameters What do you think? That sounds great. I'd also have an optional parameter for the database, which can be added to the Powershell script as -Database. What is the "Alias of the mailbox" parameter? Useful failures returned to @error could be similar to the original _AD_CreateMailbox function: 1 - $sUser does not exist 2 - $sUser already has a mailbox Thanks for your help Link to comment Share on other sites More sharing options...
water Posted August 7, 2018 Share Posted August 7, 2018 (edited) Version to play with The function mainly uses two PowerShell commands to create the mailbox: Session and Enable-Mailbox. I added two optional parameters to _AD_CreateMailboxPS which let you specify additional parameters for this PS commands. expandcollapse popup#include <AD.au3> _AD_Open() Local $sUser = "username-goes-here" ; <== MODIFY Local $sURI = "http://YourExchangeServerNameGoesHere.CompanyName.com" ; <== MODIFY Local $vResult = _AD_CreateMailboxPS($sUser, $sURI) $iError = @error $iExtended = @extended If $iError Then If IsString($vResult) Then MsgBox(0, "Error!", "_AD_CreateMailboxPS returned @error = " & $iError & ", @extended = " & $iExtended) Else _ArrayDisplay($vResult, "_AD_CreateMailboxPS returned @error = " & $iError & ", @extended = " & $iExtended) EndIf Else _ArrayDisplay($vResult, "Successful!") EndIf _AD_Close() ; #FUNCTION#==================================================================================================================== ; Name...........: _AD_CreateMailboxPS ; Description ...: Creates a mailbox for a user using PowerShell ; Syntax.........: _AD_CreateMailboxPS($sUser, $sURI[, $sSession = Default[, $sMailbox] = Default]) ; Parameters ....: $sUser - User account to add mailbox to ; $sURI - Specifies a URI that defines the connection endpoint for the session. The URI must be fully qualified. ; Example: http://YourExchangeServerNameGoesHere.CompanyName.com ; $sSession - Optional: One or multiple additional parameters for the PowerShell "Session" command e.g. " -Authentication Kerberos" ; $sMailbox - Optional: One or multiple additional parameters for the PowerShell "Enable-Mailbox" command (see parameter $sSession) ; Return values .: Success - Zero based one-dimensional array holding the StdOut messages written by PowerShellString ; Failure - "", sets @error to: ; |1 - $sUser does not exist ; |2 - $sUser already has a mailbox. Property HomeMDB is already defined ; |3 - $sUser is invalid (empty) ; |4 - $sURI is invalid (empty) ; |5 - Run returned an error (PowerShell could not be started). @extended is set to the @error returned by Run ; |6 - Writing to StdIn returned an error. @extended is set to the @error returned by Run ; Failure - Zero based one-dimensional array holding the StdErr messages written by PowerShell, sets error to: ; |7 - PowerShell has written some error messages to StdErr. ; Author ........: water ; Modified.......: ; Remarks .......: ; Related .......: ; Link ..........: ; Example .......: Yes ; =============================================================================================================================== Func _AD_CreateMailboxPS($sUser, $sURI, $sSession = Default, $sMailbox = Default) Local $aResult If StringStripWS($sUser, $STR_STRIPALL) = "" Then Return SetError(3, 0, "") If StringStripWS($sURI, $STR_STRIPALL) = "" Then Return SetError(4, 0, "") If $sSession = Default Then $sSession = "" If $sMailbox = Default Then $sMailbox = "" If Not _AD_ObjectExists($sUser) Then Return SetError(1, 0, "") Local $sProperty = "sAMAccountName" If StringMid($sUser, 3, 1) = "=" Then $sProperty = "distinguishedName" ; FQDN provided $__oAD_Command.CommandText = "<LDAP://" & $sAD_HostServer & "/" & $sAD_DNSDomain & ">;(" & $sProperty & "=" & $sUser & ");ADsPath;subtree" Local $oRecordSet = $__oAD_Command.Execute ; Retrieve the ADsPath for the object Local $sLDAPEntry = $oRecordSet.fields(0).Value Local $oUser = __AD_ObjGet($sLDAPEntry) ; Retrieve the COM Object for the object If $oUser.HomeMDB <> "" Then Return SetError(2, 0, "") Local $sCMD = "Powershell -Command -", $sSTDOUT = "", $sSTDERR = "", $bError = False $iPID = Run($sCMD, @SystemDir, @SW_MAXIMIZE, $STDIN_CHILD + $STDOUT_CHILD + $STDERR_CHILD) If $iPID = 0 Or @error Then Return SetError(5, @error, "") StdinWrite($iPID, "$Session = New-PSSession -ConfigurationName Microsoft.Exchange -ConnectionUri " & $sURI & " " & $sSession) If @error Then Return SetError(6, @error, "") StdinWrite($iPID, "Import-PSSession $Session") StdinWrite($iPID, "Enable-Mailbox -Identity " & $sUser & " " & $sMailbox) StdinWrite($iPID, "Remove-PSSession $Session") StdinWrite($iPID) ; Process STDOUT While 1 $sOutput = StdoutRead($iPID) If @error Then ExitLoop If $sOutput <> "" Then $sSTDOUT = $sSTDOUT & $sOutput WEnd ; Process STDERR While 1 $sOutput = StderrRead($iPID) If @error Then ExitLoop If $sOutput <> "" Then $sSTDERR = $sSTDERR & $sOutput $bError = True WEnd If $bError Then $aResult = StringSplit($sSTDERR, @CRLF, $STR_ENTIRESPLIT + $STR_NOCOUNT) Return SetError(7, 0, $aResult) Else $aResult = StringSplit($sSTDOUT, @CRLF, $STR_ENTIRESPLIT + $STR_NOCOUNT) Return $aResult EndIf EndFunc ;==>_AD_CreateMailboxPS Edited August 7, 2018 by water My UDFs and Tutorials: Spoiler UDFs: Active Directory (NEW 2024-07-28 - Version 1.6.3.0) - Download - General Help & Support - Example Scripts - Wiki ExcelChart (2017-07-21 - Version 0.4.0.1) - Download - General Help & Support - Example Scripts OutlookEX (2021-11-16 - Version 1.7.0.0) - Download - General Help & Support - Example Scripts - Wiki OutlookEX_GUI (2021-04-13 - Version 1.4.0.0) - Download Outlook Tools (2019-07-22 - Version 0.6.0.0) - Download - General Help & Support - Wiki PowerPoint (2021-08-31 - Version 1.5.0.0) - Download - General Help & Support - Example Scripts - Wiki Task Scheduler (2022-07-28 - Version 1.6.0.1) - Download - General Help & Support - Wiki Standard UDFs: Excel - Example Scripts - Wiki Word - Wiki Tutorials: ADO - Wiki WebDriver - Wiki Link to comment Share on other sites More sharing options...
rossy Posted August 7, 2018 Author Share Posted August 7, 2018 I tried the script above and got the attached error, checked Exchange and the mailbox definitely wasn't created, any ideas? Link to comment Share on other sites More sharing options...
water Posted August 7, 2018 Share Posted August 7, 2018 Unfortunately I'm not too familiar with PS. Further investigation is needed My UDFs and Tutorials: Spoiler UDFs: Active Directory (NEW 2024-07-28 - Version 1.6.3.0) - Download - General Help & Support - Example Scripts - Wiki ExcelChart (2017-07-21 - Version 0.4.0.1) - Download - General Help & Support - Example Scripts OutlookEX (2021-11-16 - Version 1.7.0.0) - Download - General Help & Support - Example Scripts - Wiki OutlookEX_GUI (2021-04-13 - Version 1.4.0.0) - Download Outlook Tools (2019-07-22 - Version 0.6.0.0) - Download - General Help & Support - Wiki PowerPoint (2021-08-31 - Version 1.5.0.0) - Download - General Help & Support - Example Scripts - Wiki Task Scheduler (2022-07-28 - Version 1.6.0.1) - Download - General Help & Support - Wiki Standard UDFs: Excel - Example Scripts - Wiki Word - Wiki Tutorials: ADO - Wiki WebDriver - Wiki Link to comment Share on other sites More sharing options...
water Posted August 23, 2018 Share Posted August 23, 2018 Next try expandcollapse popup#include <AD.au3> Local $vResult = _AD_CreateMailboxPS("TestUser", "http://YourExchangeServerNameGoesHere.CompanyName.com") If @error Then If IsString($vResult) Then MsgBox(0, "Error!", "_AD_CreateMailboxPS returned @error = " & @error & ", @extended = " & @extended) Else _ArrayDisplay($vResult, "_AD_CreateMailboxPS returned @error = " & @error & ", @extended = " & @extended) EndIf Else _ArrayDisplay($vResult, "Successful!") EndIf ; #FUNCTION#==================================================================================================================== ; Name...........: _AD_CreateMailboxPS ; Description ...: Creates a mailbox for a user using PowerShell ; Syntax.........: _AD_CreateMailboxPS($sUser, $sURI[, $sSessionParam = Default[, $sMailboxParam = Default]]) ; Parameters ....: $sUser - User account (SamAccountName or FQDN) for which you want to create the mailbox ; $sURI - Specifies a URI that defines the connection endpoint for the session. The URI must be fully qualified. ; Example: http://YourExchangeServerNameGoesHere.CompanyName.com ; $sSessionParam - Optional: One or multiple additional parameters for the PowerShell "Session" command e.g. " -Authentication Kerberos" ; $sMailboxParam - Optional: One or multiple additional parameters for the PowerShell "Enable-Mailbox" command (see parameter $sSessionParam) ; Return values .: Success - Zero based one-dimensional array holding the StdOut messages written by PowerShellString ; Failure - "", sets @error to: ; |1 - $sUser does not exist ; |2 - $sUser already has a mailbox ; |3 - $sUser is invalid (empty) ; |4 - $sURI is invalid (empty) ; |5 - Run returned an error (PowerShell could not be started). @extended is set to the @error returned by Run ; |6 - Writing to StdIn returned an error. @extended is set to the @error returned by StdinWrite ; Failure - Zero based one-dimensional array holding the StdErr messages written by PowerShell, sets error to: ; |7 - PowerShell has written some error messages to StdErr. ; Author ........: water ; Modified.......: ; Remarks .......: ; Related .......: ; Link ..........: ; Example .......: Yes ; =============================================================================================================================== Func _AD_CreateMailboxPS($sUser, $sURI, $sSessionParam = Default, $sMailboxParam = Default) Local $aResult If StringStripWS($sUser, $STR_STRIPALL) = "" Then Return SetError(3, 0, "") If StringStripWS($sURI, $STR_STRIPALL) = "" Then Return SetError(4, 0, "") If $sSessionParam = Default Then $sSessionParam = "" If $sMailboxParam = Default Then $sMailboxParam = "" If Not _AD_ObjectExists($sUser) Then Return SetError(1, 0, "") Local $sProperty = "sAMAccountName" If StringMid($sUser, 3, 1) = "=" Then $sProperty = "distinguishedName" ; FQDN provided $__oAD_Command.CommandText = "<LDAP://" & $sAD_HostServer & "/" & $sAD_DNSDomain & ">;(" & $sProperty & "=" & $sUser & ");ADsPath;subtree" Local $oRecordSet = $__oAD_Command.Execute ; Retrieve the ADsPath for the object Local $sLDAPEntry = $oRecordSet.fields(0).Value Local $oUser = __AD_ObjGet($sLDAPEntry) ; Retrieve the COM Object for the object If $oUser.HomeMDB <> "" Then Return SetError(2, 0, "") Local $sCMD = "Powershell -Command -", $sSTDOUT = "", $sSTDERR = "", $bError = False $iPID = Run($sCMD, @SystemDir, @SW_MAXIMIZE, $STDIN_CHILD + $STDOUT_CHILD + $STDERR_CHILD) If $iPID = 0 Or @error Then Return SetError(5, @error, "") $sCMD = "$Session = New-PSSession -ConfigurationName Microsoft.Exchange -ConnectionUri " & $sURI & " " & $sSessionParam & _ ";Import-PSSession $Session" & _ ";Enable-Mailbox -Identity " & $sUser & " " & $sMailboxParam & _ "Remove-PSSession $Session" StdinWrite($iPID, $sCMD) If @error Then Return SetError(6, @error, "") StdinWrite($iPID) ; Process STDOUT While 1 $sOutput = StdoutRead($iPID) If @error Then ExitLoop If $sOutput <> "" Then $sSTDOUT = $sSTDOUT & $sOutput WEnd ; Process STDERR While 1 $sOutput = StderrRead($iPID) If @error Then ExitLoop If $sOutput <> "" Then $sSTDERR = $sSTDERR & $sOutput $bError = True WEnd If $bError Then $aResult = StringSplit($sSTDERR, @CRLF, $STR_ENTIRESPLIT + $STR_NOCOUNT) Return SetError(7, 0, $aResult) Else $aResult = StringSplit($sSTDOUT, @CRLF, $STR_ENTIRESPLIT + $STR_NOCOUNT) Return $aResult EndIf EndFunc ;==>_AD_CreateMailboxPS My UDFs and Tutorials: Spoiler UDFs: Active Directory (NEW 2024-07-28 - Version 1.6.3.0) - Download - General Help & Support - Example Scripts - Wiki ExcelChart (2017-07-21 - Version 0.4.0.1) - Download - General Help & Support - Example Scripts OutlookEX (2021-11-16 - Version 1.7.0.0) - Download - General Help & Support - Example Scripts - Wiki OutlookEX_GUI (2021-04-13 - Version 1.4.0.0) - Download Outlook Tools (2019-07-22 - Version 0.6.0.0) - Download - General Help & Support - Wiki PowerPoint (2021-08-31 - Version 1.5.0.0) - Download - General Help & Support - Example Scripts - Wiki Task Scheduler (2022-07-28 - Version 1.6.0.1) - Download - General Help & Support - Wiki Standard UDFs: Excel - Example Scripts - Wiki Word - Wiki Tutorials: ADO - Wiki WebDriver - Wiki Link to comment Share on other sites More sharing options...
rossy Posted September 1, 2018 Author Share Posted September 1, 2018 (edited) This is what I got when I ran your above code: "C:\Program Files (x86)\AutoIt3\Include\AD.au3" (592) : ==> Variable must be of type "Object".: $__oAD_Command.CommandText = "<LDAP://" & $sAD_HostServer & "/" & $sAD_DNSDomain & ">;(" & $sProperty & "=" & $sObject & ");ADsPath;subtree" $__oAD_Command^ ERROR Edited September 1, 2018 by rossy Link to comment Share on other sites More sharing options...
water Posted September 1, 2018 Share Posted September 1, 2018 _AD_Open is missing in my example 😬 My UDFs and Tutorials: Spoiler UDFs: Active Directory (NEW 2024-07-28 - Version 1.6.3.0) - Download - General Help & Support - Example Scripts - Wiki ExcelChart (2017-07-21 - Version 0.4.0.1) - Download - General Help & Support - Example Scripts OutlookEX (2021-11-16 - Version 1.7.0.0) - Download - General Help & Support - Example Scripts - Wiki OutlookEX_GUI (2021-04-13 - Version 1.4.0.0) - Download Outlook Tools (2019-07-22 - Version 0.6.0.0) - Download - General Help & Support - Wiki PowerPoint (2021-08-31 - Version 1.5.0.0) - Download - General Help & Support - Example Scripts - Wiki Task Scheduler (2022-07-28 - Version 1.6.0.1) - Download - General Help & Support - Wiki Standard UDFs: Excel - Example Scripts - Wiki Word - Wiki Tutorials: ADO - Wiki WebDriver - Wiki Link to comment Share on other sites More sharing options...
rossy Posted September 1, 2018 Author Share Posted September 1, 2018 12 hours ago, water said: _AD_Open is missing in my example 😬 Glad I'm not the only one that misses it! It's working great thanks, I just had to change one line to get it to work, it was missing a semicolon. ";Remove-PSSession $Session" I tried some false data, for example users that didn't exist or users that already had a mailbox, which always returns this: _AD_CreateMailboxPS returned @error = 0, @extended = 0. Thanks again for all your help with this. Link to comment Share on other sites More sharing options...
water Posted September 1, 2018 Share Posted September 1, 2018 A user that doesn't exist should return @error = 1 as this is checked in the function. What is the return value (array of messages) when you test users that don't exist or users that already have a mailbox? My UDFs and Tutorials: Spoiler UDFs: Active Directory (NEW 2024-07-28 - Version 1.6.3.0) - Download - General Help & Support - Example Scripts - Wiki ExcelChart (2017-07-21 - Version 0.4.0.1) - Download - General Help & Support - Example Scripts OutlookEX (2021-11-16 - Version 1.7.0.0) - Download - General Help & Support - Example Scripts - Wiki OutlookEX_GUI (2021-04-13 - Version 1.4.0.0) - Download Outlook Tools (2019-07-22 - Version 0.6.0.0) - Download - General Help & Support - Wiki PowerPoint (2021-08-31 - Version 1.5.0.0) - Download - General Help & Support - Example Scripts - Wiki Task Scheduler (2022-07-28 - Version 1.6.0.1) - Download - General Help & Support - Wiki Standard UDFs: Excel - Example Scripts - Wiki Word - Wiki Tutorials: ADO - Wiki WebDriver - Wiki Link to comment Share on other sites More sharing options...
water Posted September 1, 2018 Share Posted September 1, 2018 I see the error Should be fixed now. expandcollapse popup#include <AD.au3> _AD_Open() Local $vResult = _AD_CreateMailboxPS("TestUser", "http://YourExchangeServerNameGoesHere.CompanyName.com") If @error > 0 Then If @error < 7 Then MsgBox(0, "Error!", "_AD_CreateMailboxPS returned @error = " & @error & ", @extended = " & @extended) Else _ArrayDisplay($vResult, "_AD_CreateMailboxPS returned @error = " & @error & ", @extended = " & @extended) EndIf Else _ArrayDisplay($vResult, "Successful!") EndIf _AD_Close() Exit ; #FUNCTION#==================================================================================================================== ; Name...........: _AD_CreateMailboxPS ; Description ...: Creates a mailbox for a user using PowerShell ; Syntax.........: _AD_CreateMailboxPS($sUser, $sURI[, $sSessionParam = Default[, $sMailboxParam = Default]]) ; Parameters ....: $sUser - User account (SamAccountName or FQDN) for which you want to create the mailbox ; $sURI - Specifies a URI that defines the connection endpoint for the session. The URI must be fully qualified. ; Example: http://YourExchangeServerNameGoesHere.CompanyName.com ; $sSessionParam - Optional: One or multiple additional parameters for the PowerShell "Session" command e.g. " -Authentication Kerberos" ; $sMailboxParam - Optional: One or multiple additional parameters for the PowerShell "Enable-Mailbox" command (see parameter $sSessionParam) ; Return values .: Success - Zero based one-dimensional array holding the StdOut messages written by PowerShell ; Failure - "", sets @error to: ; |1 - $sUser does not exist ; |2 - $sUser already has a mailbox ; |3 - $sUser is invalid (empty) ; |4 - $sURI is invalid (empty) ; |5 - Run returned an error (PowerShell could not be started). @extended is set to the @error returned by Run ; |6 - Writing to StdIn returned an error. @extended is set to the @error returned by StdinWrite ; Failure - Zero based one-dimensional array holding the StdErr messages written by PowerShell, sets error to: ; |7 - PowerShell has written some error messages to StdErr. ; Author ........: water ; Modified.......: ; Remarks .......: ; Related .......: ; Link ..........: ; Example .......: Yes ; =============================================================================================================================== Func _AD_CreateMailboxPS($sUser, $sURI, $sSessionParam = Default, $sMailboxParam = Default) Local $aResult If StringStripWS($sUser, $STR_STRIPALL) = "" Then Return SetError(3, 0, "") If StringStripWS($sURI, $STR_STRIPALL) = "" Then Return SetError(4, 0, "") If $sSessionParam = Default Then $sSessionParam = "" If $sMailboxParam = Default Then $sMailboxParam = "" If Not _AD_ObjectExists($sUser) Then Return SetError(1, 0, "") Local $sProperty = "sAMAccountName" If StringMid($sUser, 3, 1) = "=" Then $sProperty = "distinguishedName" ; FQDN provided $__oAD_Command.CommandText = "<LDAP://" & $sAD_HostServer & "/" & $sAD_DNSDomain & ">;(" & $sProperty & "=" & $sUser & ");ADsPath;subtree" Local $oRecordSet = $__oAD_Command.Execute ; Retrieve the ADsPath for the object Local $sLDAPEntry = $oRecordSet.fields(0).Value Local $oUser = __AD_ObjGet($sLDAPEntry) ; Retrieve the COM Object for the object If $oUser.HomeMDB <> "" Then Return SetError(2, 0, "") Local $sCMD = "Powershell -Command -", $sSTDOUT = "", $sSTDERR = "", $bError = False $iPID = Run($sCMD, @SystemDir, @SW_MAXIMIZE, $STDIN_CHILD + $STDOUT_CHILD + $STDERR_CHILD) If $iPID = 0 Or @error Then Return SetError(5, @error, "") $sCMD = "$Session = New-PSSession -ConfigurationName Microsoft.Exchange -ConnectionUri " & $sURI & " " & $sSessionParam & _ ";Import-PSSession $Session" & _ ";Enable-Mailbox -Identity " & $sUser & " " & $sMailboxParam & _ ";Remove-PSSession $Session" StdinWrite($iPID, $sCMD) If @error Then Return SetError(6, @error, "") StdinWrite($iPID) ; Process STDOUT While 1 $sOutput = StdoutRead($iPID) If @error Then ExitLoop If $sOutput <> "" Then $sSTDOUT = $sSTDOUT & $sOutput WEnd ; Process STDERR While 1 $sOutput = StderrRead($iPID) If @error Then ExitLoop If $sOutput <> "" Then $sSTDERR = $sSTDERR & $sOutput $bError = True WEnd If $bError Then $aResult = StringSplit($sSTDERR, @CRLF, $STR_ENTIRESPLIT + $STR_NOCOUNT) Return SetError(7, 0, $aResult) Else $aResult = StringSplit($sSTDOUT, @CRLF, $STR_ENTIRESPLIT + $STR_NOCOUNT) Return $aResult EndIf EndFunc ;==>_AD_CreateMailboxPS My UDFs and Tutorials: Spoiler UDFs: Active Directory (NEW 2024-07-28 - Version 1.6.3.0) - Download - General Help & Support - Example Scripts - Wiki ExcelChart (2017-07-21 - Version 0.4.0.1) - Download - General Help & Support - Example Scripts OutlookEX (2021-11-16 - Version 1.7.0.0) - Download - General Help & Support - Example Scripts - Wiki OutlookEX_GUI (2021-04-13 - Version 1.4.0.0) - Download Outlook Tools (2019-07-22 - Version 0.6.0.0) - Download - General Help & Support - Wiki PowerPoint (2021-08-31 - Version 1.5.0.0) - Download - General Help & Support - Example Scripts - Wiki Task Scheduler (2022-07-28 - Version 1.6.0.1) - Download - General Help & Support - Wiki Standard UDFs: Excel - Example Scripts - Wiki Word - Wiki Tutorials: ADO - Wiki WebDriver - Wiki Link to comment Share on other sites More sharing options...
rossy Posted September 1, 2018 Author Share Posted September 1, 2018 Yes that's it working now thank you Link to comment Share on other sites More sharing options...
water Posted September 2, 2018 Share Posted September 2, 2018 Great. I have added the functiont to the AD UDF so it will be available with the next release rossy 1 My UDFs and Tutorials: Spoiler UDFs: Active Directory (NEW 2024-07-28 - Version 1.6.3.0) - Download - General Help & Support - Example Scripts - Wiki ExcelChart (2017-07-21 - Version 0.4.0.1) - Download - General Help & Support - Example Scripts OutlookEX (2021-11-16 - Version 1.7.0.0) - Download - General Help & Support - Example Scripts - Wiki OutlookEX_GUI (2021-04-13 - Version 1.4.0.0) - Download Outlook Tools (2019-07-22 - Version 0.6.0.0) - Download - General Help & Support - Wiki PowerPoint (2021-08-31 - Version 1.5.0.0) - Download - General Help & Support - Example Scripts - Wiki Task Scheduler (2022-07-28 - Version 1.6.0.1) - Download - General Help & Support - Wiki Standard UDFs: Excel - Example Scripts - Wiki Word - Wiki Tutorials: ADO - Wiki WebDriver - Wiki Link to comment Share on other sites More sharing options...
rossy Posted September 2, 2018 Author Share Posted September 2, 2018 10 hours ago, water said: Great. I have added the functiont to the AD UDF so it will be available with the next release That's great thanks, if you have a second the following Powershell Exchange functions would be useful: Delete a Mailbox. Move a mailbox to another database. I've managed to put together a basic AutoIT function that does this, but can't get my head around the error detection. The Powershell for both of the functions are: _AD_DeleteMailboxPS: (Errors would be User doesn't exist, user doesn't have a mailbox, user is empty, connectionurl is empty) $sCMD = "$Session = New-PSSession -ConfigurationName Microsoft.Exchange -ConnectionUri " & $sURI & " " & $sSessionParam & _ ";Import-PSSession $Session" & _ ";Disable-Mailbox " & $sUser & " -Confirm:$false " & $sMailboxParam & _ ";Remove-PSSession $Session" _AD_MoveMailboxDatabasePS (Errors would be user doesn't exist, user doesn't have mailbox, target database doesn't exist, user is empty, connectionurl is empty, database is empty) $sCMD = "$Session = New-PSSession -ConfigurationName Microsoft.Exchange -ConnectionUri " & $sURI & " " & $sSessionParam & _ ";Import-PSSession $Session" & _ ";New-MoveRequest -Identity " & $sUser & & " -TargetDatabase " & $database & " " & $sMailboxParam & _ ";Remove-PSSession $Session" Link to comment Share on other sites More sharing options...
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now