Wednesday, August 7, 2013

Powershell and iTunes : Tame iTunes using Powershell.


Hi,

I hope you are doing fine.

Sometime, when you are using window or GUI based programs , you wish for some little bit extra functionality a little bit extra.

I love programming and to be more specific , like to do coding and i love to do automate stuff as per my requirements.

Yesterday night, i was listening to one of my favourite online radio. I use iTunes to listen the internet radios. The most annoying thing is , every time i have to search for a radio and then I am able to listen to it.

At , that time, i think about create a small and tiny script to automate it. So that whenever i open iTunes , it directly start playing my favourite radio channel.

Before i search for iTunes APIs , I think, lets search for iTunes com object and see if we find it.

Luckily i found iTunes.Application as a com object, and from here the fun starts.

Download Script : http://gallery.technet.microsoft.com/scriptcenter/Manage-Apple-iTunes-using-361c20c1

Let’s the fun begin.
Before running the below code, make sure you have iTunes installed on your system.

I added iTunes.Applications as a com object to the $iTune variable.

# Adding iTunes as Powershell Object a
$iTune = New-Object -ComObject iTunes.Application

when you run the above command, this will start iTunes software.

07-08-2013 18-54-37

Now?

Lets play a single .MP3 file.

#Play a single MP3 file.
$iTune.PlayFile("C:\Users\aman.dhally\Music\Bhaag-Milkha-Bhaag\Bhaag Milkha Bhaag - 01 - Gurbani.mp3")

07-08-2013 18-58-19

and here you go , it playing the file which I specified.

How to play an album?

iTunes can play a playlist, to play a whole album, you need to create a album playlist first. and if in PlayFile()
method you have specified a file with is a part of album, then iTunes will play all files in the music album.

# Play a Playlist
$iTune.PlayFile("C:\Users\aman.dhally\Music\Bhaag-Milkha-Bhaag\Bhaag-Milkha-Bhaag.m3u")

Do you want to mute iTunes, no problem.

$iTune.Mute = $true

or un-mute

07-08-2013 19-04-52

and yes, we can set the volume too,

# You are set the Sound volume from 0 to 100
$iTune.SoundVolume = 50

07-08-2013 19-06-54

In the above snapshot the volume is set to 100%.  now lets set it to 50%.

07-08-2013 19-08-09

and here you go.

07-08-2013 19-08-30

Do you want to subscribe to podcasts, yes not a problem

You can see currently i am not subscribed to any podcasts.

07-08-2013 12-12-51

Lets subscribed to our favourite “Powerscripting” podcasts.

# Scubcribe to the podcasts.
$iTune.SubscribeToPodcast("http://feeds.feedburner.com/PowerScripting")
#update Podcast           
$iTune.UpdatePodcastFeeds()

07-08-2013 19-13-15


and here you go.

07-08-2013 12-13-48

Now Lets. come to my main problem.

I love to listen the internet radio channel “Bollywood N Bhangra” on iTunes radio.

07-08-2013 19-15-04

But the problem is every time, i have to search for it to play it and i want iTunes to play it by default.

To find the the URL of my favourite radio channel, i first played it on iTunes and then run the below command.

$iTune.CurrentStreamURL

07-08-2013 19-20-23

i have a URL now. and from that URL i manage to get the M3u file to play.

07-08-2013 19-22-32

Now lets play.

# Opne a web radio
$iTune.OpenURL("http://listen.radionomy.com/bollywood-n-bhangra-usa.m3u")

Bingo.. it is working..

07-08-2013 19-27-07

Now think , that you can write a small Powershell functions and then all plenty of Internet radios of your choice and you just need to type Play-MyFavRadio that’s all. While working on a Powershell console, you can change radio station in iTunes.

Okey, lets try to enable visuals for a fun.

$iTune.VisualsEnabled = $true

07-08-2013 19-28-04

you guys are too demanding, you want to enable Equalizers too?

Ok ok OK.

You can.

# Enable Equlizer
$iTune.EQEnabled = $true

The best thing is when you try to close iTunes it shows a pretty neat warning.

07-08-2013 19-32-56

I have added few tips and trick about iTunes and Powershell in the below Powershell script. Don’t run the script straight away, choose what you need and comment or remove rest.

Download Script : http://gallery.technet.microsoft.com/scriptcenter/Manage-Apple-iTunes-using-361c20c1

Powershell Rocks! and it’s all about automation buddy, it is all about automation.
I hope that you may like this post.
Thanks
Aman Dhally
clip_image001 clip_image002 clip_image003 clip_image005clip_image007

Monday, August 5, 2013

Powershell and MS Office : Setting User Initials in MS Office using Powershell.

 
Hi,

I hope you all are doing fine and enjoying my blog post.

I think we covered lots of things from setting wallpapers using Powershell to the generating reports from Active Directory, and this shows how powerful Powershell is and how we can use it in our various task to automate.

I simply love Powershell, not because it is Powerful but because it is one of (I want to say only) scripting language available, which is easy to learn and easy to use.

Ok, now lets discuss about my today’s task.

If in your company users are heavily using Word, Excel, PowerPoint, then you are aware from how, valuable are comments in.

To add a comment, you have to click on “Review ” tab and need to click on “New Comment” icon.
So now you may be ask, what is the big deal?

Nice question, when few users, or any team , works on a single file, and when they add comments in to the file, the comments are shown as “User Initials”.

So, what if your “User Initials” in Ms Office are wrong, then no one knows who commented an who added the notes.

Download link : http://gallery.technet.microsoft.com/scriptcenter/Fix-Users-Initial-in-35c2801b

05-08-2013 15-59-16

you can see my user initials are set wrong. and when i add comments they are coming as “SAM” rather then “AD”.

05-08-2013 16-31-06

This is a problem, for example, if you have 100+ user or so and incase few one’s user initials are wrong, how you are going to fix it?

Manually? Yes, you can, but, that is not a good option for scripters.

Powershell Script? Awesome, let see how we are do this.
This user initials for Ms Office application are stored in, 
HKCU:\Software\Microsoft\Office\Common\UserInfo” in key “UserInitials”.
In this script.We are going to set this key using “$env:USERNAME” environment variable.
Here is the script code.

# stroing $env:Username in to  a Username variable
$userName =  $env:USERNAME

# Checking the current  Initials in the registry and storing in a variable
$oldInitials = (Get-ItemProperty -Path HKCU:\Software\Microsoft\Office\Common\UserInfo).UserInitials

# spliting username
# if your username had space you can use => $split = $username.Split()
$split = $username.Split(".")

# joining spiting username and getting a first words only
switch ($split.Length)
              {
                     0      { Write-Warning "Not able to find username." ; break         }
                     1      { $newUserInitials =  $split[0].Remove(1)   ; break    }
                     2      { $newUserInitials =  $split[0].Remove(1) + $split[1].Remove(1)   ; break     }
                     3      { $newUserInitials =  $split[0].Remove(1) + $split[1].Remove(1)  + $split[3].Remove(1)    ; break  }
                     4      { $newUserInitials =  $split[0].Remove(1) + $split[1].Remove(1)  + $split[3].Remove(1)  +  $split[4].Remove(1)   ; break  }
                     5      { $newUserInitials =  $split[0].Remove(1) + $split[1].Remove(1)  + $split[3].Remove(1)  +  $split[4].Remove(1)  + $split[5].Remove(1) ; break  }
              }



# if old user intitails not matched with Our one
if ( $oldInitials -ne $newUserInitials )
       {
       set-ItemProperty -Path HKCU:\Software\Microsoft\Office\Common\UserInfo -Name UserInitials -Value $newUserInitials -Force
       Write-Host "User Initials Fixed" -ForegroundColor 'Green'
       }
else
       {
       Write-Host "User Initials matched."
       }
In above screenshot, you have seen that my user initials are set wrong in MS Office.

Now lets run the script and see and if this fix it. , Make sure that you all Office app are closed .

I run the script and and it is showing me that it fixed it.

05-08-2013 16-09-15

Now open any office app and see if this really fixed it.

Seems good.

05-08-2013 16-09-30 

now add some comments.

Yaay.!!!!!. it fixed.

05-08-2013 16-10-56

Download link : http://gallery.technet.microsoft.com/scriptcenter/Fix-Users-Initial-in-35c2801b

Thanks
Aman Dhally
clip_image001 clip_image002 clip_image003 clip_image005clip_image007











Thursday, August 1, 2013

Set Random Wallpaper on your Desktop using Powershell


Hi,

We all love wallpapers. I and love them too.

Sometime they reflect our moods too. I have a huge collection of Wallpapers and i love to change my wallpapers in once or twice a week.

In the time of windows XP, i used to have a software which changed my wallpaper daily when i login to the laptop.

To be frank i never used to have a any desktop changer software in my windows7 laptop.

Few days ago i just write a small snippet code to change my wallpaper on daily basis.

How i do that ,

It is simple, Powershell + Registry and that all.

Download Link : http://gallery.technet.microsoft.com/scriptcenter/Set-Random-Wallpaper-Using-e79e423

Lets do it.

The below variable is storing the path to my Pictures. {you can change it to with yours ,, or you can use Join-Path $env:USERPROFILE  -ChildPath Pictures .}

$myPictureFolder = 'C:\Users\aman.dhally\Pictures\’

Now, i am running Get-ChildItem (dir) on our Picture folder, and using Get-Random cmdlet, i am choosing any single  wallpaper randomly.

$getRandomWallpaper = Get-ChildItem -Recurse $myPictureFolder |where {$_.Extension -eq ".jpg"}  | Get-Random -Count 1

Now we are using Set-ItemProperty to set the select wallpaper to the desktop.
To update the desktop we have to use rundll32.exe and to be frank, until we don’t run the  "

rundll32.exe user32.dll, UpdatePerUserSystemParameters

” code 3-4 time wallpaper wont change. or we reboot the laptop.

Set-ItemProperty -path 'HKCU:\Control Panel\Desktop\' -name wallpaper -value $getRandomWallpaper.FullName 
rundll32.exe user32.dll, UpdatePerUserSystemParameters
Completer Script
$myPictureFolder = 'C:\Users\AD\Pictures\WallPapers\IronMan'

# $myPictureFolder = Join-Path $env:USERPROFILE  -ChildPath Pictures
$getRandomWallpaper = Get-ChildItem -Recurse $myPictureFolder |where {$_.Extension -eq ".jpg"}  | Get-Random -Count 1
Set-ItemProperty -path 'HKCU:\Control Panel\Desktop\' -name wallpaper -value $getRandomWallpaper.FullName 

rundll32.exe user32.dll, UpdatePerUserSystemParameters  
rundll32.exe user32.dll, UpdatePerUserSystemParameters
rundll32.exe user32.dll, UpdatePerUserSystemParameters

Download Linkhttp://gallery.technet.microsoft.com/scriptcenter/Set-Random-Wallpaper-Using-e79e423


Note: I tested this on windows 7 32 bit only.
Thanks
Aman Dhally
clip_image001 clip_image002 clip_image003 clip_image005clip_image007