Here is a powershell script that will create a signature in Outlook from a pre-existing template. It takes information from AD andf inserts it into the siganure, and sets the signature as the default signature.
It is quite simple create a signature in out look with all the formating you need to fit in with your company brand. Set placeholders for name, role and numbers we replace these with the AD settings of the logged on user.
The reason I am posting this I have seen a lot of long and over conplicated solutions to do this that doesn't work half the time. This is just simple and works. And if you need to change the way it looks you just change the source siganture, you dont need to re - write 200 lines of HTML.
I have some validation in the copy I deploy to create a slightly different signature for people who are in a certain department or who dont have a mobile number. If you are a fter this send me a message.
#Setting variables
$strName = $env:username
$name = Get-ADUser $strName -properties * | select -ExpandProperty DisplayName
$role = Get-ADUser $strName -properties * | select -ExpandProperty Description
$ipPhone = Get-ADUser $strName -properties * | select -ExpandProperty telephoneNumber
$mobile = Get-ADUser $strName -properties * | select -ExpandProperty MobilePhone
$filepath = location of your signature
#Sets the signature.
#Finds the word "Name" and replaces it with the users name in Active Directory
#Finds the word "Role" and replaces it with the users Job Title in Active Directory
#Finds the word "number" and replaces it with the users IP phone number in Active Directory
#Finds the word "mobile" and replaces it with the users mobile number in Active Directory
#Test Signature
(gc $filepath) -replace "User",$name -replace "\bRole\b",$role -replace "\bnumber\b",$ipPhone -replace "\bmobile\b", "| m: +44 (0) ""+$mobile" > C:\Users\$env:USERNAME\AppData\Roaming\Microsoft\Signatures\test.txt
#Rich text signature
(gc $filepath) -replace "User",$name -replace "\bRole\b",$role -replace "\bnumber\b",$ipPhone -replace "\bmobile\b", "| m: +44 (0) ""+$mobile" > C:\Users\$env:USERNAME\AppData\Roaming\Microsoft\Signatures\test.rtf
#HTML signature
(gc $filepath) -replace "User",$name -replace "\bRole\b",$role -replace "\bnumber\b",$ipPhone -replace "\bmobile\b", $mobile > C:\Users\$env:USERNAME\AppData\Roaming\Microsoft\Signatures\test.htm
#Sets signature named "test" as default signature
$CompanyName="test"
$MSWord = New-Object -com word.application
$EmailOptions = $MSWord.EmailOptions
$EmailSignature = $EmailOptions.EmailSignature
$EmailSignatureEntries = $EmailSignature.EmailSignatureEntries
$EmailSignature.NewMessageSignature=$CompanyName
$EmailSignature.ReplyMessageSignature=$CompanyName
$MSWord.Quit()
Enjoy!!
Donald Macleod's IT KB
Powershell Custom Column Label Names
Sometimes in Powershell the Column label names can be not very intuitive or you may have to present the results to a non technical person who may not understand. In this case we can edit the labels to suit our needs.
The format is quite simple we will use Get-Process in this example. When filtering the property you wish to change the label of use the following code:
@{} Use @ and all your code for the custom column goes between the curly brackets.
Inside of the curly brackets insert the following:
Label="Custom column Label";
Expression={$_.Property Name}
And all together it will look like below.
Get-Process | Format-Table Name,ID,@{Label="Paged Memory Size";Expression={$_.PM }} -AutoSize
You can also further format the output so it better suits your needs. Here we will use Get-WmiObject to see available disk space and format the column header and the output to show us how many GB of free space we have to 2 decimal places.
Here we nee to add some extra code to get the outcome we desire.
/1GB We have divided the $_.freespace property by 1GB you can also divide it by MB,TB and PB if you desire.
formatstring="N2" restricts the output to 2 decimal places you just need to change the number after the N if you desire more or less decimal places.
width=20 Specifies the column header width.
align="Left" Sets the alignment of the data within the column.
All together it looks like:
@{Name="FreeSpaceGB";Expression{$_.freespace /1GB};formatstring="N2";width=20;align="left"}
And the full script will look like:
Get-WmiObject Win32_LogicalDisk -Filter DriveType=3 | Format-Table SystemName,VolumeName,DeviceId,@{Name="Free Space GB";Expression={$_.freespace / 1GB};formatstring="N2";width=20;align="left"}
The format is quite simple we will use Get-Process in this example. When filtering the property you wish to change the label of use the following code:
@{} Use @ and all your code for the custom column goes between the curly brackets.
Inside of the curly brackets insert the following:
Label="Custom column Label";
Expression={$_.Property Name}
And all together it will look like below.
Get-Process | Format-Table Name,ID,@{Label="Paged Memory Size";Expression={$_.PM }} -AutoSize
You can also further format the output so it better suits your needs. Here we will use Get-WmiObject to see available disk space and format the column header and the output to show us how many GB of free space we have to 2 decimal places.
Here we nee to add some extra code to get the outcome we desire.
/1GB We have divided the $_.freespace property by 1GB you can also divide it by MB,TB and PB if you desire.
formatstring="N2" restricts the output to 2 decimal places you just need to change the number after the N if you desire more or less decimal places.
width=20 Specifies the column header width.
align="Left" Sets the alignment of the data within the column.
All together it looks like:
@{Name="FreeSpaceGB";Expression{$_.freespace /1GB};formatstring="N2";width=20;align="left"}
And the full script will look like:
Get-WmiObject Win32_LogicalDisk -Filter DriveType=3 | Format-Table SystemName,VolumeName,DeviceId,@{Name="Free Space GB";Expression={$_.freespace / 1GB};formatstring="N2";width=20;align="left"}
Test Email Via Telnet
Often you will need to test if email is working correctly within your organization. and a great way to do that is through Telnet.
First you will need to know the host name or ip address of the mail server or relay you wish to test.
If you don't know you can use nslookup.
Use Nslookup to determine your mail server.
1. Open an Administrative command prompt.
2. Type "nslookup" press enter.
3. Type "set type=mx" press enter.
4. Type your domain name.
5. It will then return results showing server name and ipaddress.
Now you have the mail server we can make the Telent connection.
1. Open an administrative Command prompt window.
2 Type "telnet YourMailServer 25" press enter.
3. Type "ehlo yourdomain.com" press enter.
4. Type "mail from:youremail@yourdomain.com" press enter.
5. Type "rcpt to:recpient@yourdomain.com" press enter.
6. Type "data" press enter.
7. Type a message(email body) eg. "this is a test" press enter
8. Type "." press enter. This tells the server you are finished with the body of the message and to go ahead and send the email.
9. Type "Quit" to exit the telnet session.
You have now sent a test email message via Telent!
First you will need to know the host name or ip address of the mail server or relay you wish to test.
If you don't know you can use nslookup.
Use Nslookup to determine your mail server.
1. Open an Administrative command prompt.
2. Type "nslookup" press enter.
3. Type "set type=mx" press enter.
4. Type your domain name.
5. It will then return results showing server name and ipaddress.
Now you have the mail server we can make the Telent connection.
1. Open an administrative Command prompt window.
2 Type "telnet YourMailServer 25" press enter.
3. Type "ehlo yourdomain.com" press enter.
4. Type "mail from:youremail@yourdomain.com" press enter.
5. Type "rcpt to:recpient@yourdomain.com" press enter.
6. Type "data" press enter.
7. Type a message(email body) eg. "this is a test" press enter
8. Type "." press enter. This tells the server you are finished with the body of the message and to go ahead and send the email.
9. Type "Quit" to exit the telnet session.
You have now sent a test email message via Telent!
Add user to local Computer group via Comand Line
You can add users to a local security group via the command line with the following command:
netlocalgroup "groupname" "username" /add
and to confirm it worked:
netlocalgroup "groupname"
I wrote a simple little script to run this via powershell with user input.
If you have the psexec tools installed you can run it for a remote machine using the following command
psexec \\RemotePC -u UserName -p password net localgroup "Localgroup" "Username" /add
You can download PsExec tools from here.
netlocalgroup "groupname" "username" /add
and to confirm it worked:
netlocalgroup "groupname"
I wrote a simple little script to run this via powershell with user input.
If you have the psexec tools installed you can run it for a remote machine using the following command
psexec \\RemotePC -u UserName -p password net localgroup "Localgroup" "Username" /add
You can download PsExec tools from here.
Could not flush the DNS Resolver cache: Function Failed During Execution. When flushing DNS cache
To resolve this you need to restart the DNS Client service. You can do this by opening the Services management console by selecting windows button+r and typing services.msc, and then within the console restarting the DNS Client Service or starting it if it's turned off. Ensure the service is running and the startup type is set to automatic after you do so.
You can also achieve the same task through the command prompt by typing:
net stop "dns client" and then
net start "dns client"
Then you are done and will be able to successfully flush the dns cache on the machine.
Compare Active Directory Group Membership with Powershell
Here is a nice little Powershell script I wrote to compare group membership of two active directory users. You can use this script for many different purposes just edit the reference command and property to whatever object you wish to compare.
$UserReference = Get-ADPrincipalGroupmembership (Read-Host "Reference User")
$UserDifference = Get-ADPrincipalGroupmembership (Read-Host "Difference User")
Compare-object $UserReference $UserDifference -property SamAccountName
=> Means the Difference User is a member of a group and the Reference User is not a member.
<= Means the Reference User is a member of the group and the Difference User is not a member.
You can also use the -IncludeEqual parameter to include groups both users are a member of that will be represented by the SideIndicator value of: ==
$UserReference = Get-ADPrincipalGroupmembership (Read-Host "Reference User")
$UserDifference = Get-ADPrincipalGroupmembership (Read-Host "Difference User")
Compare-object $UserReference $UserDifference -property SamAccountName
=> Means the Difference User is a member of a group and the Reference User is not a member.
<= Means the Reference User is a member of the group and the Difference User is not a member.
You can also use the -IncludeEqual parameter to include groups both users are a member of that will be represented by the SideIndicator value of: ==
RE Create Profile in Windows 7
To re create a user profile in windows 7 you must remove the profile from the registry otherwise the user will get a temp profile when they log in next.
To re create the profile you first have to re name the user folder in c:\users so you can retrieve the user data when they login to the new profile
Then you have to delete the profile in Advanced system properties by going to:
control panel>system and security>system
or
Right click computer and select properties
Select the "Advanced system settings" option
In the "User Profiles" field select "Settings"
Then select the profile you would like to remove and select "Delete"
Then open the registry editor by selecting windows button + R and typing regedit and browse to: HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\ProfileList
Select the profile you want to remove right click it and select "delete"
Restart the computer and get the user to log in to create their new profile and copy the users files over form the renamed folder.
Subscribe to:
Posts (Atom)