Monday, July 29, 2013

Powershell Scripting Techniques : Using While in the Scripts to wait for Network Connection to be Establish.

In any scripting language, the one of the  important things are techniques.
You can call it scripting techniques.
Sometime when you are writing scripts, there are some  certain problems come , and to solve them we need to add a special logics and special techniques to handle them.
Same thing was happen to me, i was writing a script and that script has to run every time users logon, and that script require a server to be available before running the script.
Flow Chart.
The logic is something like below flowchart.
How i solve it.
I solved it using WHILE  script code.
I have added Comments to the below script code, which make it self explanatory.
# Setting bit as False First
$bit = $false
# running while.
while ( $bit -eq $false ) 
        # just a notification
        Write-Host 'Checking Internet Connection.' -ForegroundColor 'Yellow'
        # Testing Network Connection and storing it in to a vraible
        # when we use -QUIET Parameter with Test-Connection, it stored the value in 
        # true or false
        $testInternetConnectivity = Test-Connection -Count 3 "" -Quiet    
        # Test-Connection CMDLET return output in TRUE and False
        # we are assigning the output of $testInternetConnectivity to the $bit Variable
        $bit =     $testInternetConnectivity
        #if the $bit is false then 
        if ( $testInternetConnectivity -ne $true) 
            # show notifications
            Write-Host 'Please check your connection, I am not able to Ping'
            # just adding a new blank line

#sleeping for 10 Seconds

Start-Sleep 10
} #end of IF

# end of while
# if the $bit is $true , then we are good to go.
if ( $bit -eq $true )
# notifications
Write-Host 'Internet is Pingable, we are good to go.' -ForegroundColor 'Green'

#end of IF

# end of the script

You can also download the script code from this link :

Download Link :


I run the script and it found the “” and give us an notification that Internet is Pingable.

29-07-2013 14-50-40

I have disconnected my laptop from internet and run the script, you can check it is continuously running.

29-07-2013 14-51-01

The internet is still disconnected and i run the script and it is showing that Internet connection is not there and in the middle I plugged in the LAN and you can see it found that is working and  script is stopped.

29-07-2013 14-53-07

What i want to accomplished?

My “Main” script run when users login to the laptop. This script copy a .xls file everyday to a server before user start working on a laptop.

The problem was, sometime user not plugged in the LAN cable and sometime they are not connected to WIFI. so most of the time script fails.

So , i want to write a code , by which this script always run until it found a backup server.

To accomplish it i wrote above script code.


I am setting $bit variable to False first.

$bit = $false

Now I am running the lope that, util $bit is equal to false, keep try to ping

while ( $bit -eq $false ) {

              Write-Host 'Checking Internet Connection.' -ForegroundColor 'Yellow'Now I am testing the connection with and storing the result in to variable

$testInternetConnectivity = Test-Connection -Count 3 "" –Quiet

Now , I am updating the $bit varable with the value in $testInternetConnectivity

$bit =        $testInternetConnectivity        

if ( $testInternetConnectivity -ne $true)


Write-Host 'Please check your connection, I am not able to Ping'



When $bit variable became to true the below script code will run.

if ( $bit -eq $true ) {


Write-Host 'Internet is Pingable, we are good to go.'  -ForegroundColor 'Green }


The only confusing bit in the script code is , how are storing the Test-Connection to “” and true or false.

and the trick is when we use –Quiet parameter with Test-Connection cmdlet it give the output in true and false.

Please see the below screenshots are everything will be clear.

In below screenshot, i am storing the output of Test-Connection in to variable , without –Quiet parameter and it is give me full details of Source,Destination, IP address rather then giving me result in True or false.

29-07-2013 14-56-36

Now, i added the –Quiet Parameter and you can see the result is shown is True now.

29-07-2013 14-56-59

Same here.

29-07-2013 14-57-50

29-07-2013 15-05-41

Download Link :

I hope that this trick will help you.


Aman Dhally

clip_image001 clip_image002 clip_image003 clip_image005clip_image007

Wednesday, July 24, 2013

Changing Desktop Wallpaper Positions using Powershell.



Yesterday i blogged about changing Desktop background colour using Powershell.

Today we are going to change the Desktop Wallpaper Position using Powershell. Like the previous post this is again a registry tweak.

Windows Desktop wallpaper has 5 types of  Picture Position.

  1. Center
  2. Fill
  3. Fit
  4. Stretch
  5. Tile

The registry key which retains these settings is HKey_Current_User\Control Panel\Desktop and the registry key name is “WallpaperStyle


Setting “WallpaperStyle” reg key value
Center 0
Fit 6
Fill 10
Stretch 2
Tile 0

Lets try it :)

24-07-2013 19-13-17

I have  centrally positioned wallpaper of my daughter “Manya”  and lets changed the position to FIT one.

Set-ItemProperty 'HKCU:\Control Panel\Desktop' -Name "WallpaperStyle" -Value 6

24-07-2013 19-15-09

now log off and log-in again.

and here you go , the “Picture Position” is set to “Fit.”

24-07-2013 19-16-54

Now lets set the wallpaper position to “Fill”

Here is our code, run it,

Set-ItemProperty 'HKCU:\Control Panel\Desktop' -Name "WallpaperStyle" -Value 10

24-07-2013 19-18-00

log-off and re login again. and our “Picture Position is set to fill :)

24-07-2013 19-18-49

Now, lets set it to the “Stretch”

run the code

Set-ItemProperty 'HKCU:\Control Panel\Desktop' -Name "WallpaperStyle" -Value 2

24-07-2013 19-19-46

log-off and re-login again , and the wallpaper is set to “Stretch” now.

24-07-2013 19-20-30

if you want to set wallpaper as TILE then we have to tweak two keys. the WallpaperStyle" and “TileWallpaper"

To tile the wallpaper, we need to set “TileWallpaper" to 1

run the script code.

Set-ItemProperty 'HKCU:\Control Panel\Desktop' -Name "WallpaperStyle" -Value 0

Set-ItemProperty 'HKCU:\Control Panel\Desktop' -Name "TileWallpaper" -Value 1

24-07-2013 19-23-24 

Log-off and log-in again.

and i can see my cute bunny’s picture all over the monitor.. :) . It successfully positioned as tile.

24-07-2013 19-24-45

Okies. now lets set every thing back to normal.

I am setting wallpaper as “cantered” positioned  and tile key to off.

Set-ItemProperty 'HKCU:\Control Panel\Desktop' -Name "WallpaperStyle" -Value 0

Set-ItemProperty 'HKCU:\Control Panel\Desktop' -Name "TileWallpaper" -Value 0

24-07-2013 19-25-30

log-off and log-in again.

and you can see, there is no tile and wallpaper is centrally positioned.

24-07-2013 19-27-09

I hope that you will find it handy and helpful.

Aman Dhally
clip_image001 clip_image002 clip_image003 clip_image005clip_image007

Tuesday, July 23, 2013

Setting Desktop Background Colour Using Powershell.



Sometime i write about doing some task with Powershell and that task are just a “Registry Tweaks”, and those tweaks can be done using some other methods too.

The idea behind with these post and scripts are, that when we are writing a powershell script, that will be completely powershell based.

For example if i creating an “Windows Customization ” tool and i need to configure few settings, then that tasks should be done by Powershell Not by something else.


My today task was to set Desktop Background to be a specific colour.  First i was searching for how to do this using powershell and after a few minutes i have find that , that can be done by tweaking a registry key.

What we want to automate.?

we want to automate the below marked option “Change Background Colour”.

23-07-2013 19-53-16

What is current background colour.?

You can see in below picture that my current desktop background in “Dark Red”.

23-07-2013 19-57-55

Now lets Change the background to the “Green”.

The RGB Code for Green Colour is : 116 164 2

The Registry Key which holds the setting of background colour is “Background” located at “Hkey_Current_User\Control Panel\Colors”

Set-ItemProperty 'HKCU:\Control Panel\Colors' -Name Background -Value "116 164 2 "

Now run the above in Powershell console.

23-07-2013 20-05-39

Log off from your system and login again.

and here you go :)  after login back, we can see that our Desktop background colour is changed to the Green one :)

23-07-2013 20-08-28

Now, change the background colour of every laptop in your organization to  match with your company’s logos colour.


I hope that you will find it helpful.


Aman Dhally
clip_image001 clip_image002 clip_image003 clip_image005clip_image007

Friday, July 19, 2013

Set Internet Explorer Home Page using Powershell.



Sometime in scripts or or in login scripts we want to set a users Internet Explorer home page to our Intranet site or to some other specific URL.

This became very handy and useful some times.

the code is below.


$myURL = ""
set-ItemProperty -Path 'HKCU:\Software\Microsoft\Internet Explorer\main' -Name "Start Page" -Value $myURL

In above code, we are setting a $myURL in to the registry key “HKCU:\Software\Microsoft\Internet Explorer\main”

Now lets test it.

 19-07-2013 20-45-26

i run the above code, and now my homepage should be set to “”

19-07-2013 20-46-47


Lets try one more, lets try to set google as a home page

19-07-2013 21-45-47

and let open the IE again.

Bingo ! working :)

19-07-2013 21-48-15

I hope you will like this little tweak.

and Happy weekend Guys :)



Aman Dhally



clip_image001 clip_image002 clip_image003 clip_image005clip_image007

Tuesday, July 16, 2013

Powershell and Active Directory : Find empty Active Directory Groups using Powershell.

Hi Everyone.

Finally i come back to India and it is always love to be at home.

My today’s task was to create a list of all empty active directory groups, all groups those are not having any members.

As you know, i don’t like to do the manual tasks, so i decided to use powershell to accomplished this.

Lets do it.

Import Active Directory module.

Import-Module ActiveDirectory

12-07-2013 14-18-16

Once, Active Directory Module is loaded, run the below command.


Get-ADGroup -Filter * -Properties Members  | where { -not $_.Members} | select Name

Now , this will give you the list of all empty groups.

Now we have two groups “*ASKLAILA” and “*Hello Sir” as a result of the above command.

12-07-2013 13-56-01

Now lets cross-verified our result.

12-07-2013 13-57-05

12-07-2013 13-56-20

I hope you find this useful.

Aman Dhally
clip_image001 clip_image002 clip_image003 clip_image005clip_image007