To create new polices, I have been working on this script. It takes a list of settings like:
Name : Test Policy (HR)
AllowNonProvisionableDevices : False
AlphanumericDevicePasswordRequired : False
AttachmentsEnabled : True
DeviceEncryptionEnabled : False
RequireStorageCardEncryption : False
AllowCamera : True
and then creates or modifies the policy, when I simply paste the notes into the script when prompted.
Some things I worked on with this script:
- Using the Invoke-Expression option to run the command numerous times without coding for each option. This assumes that the input is valid (and not for a different version of Exchange).
- Reading the built-in $ERROR logs to find specific entries with the script. Sometimes people give you values that the Set-ActiveSyncMailboxPolicy do not accept. I wanted the script to return those values. When complete, you should get a breakdown of each entry that returned an error.
<#
.SYNOPSIS
Configure ActiveSync Mailbox Policy
.DESCRIPTION
Copy and Paste description of ActiveSync Policy into Script and it will create/modify policy.
#>
Write-Host "Paste in your AS Policy settings:"
$s=@();do {$r=Read-Host "+";if($r -ne ""){$s+=$r.trim()}} while ($r -ne "")
if (($s -match "Name").count -eq 0) {
$asPolicyName = Read-Host "Policy Name"
}
$ExistingPolicy = Get-ActiveSyncMailboxPolicy $asPolicyName -ErrorAction SilentlyContinue
if ($ExistingPolicy -eq $null) {
New-ActiveSyncMailboxPolicy -Name $asPolicyName
}
$CapturedErrors = @()
ForEach ($value in $s) {
$sp = $value.split(":")
$Prop = $sp[0].trim()
[string]$PVstr = $sp[1].trim()
if ($PVstr -eq "True") {
$pvstr = "1"
} elseif ($pvstr -eq "false") {
$pvstr = "0"
} elseif ($pvstr -eq "{}") {
$pvstr = "$null"}
$execStr = "Set-ActiveSyncMailboxPolicy -identity '"+$asPolicyName+"' -"+$Prop +" "+ $PVstr +" -erroraction silentlyContinue"
Invoke-Expression $execStr -ErrorAction SilentlyContinue
$E = $Error
$FoundError = $e | ?{$_ -like "*"+$prop+"*" -and $_ -like "*"+$pvstr +"*" }
if ($FoundError -is [array]) {
[array]$CapturedErrors += $FoundError[0]
write-host $FoundError[0]
} else {
Write-Host $FoundError
[array]$CapturedErrors += $FoundError
}
}
No comments:
Post a Comment