I have inherited a number of PowerShell scripts running as scheduled tasks on various servers, that I am looking to consolidate into ARS. The first one that I am working on creating is a scheduled task in ARS to run against a subset of users and to disable OWA for those mailboxes. I have created a function for connecting to Exchange 2016 that works whenever I have the function declared within the scheduled task script. My issue is that I would like to put my connectExchange() function into a Library Script to be able to re-use and manage the function easily.
This is my connectExchange() function that I have saved as a Library Script
function connectExchange {
param ()
## Connect to Exchange
switch ($env:COMPUTERNAME.ToUpper()) {
"ARServer01" {
## ARServer01 Specific SecureString Password for the ARS Service account in the Domain where Exchange is installed
## Only the ARS Service Account logged into the apropriate ARS server will be able to decrypt the password
$EncryptedPassword = '01000000d08c9ddf0115d1118c7a00c04fc297a7k20plc11as8vl2wvoaajsm49dfcb3f3843aa8b'
$EncryptedPassword += 'e0000000002000000000003660000c000000010000000f457abe96d08912ff2c2d8a9c49f5e3800'
$EncryptedPassword += '00000004800000a0000000100000006e02f77c2a810bfx0p1516efcfc1a2cf68000000ce3a97c62'
$EncryptedPassword += '8d8cf7c69f4dcd4339 Not A Real Password 95e98f83f425ed0d65a2ceb641b27236fd6f17'
$EncryptedPassword += 'a228d27593160ca9f1k569281lb8a8389g110a0g419190000d9cd243cd7094c179a082d58a96f2e'
$EncryptedPassword += '811cc462cf'
}
"ARServer02" {
## ARServer02 Specific SecureString Password for the ARS Service account in the Domain where Exchange is installed
## Only the ARS Service Account logged into the apropriate ARS server will be able to decrypt the password
$EncryptedPassword = '01000000d08c9ddf0115d1118c7a00c04fc297eb010000006347355992dc964b89c4881376a8cd4'
$EncryptedPassword += '80000000002000000000003660000c0000000100000008ad6f86586723jhgbkh5g6976f8as7d6f0'
$EncryptedPassword += '35b06ebeaf88asdf7634k917236498751897236vs9dgf96797675bn77a75868cf2e654d9a4c82db'
$EncryptedPassword += '6ababeef73762784eb5a4a3e2f320a48570 Not A Real Password cab377fe3f586571f1e04'
$EncryptedPassword += 'e6efadsf765134hjg2634978dsg978345kjh654ku6y91746adfs876dfag876asd9f76377a0efe70'
$EncryptedPassword += 'ca9bcd4072'
}
}
$ServerFQDN = 'ExchangeServer.Domain.Name'
## Defined the Credential Object
$Credential = New-Object System.Management.Automation.PSCredential -ArgumentList 'ARSServiceAccount@Domain.name', $($EncryptedPassword | ConvertTo-SecureString)
## Establish the PowerShell Session with the Exchange server
$Session = New-PSSession -ConfigurationName Microsoft.Exchange `
-ConnectionUri http://$ServerFQDN/Powershell/ `
-Authentication Kerberos `
-Credential $Credential
## Load the PowerShell Session
Import-PSSession -AllowClobber -Session $Session
}
This is my scheduled task for disabling OWA access for a group of employees. When I put the connectExchange() function into the scheduled task Disable OWA script, OWA is disabled for the users as intended. When I attempt to load the connectExchange() function from the Library Script "ConnectExchange", the error that I receive on the scheduled task 'Last Run Message' is "The term 'connectExchagne' is not recognized as the name of a cmdlet, function, script file or operable program. ..."
function onInit($context) {
$context.UseLibraryScript("ConnectExchange")
}
connectExchange($null)
## Search for Employees to disable OWA Access for
$LDAPFilter = "(&"
$LDAPFilter += "(l=CityName)"
$LDAPFilter += "(st=StateName)"
$LDAPFilter += "(homemdb=*)" #Mailbox Enabled
$LDAPFilter += "(!(useraccountcontrol:1.2.840.113556.1.4.803:=2))" #User Account Enabled
$LDAPFilter += "(|"
$LDAPFilter += "(title=Service Associate)"
$LDAPFilter += ")"
$LDAPFilter += ")"
Get-QADUser -LdapFilter $LDAPFilter -Service Domain.Name -SizeLimit 0 | foreach {
## Disable OWA
Set-CASMailbox -Identity $_.UserPrincipalName `
-ActiveSyncEnabled $False `
-OWAEnabled $False `
-OWAforDevicesEnabled $False `
-EWSEnabled $False
}
I don't really understand the onInit() function or the $context object. Am I doing something wrong there? I am attempting to emulate what is within the ARS SDK help file for 'Understanding library scripts'.
Thank you