17 Jul 2009 @ 1:57 PM 
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 ;-) the RSS feed reader. First I build the script with a external xml script that you needed to load in order to execute the rest of the script so you could use a String method to  read the XML file form a URL. This didn’t work! It was nasty….

<Types>
  <Type>
    <Name>System.String</Name>
      <Members>
        <ScriptMethod>
          <Name>GetRss</Name>
          <Script>
            $wc = New-Object Net.WebClien
            ([xml] ($wc.DownloadString($this))).rss
          </Script>
        </ScriptMethod>
      </Members>
  </Type>
</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.

  1. How can i display HTML output without using Internet Explorer
  2. Why doesn’t it work with Wordpress RSS feeds? The discription field can not be parsed to HTML because it doesn’t contain any data.

These questions bug me so if any of you know the answer to the problems above don’t hesitate to comment to this post.

How does the script work?

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.

image

What was I thinking?

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()
Tags Tags: ,
Categories: PowerShell
Posted By: Richard
Last Edit: 20 Jul 2009 @ 06 28 PM

EmailPermalinkComments (0)

 

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
type library. (Exception from HRESULT: 0×80028018
(TYPE_E_INVDATAREAD))"

 

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()
Tags Tags: ,
Categories: PowerShell
Posted By: Richard
Last Edit: 13 Jul 2009 @ 07 44 PM

EmailPermalinkComments (0)
 13 Jul 2009 @ 10:52 AM 

Found this Powershell toolbar trough a co-worker.

image

This Powershell toolbar gives you quick access to Powershell resources like:

  • Powershell books
  • Blogs about powershell
  • Powershell training programs
  • Powershell Forums

You can download the toolbar here!

Tags Tags: ,
Categories: PowerShell
Posted By: Richard
Last Edit: 02 Sep 2009 @ 08 47 AM

EmailPermalinkComments (0)
\/ More Options ...
Change Theme...
  • Users » 62
  • Posts/Pages » 19
  • Comments » 1
Change Theme...
  • VoidVoid « Default
  • LifeLife
  • EarthEarth
  • WindWind
  • WaterWater
  • FireFire
  • LightLight

About me



    No Child Pages.