MDeamon.psm1
################################################# ## ATTENTION!!! ## ## regsvr32 "C:\MDaemon\App\MDUserCOM.dll" /u ## ## regsvr32 "C:\MDaemon\App\MDUserCOM.dll" ## ################################################# Function Get-MDUser { param ( [string]$Email, [string]$Mailbox, [string]$FullName, [string]$Domain = $env:USERDNSDOMAIN, [switch]$All ) $MDUser = New-Object -ComObject MDUserCOM.MDUser $MDUserInfo = New-Object -ComObject MDUserCOM.MDUserInfo if (! $MDUser.LoadUserDll()) {'LoadUserDll error'; break} if ($All) { [int64[]]$id = @(1 .. [int64]($MDUser.UserCount())) } elseif ($Email) { [int64]$id = @($MDUser.GetByEmail($Email))[0] } elseif ($Mailbox) { [int64]$id = @($MDUser.GetByMailbox($Mailbox, $Domain))[0] } elseif ($FullName) { [int64]$id = @($MDUser.GetByFullName($FullName, $Domain))[0] } else {break} $id | % { $i = [int64]$_ if ($i -gt 0){ $MDUser = New-Object -ComObject MDUserCOM.MDUser $MDUserInfo = New-Object -ComObject MDUserCOM.MDUserInfo $MDUser.GetUserInfo($_, $MDUserInfo) $MDUserInfo | Select-Object -Property @(@{'Name' = 'id'; 'Expression' = {$i}},'*') } } } Function Set-MDUser { <# .EXAMPLE Get-MDUser -All | ? {$_.Comments -match [regex]::Escape($_.Password)} | % {$NewComments = $_.Comments -replace @([regex]::Escape($_.Password),'password'); Set-MDUser -Email $_.Email -Replace @{'Comments' = $NewComments} } #> param ( [string]$Email, [string]$Mailbox, [string]$FullName, [string]$Domain = $env:USERDNSDOMAIN, [hashtable]$Replace ) $MDUser = New-Object -ComObject MDUserCOM.MDUser $MDUserInfo = New-Object -ComObject MDUserCOM.MDUserInfo if (! $MDUser.LoadUserDll()) {'LoadUserDll error'; break} if ($Replace.Count -eq 0) {'Argument "Replace" error'; break} if ($Email) { [int64]$id = @($MDUser.GetByEmail($Email))[0] } elseif ($Mailbox) { [int64]$id = @($MDUser.GetByMailbox($Mailbox, $Domain))[0] } elseif ($FullName) { [int64]$id = @($MDUser.GetByFullName($FullName, $Domain))[0] } else {break} $MDUser = New-Object -ComObject MDUserCOM.MDUser $MDUserInfo = New-Object -ComObject MDUserCOM.MDUserInfo $MDUser.GetUserInfo($id, $MDUserInfo) $Replace.GetEnumerator() | % {$MDUserInfo.($_.key) = $_.value} $MDUser.SetUserInfo($id, $MDUserInfo) $MDUser = New-Object -ComObject MDUserCOM.MDUser $MDUserInfo = New-Object -ComObject MDUserCOM.MDUserInfo $MDUser.GetUserInfo($id, $MDUserInfo) $MDUserInfo } Function Set-MDUserProtocol { param ( [string]$Email, [string]$Mailbox, [string]$FullName, [string]$Domain = $env:USERDNSDOMAIN, [parameter(Mandatory=$true)][bool]$POP, [parameter(Mandatory=$true)][bool]$IMAP ) <# .EXAMPLE Get-MDUser -All | ? AccessType -eq 2 | % {Set-MDUserProtocol -Email $_.Email -POP $true -IMAP $true} #> $MDUser = New-Object -ComObject MDUserCOM.MDUser $MDUserInfo = New-Object -ComObject MDUserCOM.MDUserInfo if (! $MDUser.LoadUserDll()) {'LoadUserDll error'; break} if ($Email) {$id = $MDUser.GetByEmail($Email)} if ($Mailbox) {$id = $MDUser.GetByMailbox($Mailbox, $Domain)} if ($FullName) {$id = $MDUser.GetByFullName($FullName, $Domain)} if ([int]$id -gt 0){ $MDUser.SetAccessType($id, $POP, $IMAP) $MDUser.GetUserInfo($id, $MDUserInfo) $MDUserInfo } } Function Set-MDUserPassword { param ( [string]$Email, [string]$Mailbox, [string]$FullName, [string]$Domain = $env:USERDNSDOMAIN, [string]$Password ) $MDUser = New-Object -ComObject MDUserCOM.MDUser $MDUserInfo = New-Object -ComObject MDUserCOM.MDUserInfo if (! $MDUser.LoadUserDll()) {'LoadUserDll error'; break} if ($Email) {$id = $MDUser.GetByEmail($Email)} if ($Mailbox) {$id = $MDUser.GetByMailbox($Mailbox, $Domain)} if ($FullName) {$id = $MDUser.GetByFullName($FullName, $Domain)} if ([int]$id -gt 0){ $MDUser.SetPassword($id, $Password) $MDUser.GetUserInfo($id, $MDUserInfo) $MDUserInfo } } Function New-MDUser { param ( [string]$FullName, [parameter(Mandatory=$true)][string]$Mailbox, [string]$Domain = $env:USERDNSDOMAIN, [string]$FwdDomain = '', [string]$Password = '123ABC', [ValidateSet('All','POP','IMAP')][string]$AccessType = 'All', [ValidateRange(0,1)][int]$ApplyQuotas = 1, [string]$MaxMessageCount = 0, [string]$MaxDiskSpace = 4000000, [string]$RootMailDir = 'D:\MDAEMON\Users\', [ValidateRange(0,1)][int]$KeepForwardedMail = 0, [string]$FwdAddress ) $MDUser = New-Object -ComObject MDUserCOM.MDUser $MDUserInfo = New-Object -ComObject MDUserCOM.MDUserInfo if (! $MDUser.LoadUserDll()) {'LoadUserDll error'; break} if ($FwdAddress) { $FwdAddress = $FwdAddress -replace @('@.+','') -replace @('\b$',$('@'+$FwdDomain)) $MDUserInfo.FwdAddress = $FwdAddress $MDUserInfo.IsForwarding = 1 } $Email = [string](@($Mailbox,$Domain) -join '@') $MailDir = Join-Path -Path $RootMailDir -ChildPath ($Domain + '\' + $Mailbox + '\') if (! $FullName) {$FullName = $Mailbox} $MDUserInfo.FullName = $FullName $MDUserInfo.Mailbox = $Mailbox $MDUserInfo.Email = $Email $MDUserInfo.Domain = $Domain $MDUserInfo.Password = $Password $MDUserInfo.MailDir = $MailDir $MDUserInfo.AccessType = @{'All' = 1; 'POP' = 2; 'IMAP' = 3}[$AccessType] $MDUserInfo.WebConfig = 1 $MDUserInfo.ApplyQuotas = $ApplyQuotas $MDUserInfo.MaxMessageCount = $MaxMessageCount $MDUserInfo.MaxDiskSpace = $MaxDiskSpace $MDUserInfo.KeepForwardedMail = $KeepForwardedMail if ($MDUser.AddUser($MDUserInfo) -eq 0) { $MDUserInfo | Select-Object @{Name = 'Created'; Expression = {$true}},* } else { $MDUserInfo | Select-Object @{Name = 'Created'; Expression = {$false}},* } } Function Disable-MDUser { param ( [string]$Email, [string]$Mailbox, [string]$FullName, [string]$Domain = $env:USERDNSDOMAIN ) $MDUser = New-Object -ComObject MDUserCOM.MDUser $MDUserInfo = New-Object -ComObject MDUserCOM.MDUserInfo if (! $MDUser.LoadUserDll()) {'LoadUserDll error'; break} if ($Email) {$id = $MDUser.GetByEmail($Email)} if ($Mailbox) {$id = $MDUser.GetByMailbox($Mailbox, $Domain)} if ($FullName) {$id = $MDUser.GetByFullName($FullName, $Domain)} if ([int]$id -gt 0){ $MDUser.SetIsDisabled($id, 1) $MDUser.GetUserInfo($id, $MDUserInfo) $MDUserInfo } } |