Showing posts with label Exchange PowerShell. Show all posts
Showing posts with label Exchange PowerShell. Show all posts

Thursday, August 15, 2013

Show more details in Calendar (Room Mailbox)

If you made a Room Mailbox for a meeting room and someone wants to see who booked it and more details for that booking you can run the following cmdlet to change the default setting to Reviewer which will give end user more information about that booking.


Set-MailboxFolderPermission meetingroom:\Calendar -User Default -AccessRights Reviewer

Friday, August 9, 2013

Exchange 2010 - Deny User from distribution list to send mails to other distribution list.

This probably sounds crazy but I was asked to do this.

Basically they wanted to stop a users to send emails to all distribution list. Usually used when terminating a user or if the user is being retarded and sending personal emails to all DL's. Whatever it might be I just had to come up with a script to do it to all over 150 DL. I wasn't going to do it one by one from EMC so I made a cmdlet.

Below is the powershell script for exchange 2010 probably works on 2013 as well.

Make a DL called "Denied Users" and add users or user to that DL if you want to block him from sending emails to DL. Please note that this script will only add the Denied User DL in block list once. So if you create a new DL after running this script. Then that DL will not have Denied users in rejected user and hence you will have to re-run the script.

$temp = Get-DistributionGroup -ResultSize Unlimited

foreach($group in $temp)



{
 
Set-DistributionGroup -Identity $group -RejectMessagesFromDLMembers "Denied Users"



}
 
#Remove the above setting incase they change their mind.

#Set-DistributionGroup -Identity $group -RejectMessagesFromDLMembers $null
 
 
 

Wednesday, October 26, 2011

Exchange 2010 Gal Picture Upload Script.

Alright I been working on migrating to Exchange 2010 from Exchange 2007.  Once moved we wanted to upload the pictures for users. You can do this on Exchange 2007 not covered here though.

I made the below script by using multiple source to compile this. Some script I found did something I liked but lacked few things so I went ahead and made my own with all thse things I needed. I am pretty new to Powershell so if you find I can improve then do let me know :)

I added option to check if the picture is already on the user ad attribute to save time. You can disable it if you dont want that. I also used hashtable to keep a log file for successful or failed uploads of pics.

If you have any suggestions to add to this script do let me know :)

You probably need to change Pickup folder location which is $PicFolder

=============Update: 10/11/11===========

I did not explain what this script does cause I thought it was pretty much straight forward cause of comments I added. But anyways I looked at the post today and thought hell it doesn't really say that this can do.

So here it is :- (I listed it in way of execution)

1- Gets users from exchange with get-mailbox | foreach

2- Create and datestamp log files with start of script. (I didnt know how to datestamp each line so had to create it head of execution of script. Maybe someone can help me out with this.

3- Initiate Hashtables for Success Log (Slist) and Failed Log (Flist).

4- For each users found with get-mailbox fetch $alias from it and check $alias.jpg file in pickup folder. If the pic is not there for $alias skip user.

5- Function ChkPic is to check if user has picture already assigned if so skip the user. This is usefull if want to re-run this script with new pictures added to pickup folder. Method used here is Export-RecipientDataProperty with username to see if it shows something. Usually if pic is there it will show RunspaceID in the result. I using that as my ref for pic is there.

6- Check picture file size if its less then or equal to 10k. If bigger than 10k skip user. Otherwise go ahead.

7- So finally we reached here after all that checks YAY. Go ahead and import picture.

8- So you remember that ChkPic (Step 5) I created? we are going to use it again to check if it uploaded the picture successfully. Does the same thing but after uploading. If it finds the pic it says all good otherwise logs it to Flist and displays error.

9- Display information about the logs and location to user.

10- End Script

Please leave a comment cause sometimes I feel that no one is reading this LOL. :p anyways it comes handy for me :)

================ImporToExCh2010=====================
#Pickup folder for pictures.
$PicFolder = "c:\pics"

#Fetch users from Exchange
$results = Get-Mailbox | Foreach {$_.alias}

#DateStamp
$Date=$(Get-Date -format g) | add-content c:\ExPicSuccess.log, c:\ExPicFailed.log

#Using hashtable for logs.
$Slist=@{} #Successful Log file
$Flist=@{} #Failed Log File

#Function to check if pic is in user ad attr
Function ChkPic {
Param ($alias)

#Try to see if user already has pic uploaded
$ChkUpload = Export-RecipientDataProperty -Identity $alias -Picture | out-string

#Match for RunspaceId in result string
$RChk = $ChkUpload -match "RunspaceId"                            }
#End Function ChkPic

Foreach ($alias in $results)
{
$FileLoc = "$PicFolder\$alias.jpg"
$FileExists = Test-path $FileLoc

If ($FileExists -eq $True){
Write-host -f green "`nPicture found for $alias....checking size..."

#Check photo size if its less than 10k
$PhotoSize = Get-ChildItem $FileLoc | select Length

If ($PhotoSize.Length -le 10000) { Write-Host "[Size OK]" -ForeGroundColor Green }
Else {
$Flist.Add($alias, "Pic Size Exceeded 10k - Skipped!")
Write-Host "[Pic Size more than 10Kb..Skipping User!]" -ForeGroundColor Red; Continue}

#Precheck to make sure pic is not assigned. If assigned skip user. (You can disable this)
ChkPic $alias

If ($RChk -eq $True) { Write-Host "User already has picture assigned. Skipping User! `n" -f red;Continue}

#All good going ahead with uploading..
Write-host -f yellow "Uploading..."

#Import Picture to user ad attr
Import-RecipientDataProperty -Identity "$alias" -Picture -FileData `
([Byte[]]$(Get-Content -Path "$FileLoc" -Encoding Byte -ReadCount 0))

Write-Host -f green "Uploaded picture for $alias"
Write-host -f yellow "Checking if uploaded successfully..."

#Calling ChkPic Function
ChkPic $alias
#If statement to see if value is true which means successful and false means pic attr not found.
If ($RChk -eq $True) {
Write-Host -f green "[Uploaded Successfully] `n"

If ($alias) {$Slist.Add($alias, "Successful")}
}
Else {
Write-Host -f red "[Upload Failed]"

$Flist.Add($alias, "Upload Failed.")
}
                          }

Else{
Write-host -f red "Picture not found for $alias in $PicFolder"

If ($alias) {$Flist.Add($alias, "Picture not found.")}
    }
}

Write-Host -f yellow "#Note: Logs files can be found in C: with name of ExPicSuccess.log & ExPicFailed.log `n"

#Add Successful list to log file
$Slist | out-string | add-content c:\ExPicSuccess.log
Write-host -f green "`n Displaying Successful Upload Userlist `n"
$Slist

#Add Failed to log
$Flist | out-string | add-content c:\ExPicFailed.log
Write-host -f red "`n Displaying Failed Upload Userlist `n"
$Flist
=======================================================

Download ps1 from Google Docs

You can download the ps1 incase the copy paste doesnt work. Link provided above

Monday, September 26, 2011

Disable & Enable Services for Mailbox

PowerShell commands to Disable mailbox level services for specificed users. Works well for Microsoft 365 Cloud.

Disable Access to Mailbox

#Set $member to username of the user you wan
$member | Set-CASMailbox -OWAEnabled $false -PopEnabled $false -ImapEnabled $false -MAPIEnabled $false -ActiveSyncEnabled $false -EwsEnabled $false
   
Get-CASMailbox $member | Select-Object Name, OWAEnabled, PopEnabled, ImapEnabled, MAPIEnabled, ActiveSyncEnabled, EwsEnabled

==========================

Enable Access to Mailbox

#Set $member to username of the user you wan
$member | Set-CASMailbox -OWAEnabled $true -PopEnabled $true -ImapEnabled $true -MAPIEnabled $true -ActiveSyncEnabled $true -EwsEnabled $true

Get-CASMailbox $member | Select-Object Name, OWAEnabled, PopEnabled, ImapEnabled, MAPIEnabled, ActiveSyncEnabled, EwsEnabled

Friday, September 23, 2011

Enable / Disable Microsoft 365 ActiveSync service for users.

I am currently working on Microsoft 365 cloud exchange. I want to try out different things which will enable and disable the services for users. I found the below post which stats how to enable and disable ActiveSync for users.

Windows Mobiles can be configured for Active Sync. Active Sync is enabled for all users by Default in Exchange 2007 & 2010.

For Security reasons its recommended to disabled all users and enable only for the required users

Below power shell enabled and disabled Active for all the users in the exchange Organization

get-Mailbox -resultsize unlimited | set-CASMailbox -ActiveSyncEnabled:$False

get-Mailbox -resultsize unlimited | set-CASMailbox -ActiveSyncEnabled:$True

Below powershell command to enable and disable active sync for given set of users in the text file

Get-content C:\users.txt | set-CASMailbox -ActiveSyncEnabled:$True

Get-content C:\users.txt| set-CASMailbox -ActiveSyncEnabled:$False

Source : http://powershell.com/cs/forums/p/2619/3506.aspx

Thursday, September 22, 2011

Microsoft 365 Cloud Remote Management

Alright so I been learning how to play with Microsoft 365. In particular management of Exchange server via “Exchange Management Console” and “Exchange Management Shell aka Powershell”.

I found very amazing tutorial on http://technet.microsoft.com/en-us/edge/Video/hh278971 by Naomi Alpern. I watched the whole thing since it was very interesting. But you if you really want to skip it to fun part then skip it to 20 minutes into to tutorial.

First of install "Exchange Management Tools" from Exchange 2010 Sp1 cd. I downloaded mine off microsoft. Extract the files and run the setup from run. Cmd into the folder where exchange 2010 sp1 setup file is located and write "setup /R:MT"

To configure Exchange Management Console do the following steps:-

·         From the “Exchange Management Console” right click on “Microsoft Exchange” and click on “Add Exchange Forest…”

·         You will be prompted with the below dialog box. In “Specify a friendly name for this Exchange forest”. Write whatever is easy to remember for you. I put mine as “Exchange Online”. After that make sure you select “Exchange Online” from the drop down menu of “Specify the FQDN or URL of the server running the Remote PowerShell instance:” Click “OK” and it will ask you for the username and password for your Microsoft 365 account.
·         After you put in your username and password it will refresh the EMC and if it accepts the credentials it will list your exchange forest in the list.

That was the "Exchange Management Console" connection settings. Now for "Exchange Management Shell (PowerShell)"

To connect through PowerShell use the following script
========================================
Set-ExecutionPolicy unrestricted
#Ask for credentials
$cred = Get-Credential
#Setup a powershell session to the Exhcange online server
$O365 = New-PSSession -ConfigurationName Microsoft.Exchange –ConnectionUri https://ps.outlook.com/powershell -Credential $cred -Authentication Basic –AllowRedirection
#Import the cmdlets to your local computer
$importcmd = Import-PSSession $O365
=============================================

Update : Someone asked me to automate the username and password. So here's the script with username & password already added :-

=============================================
Set-ExecutionPolicy unrestricted
#Change to your username of microsoft 360 below
$userName = "username@domain.onmicrosoft.com"
#Change yourpasswordhere with your password
$passWord = ConvertTo-SecureString "yourpasswordhere" -Force -AsPlainText
$cred = New-Object System.Management.Automation.PSCredential($userName, $passWord)
$O365 = New-PSSession -ConfigurationName Microsoft.Exchange –ConnectionUri https://ps.outlook.com/powershell -Credential $cred -Authentication Basic –AllowRedirection
$importcmd = Import-PSSession $O365
========================================
The above will connect you to your online cloud exchange server. You can test it out by running exchange commands. get-mailbox or anything else.

That pretty much sums it up. Not much different from your local exchange server. Do keep in mind there are few settings not visible on cloud exchange server since its running multiple clients setup (hosted exchange setup).