Automation

 View Only
  • 1.  report for multiple vms that are created

    Posted May 05, 2013 08:42 PM

    I have a  vm creation script that I modified to be able to be able to run in a loop using a CSV file to create more than one VM at a time. My initial script would send me an email stating for example:

    VM

    IPaddress

    CPU

    Memory

    ToolsVer

    ToolStatus

    DataStore

    Folder

    ESXiHost

    myvm

    123.45.67.89

    3

    4096

    8384

    toolsOk

    myds

    my-folder

    myesxhost

    The problem I want to try and figure out is how can I get ALL tthe VM's to report on one single email report. Right now since it is looping, every VM I create will send out a report. So if I set it up to build 4 vm's, it will send 4 emails.. I don't like that.

    How my script works pretty much...

    foreach($var in $vmlist){

    script here

    ...

    ...

    ...


    ######################## Create and Send Email Report - Start ###############################################
    #
    Function Create-HTMLTable {
      param([array]$Array)
      $arrHTML = $Array | ConvertTo-Html
      $arrHTML[-1] = $arrHTML[-1].ToString().Replace(‘</body></html>’,"")
      Return $arrHTML[5..2000]
    }

    $output = @()
    $output += '<html><head></head><body><style>table{border-style:solid;border-width:1px;font-size:8pt;background-color:#ccc;width:100%;}th{text-align:left;}td{background-color:#fff;width:20%;border-style:solid;border-width:1px;}body{font-family:verdana;font-size:12pt;}h1{font-size:12pt;}h2{font-size:10pt;}</style>'
    $output += ‘<H2>The vms that were created</H2>'
    $output += ‘<H2> </H2>'
    #$Report = @()
    $Report = New-Object -TypeName system.collections.arraylist
      foreach ($vm in get-vm -Name $var.myvms )
       {
    ...

    ...

    ...

    ...

    ...
      $report.add($reportedvm)|out-null

    }


    if ($HTML -eq "yes") {
      $output += '<p>'
      $output += '<p>'
      $output += Create-HTMLTable $report  $output += '</p>'
      $output += '</body></html>'
      $output | Add-Content $FileHTML
    }
    if ($SendEmail -eq "yes") {
    $body = Get-Content $FileHTML | out-String
    Send-MailMessage –From $EmailFrom –To $EmailTo –Subject $EmailSubject –SmtpServer $EmailSMTP -Body $body -BodyAsHtml }
    #

    }



  • 2.  RE: report for multiple vms that are created

    Posted May 06, 2013 05:11 AM

    Try something along these lines

    Function Create-HTMLTable {

        param([array]$Array)

        $arrHTML = $Array | ConvertTo-Html

        $arrHTML[-1] = $arrHTML[-1].ToString().Replace(‘</body></html>’,"")

        Return $arrHTML[5..2000]

    }

    $output = @()

    $output += '<html><head></head><body><style>table{border-style:solid;border-width:1px;font-size:8pt;background-color:#ccc;width:100%;}th{text-align:left;}td{background-color:#fff;width:20%;border-style:solid;border-width:1px;}body{font-family:verdana;font-size:12pt;}h1{font-size:12pt;}h2{font-size:10pt;}</style>'

    $output += ‘<H2>The vms that were created</H2>'

    $output += ‘<H2> </H2>'

    foreach($var in $vmlist){

        # script here

        ######################## Create and Send Email Report - Start ###############################################

        #

        #$Report = @()

        $Report = New-Object -TypeName system.collections.arraylist

        foreach ($vm in get-vm -Name $var.myvms )

        {

            #

            $report.add($reportedvm)|out-null

        }

        #

    }

    if ($HTML -eq "yes") {

        $output += '<p>'

        $output += '<p>'

        $output += Create-HTMLTable $report $output += '</p>'

        $output += '</body></html>'

        $output | Add-Content $FileHTML

    }

    if ($SendEmail -eq "yes") {

        $body = Get-Content $FileHTML | out-String

        Send-MailMessage –From $EmailFrom –To $EmailTo –Subject $EmailSubject –SmtpServer $EmailSMTP -Body $body -BodyAsHtml

    }



  • 3.  RE: report for multiple vms that are created

    Posted May 06, 2013 05:26 PM

    LucD,

    I'm having a problem seeing any difference than what my original script is?

    I think I did what you suggested but it still sends reports one by one.



  • 4.  RE: report for multiple vms that are created

    Posted May 06, 2013 05:56 PM

    The location of the ForEach loop is different.

    In my version the creation of the HTML header and the call to Create-HTMLTable is done outside the ForEach loop.

    That way you will get 1 HTML header and 1 table with the content from the $report array.



  • 5.  RE: report for multiple vms that are created
    Best Answer

    Posted May 06, 2013 10:37 PM

    ok, i'll have to skip this for now, I can not get it to work.

    thanks