PowerShell script to enable email forwarding for 50 users - powershell

Here is the code, I need to import the CSV and enable forward to some other email address from office 365
$creds = Get-Credential
$Session = New-PSSession -ConfigurationName Microsoft.Exchange -ConnectionUri https://outlook.office365.com/powershell-liveid/ `
-Credential $creds -Authentication Basic -AllowRedirection
Import-Module MSOnline
Connect-MsolService -Credential $creds
Import-PSSession $Session
$emails = Import-CSV "C:\Users\Lev\Desktop\Email.csv"
ForEach($mail in $emails)
{
Set-Mailbox $mail.Work_email -ForwardingSmtpAddress $mail.home_email -DeliverToMailboxAndForward $true
}
I fixed the code and now this is a working code.

My comment as proper answer:
You need to change the line
Set-Mailbox -Identity $email.Work_email -DeliverToMailboxAndForward $true $email.home_email -ForwardingSMTPAddress $true
to
Set-Mailbox -Identity $email.Work_email -DeliverToMailboxAndForward $true -ForwardingSMTPAddress $email.home_email
See example 1 in Set-Mailbox

$emails = Import-CSV C:\path\to\csv.csv
ForEach($email in $emails)
{
Set-Mailbox $email.email1 -ForwardingAddress $email.email2 -DeliverToMailboxAndForward $true
}

Related

Hide specific emails From Address Lists

I try to hide specific emails From Address Lists in 365.
Import-Module MSOnline
$TenantUname = "****"
$TenantPass = cat "C:\****.key" | ConvertTo-SecureString
$TenantCredentials = new-object -typename System.Management.Automation.PSCredential -argumentlist $TenantUname, $TenantPass
$Session = New-PSSession -ConfigurationName Microsoft.Exchange -ConnectionUri https://ps.outlook.com/powershell/ -Credential $TenantCredentials -Authentication Basic -AllowRedirection
Import-PSSession $Session -AllowClobber
Connect-MsolService -Credential $TenantCredentials
ForEach ($mailbox in (Import-Csv c:\email.csv))
{
Set-Mailbox -Identity $mailbox.Identity -HiddenFromAddressListsEnabled $True
}
In my CSV file identity is the emails of users.
But from some reason, this is not work
I will be very happy to help.

Remote execution on Exchange server failed

I want to remote enable the email-address-policy for a single mailbox on a exchange server (2010).
I can do this:
$samaccountname = $args[0] # gets sam from command line
$EncryptedPassword = Get-Content -Path "C:\temp\password.txt"
$SecurePassword = ConvertTo-SecureString -String $EncryptedPassword
$Credential = New-Object System.Management.Automation.PSCredential "xyzdom\sco_admin", $SecurePassword
$Session = New-PSSession -ConfigurationName Microsoft.Exchange -ConnectionUri http://xyzexcas01/PowerShell/ -Authentication Kerberos -Credential $Credential
Import-PSSession $Session -AllowClobber -CommandName Set-Mailbox
Get-Mailbox -Identity $samaccountname | Set-Mailbox -EmailAddressPolicyEnabled $True
Remove-PSSession $Session
It works if I open a powershell as administrator on the Orchestrator server. Then it executes the command on the exchange server as it should.
But the script does not work if Orchestrator tries to execute it. I do not know what settings Orchestrator uses when executing it. But I have a similar script, which is working with Orchestrator.
$samaccountname = $args[0] # gets sam from command line
$EncryptedPassword = Get-Content -Path "C:\temp\password.txt"
$SecurePassword = ConvertTo-SecureString -String $EncryptedPassword
$Credential = New-Object System.Management.Automation.PSCredential "xyzdom\sco_admin", $SecurePassword
$Session = New-PSSession -ConfigurationName Microsoft.Exchange -ConnectionUri http://xyzexcas01/PowerShell/ -Authentication Kerberos -Credential $Credential
Import-PSSession $Session -AllowClobber -CommandName enable-mailbox
$username_param = $samaccountname
$emailalias_param = $samaccountname
Invoke-Command -ArgumentList $username_param,$emailalias_param –session $Session -scriptblock {
param($username_exc, $alias_exc)
Enable-Mailbox -Identity $username_exc -Alias $alias_exc -DomainController 'xyzdc01.zfpdom.zfp'
}
Remove-PSSession $Session
This script makes a new mailbox. It is working.
Can anyone show me a solution for the first script? I am totally new in powershell so I can't figure it out. Maybe someone can change my first script to do it with this Invoke-Command scriptblock. I am sure, then it will work.
Thank you.
Greetings
Replace the commands inside the invoke-command, and the variables accordingly. Also, add the get-mailbox commandlet to the session. I am not able to try it, though, so I added the -verbose and -whatif switches as a failsafe. Note that if the samaccountname variable is empty, the Set-Mailbox will run on all mailboxes. The script can be tested standalone before running it in the Orchestrator.
$samaccountname = $args[0] # gets sam from command line
$EncryptedPassword = Get-Content -Path "C:\temp\password.txt"
$SecurePassword = ConvertTo-SecureString -String $EncryptedPassword
$Credential = New-Object System.Management.Automation.PSCredential "xyzdom\sco_admin", $SecurePassword
$Session = New-PSSession -ConfigurationName Microsoft.Exchange -ConnectionUri http://xyzexcas01/PowerShell/ -Authentication Kerberos -Credential $Credential
Import-PSSession $Session -AllowClobber -CommandName Set-Mailbox,Get-Mailbox
Invoke-Command -ArgumentList $samaccountname –session $Session -scriptblock {
param($username_exc)
Get-Mailbox -Identity $username_exc| Set-Mailbox -EmailAddressPolicyEnabled $True -verbose -whatif # remove the -whatif to perform changes
}
Remove-PSSession $Session
Another working solution I have found out:
#Parameter Laden
$samaccountname = $args[0] # $samaccountname wird übergeben
$EncryptedPassword = Get-Content -Path "C:\temp\password.txt"
$SecurePassword = ConvertTo-SecureString -String $EncryptedPassword
$Credential = New-Object System.Management.Automation.PSCredential "xyzdom\sco_admin", $SecurePassword
$Session = New-PSSession -ConfigurationName Microsoft.Exchange -ConnectionUri http://xyzexcas01/PowerShell/ -Authentication Kerberos -Credential $Credential
Import-PSSession $Session -AllowClobber -CommandName Set-Mailbox,Get-Mailbox
Get-Mailbox -Identity $samaccountname | Set-Mailbox -EmailAddressPolicyEnabled $True
Remove-PSSession $Session

PowerShell Get Users Email Address To Exchange

Trying to do an auto ligation hold script using an ad synced group up to Azure. Would anyone be able to help with the below?
I'm trying to get all my users from the MsolGroup by doing a return of the MsolGroupMembers, I would like to return the users then from that I need to get their UPN/Email Address so I can pipe it into an exchange online command to turn litigation hold on for each of them users from the group.
Import-Module MSOnline
$user="removed"
$file = "removed"
$password = Get-Content $File | ConvertTo-SecureString
$cred = New-Object System.Management.Automation.PsCredential($user,$password)
Connect-MsolService -Credential $cred
$UserCredential = Get-Credential -Credential $cred
$Session = New-PSSession -ConfigurationName Microsoft.Exchange -ConnectionUri https://outlook.office365.com/powershell-liveid/ -Credential $UserCredential -Authentication Basic -AllowRedirection
Import-PSSession $Session
$usersOfGroup = Get-MsolGroupMember -GroupObjectId removedID -All
foreach ($user in $usersOfGroup)
{
$mailbox = Get-Mailbox $user.EmailAddress
Write-Output $mailbox
if ($mailbox.LitigationHoldEnabled -eq $false -and $mailbox.RecipientTypeDetails -eq "UserMailbox")
{
Write-Output "Current mailbox: " $mailbox.UserPrincipalName
Set-Mailbox -Identity $mailbox.UserPrincipalName -LitigationHoldEnabled $true -LitigationHoldDuration 2555 -WarningAction SilentlyContinue
}
}
Remove-PSSession $Session
This should do the trick.
#Useful Microsoft documentation
#https://technet.microsoft.com/en-us/library/dn767952(v=exchg.160).aspx
#Connect to Exchange Online
Import-Module MSOnline
$O365Cred = Get-Credential
$O365Session = New-PSSession -ConfigurationName Microsoft.Exchange -ConnectionUri "https://ps.outlook.com/powershell" -Credential $O365Cred -Authentication Basic -AllowRedirection
Import-PSSession $O365Session -AllowClobber
Connect-MsolService -Credential $O365Cred
#Filter mailboxes for the HR Department, pipe to the set litigation command for 365 days
Get-Recipient -RecipientTypeDetails UserMailbox -ResultSize unlimited -Filter 'Department -eq "HR"' | Set-Mailbox -LitigationHoldEnabled $true -LitigationHoldDuration 365
Remove-PSSession -Id $O365Session.Id

Trouble Trying to Hide Email From Address List Using PowerShell

I am trying to run a simple command to hide an email account from the address list using PowerShell. Here is my code so far.
cls
$EmployeeEmail = "user#example.com"
#Need to hide the Mailbox from address list
$MethodName = "Hide Email Account"
$username = "staff"
$password = "accounts"
$secstr = New-Object -TypeName System.Security.SecureString
$password.ToCharArray() | ForEach-Object {$secstr.AppendChar($_)}
$cred = new-object -typename System.Management.Automation.PSCredential -argumentlist $username, $secstr
$Session = New-PSSession -ConfigurationName Microsoft.Exchange -ConnectionUri http://Exchmbca1.example.local/PowerShell/ -Authentication Kerberos -Credential $cred
Import-PSSession $Session
Set-Mailbox -Identity $EmployeeEmail -HiddenFromAddressListsEnabled $true
Remove-PSSession $Session
However, when I run this command I receive the following error message:
The operation couldn't be performed because object 'user#example.com' couldn't be found on 'servername.example'.
I have tried changing the value of the -Identity I pass to the Set-Mailbox cmdlet with 'DOMAIN\username' as well and I receive the same error. I know the account exists because I can do a search using Get-ADUser and find the account with the SAMAccountName. Any help would be much appreciated. Thanks!

How to set new-mailuser as password never expired

In my project, I need Exchange Online Powershell to create an Exchange Service Account.
Here is the code sample:
Set-ExecutionPolicy Unrestricted -Force
$cred = New-Object -TypeName System.Management.Automation.PSCredential -ArgumentList 'admin#bdtest.onmicrosoft.com', $(ConvertTo-SecureString -String '123456' -AsPlainText -Force)
$session = New-PSSession -ConfigurationName Microsoft.Exchange -ConnectionUri "https://ps.outlook.com/powershell/" -Credential $cred -Authentication Basic -AllowRedirection
Import-PSSession $session
Enable-OrganizationCustomization
$exists=Get-MailUser -Identity 'test1'
if ($exists) {{
remove-mailuser -Identity 'test1' -confirm:$false
}}
New-MailUser -Name 'test1' -DisplayName 'test' -MicrosoftOnlineServicesID 'test1#bdtest.onmicrosoft.com' -Password $(ConvertTo-SecureString -String '123456' -AsPlainText -Force)
New-ManagementRoleAssignment -Role 'ApplicationImpersonation' -User 'test1'
New-ManagementRoleAssignment -Role 'Mailbox Search' -User 'test1'
Remove-PSSession $session
what I want to know is:
when the password is expired ?
How I can set it as never expired?
Setting password to never expire is not possible using Exchange Online cmdlets, you have to use Office365 cmdlets(and therefore MSOnline module, http://technet.microsoft.com/en-us/library/jj151815.aspx).
Add this to the bottom of your script:
Connect-MsolService -Credential $cred
Get-MSOLUser -SearchString test1 | Set-MsolUser -PasswordNeverExpires $true