VMware Cloud Community
pamiller21
Enthusiast
Enthusiast

PowerShell Help

Hey all,

I have a script that seems to be working to a point but I am attempting to FTP it to a webserver and it fails. Here is the script, take a look please:

#Add Snapins

Add-PSSnapin VMware.VimAutomation.Core

#===========================#

#User Adjustable Variables  #

#===========================#

#Vcenter Logon Info

$ESXserver = "127.0.0.1"

$ESXuser = "USER"

$ESXpassword = "PW"

$date=Get-Date -format "yyyy-MMM-d"

$datetime=Get-Date

$filelocation="E:\Scripts\Temp\VMDK-$date.htm"

#===========================#

#Main Script                #

#===========================#

#Determine if already connected to VCenter and if not connect

if ( $DefaultVIServers.Length -lt 1 )

{

  Connect-VIServer -Server $ESXserver -User $ESXuser -Password $ESXpassword -WarningAction SilentlyContinue | Out-Null

}

# Format html report

$htmlReport = @"

<style type='text/css'>

.heading {

    color:#0B1ABF;

    font-size:14.0pt;

    font-weight:700;

    font-family:Verdana, sans-serif;

    text-align:left;

    vertical-align:middle;

    height:20.0pt;

    width:416pt;

}

.colnames {

    color:white;

    font-size:11.0pt;

    font-weight:700;

    font-family:Tahoma, sans-serif;

    text-align:center;

    vertical-align:middle;

    border:.5pt solid windowtext;

    background:#730000;

}

.lblueback {

    color:windowtext;

    font-size:10.0pt;

    font-family:Arial;

    text-align:left;

    vertical-align:middle;

    border:.5pt solid windowtext;

    background:#B8CCE4;

}

.greyback {

    color:windowtext;

    font-size:10.0pt;

    font-family:Arial;

    text-align:left;

    vertical-align:middle;

    border:.5pt solid windowtext;

    #background:#D8D8D8;

}

</style>

<table style='border-collapse:collapse;table-layout:auto;width:auto;padding:5px'>

<tr style='height:15.0pt'>

   <th colspan=6 height=40 width=auto class="heading">

    <center> VM Datastore Report </center></th>

</tr>

<tr>

  <th class="colnames">VM Name</th>

  <th class="colnames">Host</th>

  <th class="colnames">DataStore</th>

  <th class="colnames">Folder</th>

  <th class="colnames">FileName</th>

  <th class="colnames">Size/GB</th>

</tr>

"@

#get a list of VMs

$vmlist = Get-VM -Server $ESXserver |  where { $_.Name -notmatch "_replica" } | Sort

#counter to manage alternating row color

$colorcounter = 0

#Master part of the script, loops through each VM and creates table with data

ForEach ($vm in $vmlist)

{  

  #If loop to determine color of Rows related to given VM

  if ($colorcounter%2 -eq 0)

    {

        $tablecell = @"

        <td class='lblueback'>

"@

}

  else

    {

        $tablecell = @"

        <td class='greyback'>

"@

}

  

  # Grab VMDK information and the Datastores tied to them.

  $vmdisk = Get-VM $vm | Get-harddisk

  

  # Split out disks where a VM has more than a single disk, also split out the name of the Datastore

  # from the name/path of the vmdk file, then split the Folder Name from the VMDK name.

  $vmdiskDatastore=($vmdisk | %{$_.Filename.Split('[]')[1]})

  $vmdiskfilename=($vmdisk | %{$_.Filename.Split('[]')[2]})

  $vmdiskFolder=($vmdiskfilename | %{$_.Split('/')[0]})

  $vmdiskVMDK=($vmdiskfilename | %{$_.Split('/')[1]})

  $vmdisksize=($vmdisk | %{$_.CapacityKB})

  

  # determine the length of the array so we know if there was more than one hard drive for a given VM.

  $count = $vmdiskfilename.count - 1

  

  # Begin building the html report, inserting the name of the VM in the 1st Column and Host Name into the 2nd

  $htmlReport = $htmlReport +

  "<tr>" + $tablecell + $vm.Name + "</td>" +

  $tablecell + $vm.host.Name + "</td>"

  

  # Based on the number of hard drives in the count value the report is generated in one of two ways

  if($count -le 0)

  {

    # There is only one hard drive so the values will not be in an array we just need to build the table row with data

    $htmlReport = $htmlReport +

    $tablecell + $vmdiskDatastore + "</td>" +

    $tablecell + $vmdiskFolder + "</td>" +

    $tablecell + $vmdiskVMDK + "</td>" +

    $tablecell + $vmdisksize / 1MB + "</tr>"

  }

  else

  {

    # There is more than one hard drive, because of table formatting we handle the 1st row different from the 2nd row.  Data is in an array.

    $htmlReport = $htmlReport +

    $tablecell + $vmdiskDatastore[0] + "</td>" +

    $tablecell + $vmdiskFolder[0] + "</td>" +

    $tablecell + $vmdiskVMDK[0] + "</td>" +

    $tablecell + $vmdisksize[0] / 1MB + "</tr>"

  

  # There is more than one hard drive so we will loop through the array and and place them in the report

    $x=1

    While($x -le $count)

    {

        $htmlReport = $htmlReport +

        "<tr>" + $tablecell + "" + "</td>" +

        $tablecell + "" + "</td>" +

        $tablecell + $vmdiskDatastore[$x] + "</td>" +

        $tablecell + $vmdiskFolder[$x] + "</td>" +

        $tablecell + $vmdiskVMDK[$x] + "</td>" +

        $tablecell + $vmdisksize[$x] / 1MB + "</tr>"

        $x= $x+1

    }

   }

   # value used in conjunction with Foreach and if loop to rotate color in table

   $colorcounter = $colorcounter + 1

}

$htmlreport | Out-File -Append $filelocation

 

# We are done gathering data from vCenter so we disconnect

Disconnect-VIServer -Server $ESXserver -Force:$true -Confirm:$false

#############################

# Add Text to the HTML file #

#############################

ConvertTo-Html –title "VMware VMDK Check " –body "<H1>VMware VMDK Check</H1>" -head "<link rel='stylesheet' href='style.css' type='text/css' />" | Out-File $filelocation

ConvertTo-Html –title "VMware VMDK Check " –body "<H4>Date and time</H4>",$datetime -head "<link rel='stylesheet' href='style.css' type='text/css' />" | Out-File -Append $filelocation

######################

# FTP HTML output #

#####################

#we specify the directory where all files that we want to upload 

$Dir="$filelocation"

#Below for test

#$Dir="C:/Users/administrator/Desktop/tmp/"   

#ftp server

$ftp = "IP"

$user = "USER"

$pass = "PW" 

$webclient = New-Object System.Net.WebClient

$webclient.Credentials = New-Object System.Net.NetworkCredential($user,$pass) 

3 Replies
LucD
Leadership
Leadership

Failing in what sense ?

Any error messages or more clues ?


Blog: lucd.info  Twitter: @LucD22  Co-author PowerCLI Reference

0 Kudos
pamiller21
Enthusiast
Enthusiast

Sorry I reviewed how vague this was and I uploaded a revised script not the working one so the original post is edited.  This script is original built to email the content and not save it anywhere.  I am attempting to revise the script to export all the data as a htm file then save it locally as I do with all my scripts then ship it off via ftp to my webserver.  Currently with this version of the script the file saves but no data is in it.  I am just missing something on how to recall the data and save it.

0 Kudos
LucD
Leadership
Leadership

It looks as if you forgot the -Append on this line

ConvertTo-Html –title "VMware VMDK Check " –body "<H1>VMware VMDK Check</H1>" -head "<link rel='stylesheet' href='style.css' type='text/css' />" | Out-File -Append $filelocation


Blog: lucd.info  Twitter: @LucD22  Co-author PowerCLI Reference