



| When I don’t have any real projects to work on I make up stupid tasks to build to keep me occupied. Here is an other one |
|
<Types> |
So after a period of trail and error I made this line:
| $rss = [xml](new-object System.Net.WebClient).DownloadString($Url) |
And of course ones I found the solution I got the same line from my friend “Google” ..snif….snif.. I also added some forms to make it look good. There were two things I couldn’t figure out.
These questions bug me so if any of you know the answer to the problems above don’t hesitate to comment to this post.
| First the script reeds the feed from the URL with the XML file and then reeds the feeds from the channel in the VAR $feeds . |
Then the form is build with all it’s objects like $listbox, $textbox. Also a handler is added to the form. It detects when Return is pressed and when so the form shows de body of the selected post title.
When I was half way building this script I thought what if I use this feed reader on my servers to read an internal blog. Than I could give my servers commands to execute trough a blog…. Ok it is far fetched but I think it can work and that’s my point, Powershell has some boundaries but most of them are in your head I think.
# Select a post title and press return to get the # post body text. $Url = "http://blogs.msdn.com/powershell/rss.xml" $rss = [xml](new-object System.Net.WebClient).DownloadString($Url) $feeds = $rss.rss.channel.item [reflection.assembly]::LoadWithPartialName("System.Windows.Forms") $form = new-object windows.forms.form $form.Text = "RSS titles" $form.StartPosition = "CenterScreen" $form.Size = New-Object System.Drawing.Size(600,400) $form.KeyPreview = $true # initialize listbox $listbox = new-object windows.forms.listbox $listbox.Width = 500 $listbox.Location = New-Object System.Drawing.Size(10,10) # initialize textbox $textbox = new-object system.windows.forms.textbox $textbox.Location = New-Object System.Drawing.Size(10,120) $textbox.Multiline = $true $textbox.Width = 500 $textbox.Height = 200 $textbox.ScrollBars = "Vertical" $textbox.Visible = $false $index = -1 $form.add_keydown({if ($_.KeyCode -eq "Return") { $index = $listbox.selectedindex if ($index -gt -1) { #--------------start one line------------# $textbox.text = $feeds[$index] | Select-Object Description | ConvertTo-Html #--------------end one line--------------# $textbox.Visible = $true } } }) # Fill teh listbox with the RSS titles foreach ($feed in $feeds) { $listbox.items.add($feed.title) } # Add alle objects to the form $form.controls.Add($listbox) $form.Controls.Add($textbox) $form.ShowDialog() |




Here is a small script for something you could do with any other tool but is was fun building it in Powershell. I needed to scan a few subnets in our infrastructure. I know there are tools who can do this task but I thought why not use powershell.
This is what I made of it. The function pinger is straight forward. It does a ping and checks if the output of the pinger function is success. If so the host is up and running otherwise the host is down.
I ran in to a small problem when I wanted to export the output of this powershell script to Microsoft Excel because, I don´t live in the US, my local settings are NL and not en-US. If you use the code found on the Internet you get a error message like this one.
|
Exception calling "Add" with "0" argument(s): "Old format or invalid |
The code below is unusable if you don’t have you local settings set to
en-US.
$a = New-Object -comobject Excel.Application $a.Visible = $True $b = $a.Workbooks.Add() $c = $b.Worksheets.Item(1) $c.Cells.Item(1,1) = "A value in cell A1." $b.SaveAs("C:\Scripts\Test.xls") $a.Quit() |
The code used in my code fixes this by using the invoker function to force the use of en-US in the Excel workbook. I found this invoker function on the Internet but I don’t know who wrote it so thanks to mister/miss X.
function pinger { param($ip) $ping = New-Object System.Net.NetworkInformation.Ping $alive = $ping.send($ip) if ($alive.Status -eq "Success") { $out = $ip + ", Is alive" return $out } else { $out = $ip + ", Is dead" return $out } } function Invoke([object]$m, [string]$method, $parameters) { $ciUS = [System.Globalization.CultureInfo]'en-US' #----------one line start-------------------------- $m.PSBase.GetType().InvokeMember( $method, [Reflection.BindingFlags]::InvokeMethod, $null, $m, $parameters,$ciUS) #----------one line end---------------------------- } #----------------User settings------------------------- $count = 1 $Max = 10 $ipbase="10.10.10." #------------------------------------------------------ $objExcel = New-object -com Excel.Application $objExcel.visible = $True $objWorkbook = Invoke $objExcel.Workbooks Add $objWorksheet = $objWorkbook.Worksheets.Item(1) $objWorksheet.Cells.Item($count,1).Formulalocal = "IP number" $objWorksheet.Cells.Item($count,2).Formulalocal = "State" while($count -le $max) { $out=pinger $ipbase$count $parts=$out.Split(",") $objWorksheet.Cells.Item($count+1,1).Formulalocal = $parts[0] $objWorksheet.Cells.Item($count+1,2).Formulalocal = $parts[1] $count++ } Invoke $objWorkbook SaveAs "C:\Ping states.xlsx" > $null Invoke $objWorkbook Close 0 > $null $objExcel.Quit() |




Found this Powershell toolbar trough a co-worker.
This Powershell toolbar gives you quick access to Powershell resources like:
You can download the toolbar here!


More Options ...
Categories
Tag Cloud
Blog RSS
Comments RSS

Void « Default
Life
Earth
Wind
Water
Fire
Light 