Using PowerCLI for VM disk Stats

First of all - it's really a message to LucD (I know from previous aid tends to prowl this forum ), just thought I'd share, as is all the useful info and any idea LucD at will without doubt be useful for all.

Hi LucD,
First of all - thanks for a great selection of posts on Reporting for Powershell vSphere - well worth the time and a have read for anyone.
I'm certainly not a good PowerShell - but I was able to understand and make changes to my profit - so I thought I would share my findings and ask a few questions.
With your script as a basis - I was able to reach the following which SHOULD let me look at all VMs in VC one statistics collect virtual disk in time for VMS different discs, (IOPS / s, Throuput and latency) I use VC 4.1 and and NFS storage attached, I believe that these statistics are OK but would have your insight on this.
I am very pleased with the script - but he needs more tests on a valid site, rather than my region little test, but I'm sure that from a point of view 'PS' there is more efficiency to win.
First of all - is it possible to get all the statistics at a time-, rather than to make 6 calls per VM? (I'm also sure that the ' += ' a stat the following may not be ideal)
Also - is there a way can control the output to the CSV file, it seems to put the columns in order any, he loves and layout does not appear to be linked to the order of a group object? Can it be controlled so I can have the entries 'value' and 'unit' next to each other
?
Any insight and assistance would be appreciated, and I hope that others will give it a try and let me know if it works for them too.
Thanks again for the inspiration and the vision that made me this far
Tony.
ESX 4.1, VC 4.1, 2.0 options, PowerCLI 4.1.1
# Main Variables
$sVCentre = "IP VC.
$sVCUser = "administrator@domain".
$sVCPwd = "password"
$strVMWildCard = «*»
$strCSVName = "Stats-AvgVMDiskWriteStatsWorkingday.
$strCSVLocation = "c:\". »
# define the start and end times for a day's work.
$today9am = (get-Date-time Minute 9 - 0 - 0 second)
$today5pm = (get-Date-time Minute 17 - 0 - 0 second)
$intStartDay = - 1
$intEndDay = - 1
# Begin script
#Connect to the CR
Connect-VIServer $sVCentre - $sVCUser of the username-password $sVCPwd - ea silentlycontinue
$arrVMs = get - VM | WHERE-object {$_.} Name - like $strVMWildCard}
foreach ($strVM to $arrVMs)
{
Write-Host "get stats for:" $strVM.Name
Write-Host "'-Assembly of latency of writing Stats" "
$stats += get-Stat - $strVM - Stat virtualDisk.totalWriteLatency.average entity - start $today9am. AddDays ($intStartDay) - finish $today5pm. AddDays ($intEndDay)
Write-Host "'-bringing together reading latency statistics '"
$stats += get-Stat - $strVM - Stat virtualDisk.totalReadLatency.average entity - start $today9am. AddDays ($intStartDay) - finish $today5pm. AddDays ($intEndDay)
Write-Host "'-Assembly Stats ARE Ops / s reading" "
$stats += get-Stat - $strVM - Stat virtualDisk.numberReadAveraged.average entity - start $today9am. AddDays ($intStartDay) - finish $today5pm. AddDays ($intEndDay)
Write-Host "'-writing ARE Ops / s Collator Stats" "
$stats += get-Stat - $strVM - Stat virtualDisk.numberWriteAveraged.average entity - start $today9am. AddDays ($intStartDay) - finish $today5pm. AddDays ($intEndDay)
Write-Host "'-Assembly Read Throughput Stats" "
$stats += get-Stat - $strVM - Stat virtualDisk.read.average entity - start $today9am. AddDays ($intStartDay) - finish $today5pm. AddDays ($intEndDay)
Write-Host "'-writing flow Stats of collation" "
$stats += get-Stat - $strVM - Stat virtualDisk.write.average entity - start $today9am. AddDays ($intStartDay) - finish $today5pm. AddDays ($intEndDay)
Write-Host $stats.length
# include data and gather stats on average for the day.
} $groups = $stats | Group-object - property {$_.} Entity, $_. MetricId, $_. Instance}
$report = $groups | % {
New-object PSObject-property @ {}
Description = $_. Group [0]. Description
Entity = $_. Group [0]. Entity
EntityId = $_. Group [0]. EntityId
Instance = $_. Group [0]. Instance
MetricId = $_. Group [0]. MetricId
Timestamp = $_. Group [0]. Timestamp.Date.AddHours ($_.) Group [0]. Timestamp.Hour)
Unit = $_. Group [0]. Unit
Value = [math]: Round (($_.)) Group | Measure-object-propriete value - average). On average, 2)
}
}
#Exporting the report to a CSV file.
$strCSVSuffix = (get-date) m:System.NET.SocketAddress.ToString ('yyyyMMddhhmm')
$strCSVFile = $strCSVLocation + $strCSVName + $strCSVSuffix + "_", ".csv".
$report | Export-Csv $strCSVfile - NoTypeInformation - UseCulture

Thank you, Tony.

(1) Yes, you can call Get-Stat with several characteristics, the downside is that the results will be mixed and you'll need to extract the correct metric/value objects. What's even better, you can also move all the virtual machines in a single call to Get-Stat.

(2) the Export-Csv does not specify the order of the columns in the .csv file, I'm afraid.

The alternative is to write or build the .csv file yourself.

Capture each line as you like it in a string, and then write that string to a file.

This is the update script

# Main Variables $sVCentre = "VC IP" $sVCUser = "administrator@domain" $sVCPwd = "password" $strVMWildCard = "*" $strCSVName = "Stats-AvgVMDiskWriteStatsWorkingday" $strCSVLocation = "c:\"
$metrics = "virtualDisk.totalWriteLatency.average","virtualDisk.totalReadLatency.average",
    "virtualDisk.numberReadAveraged.average","virtualDisk.numberWriteAveraged.average",
    "virtualDisk.read.average","virtualDisk.write.average" # define the start and finish times for a working day. $today9am = (Get-Date -Hour 9 -Minute 0 -Second 0)
$today5pm = (Get-Date -Hour 17 -Minute 0 -Second 0)
$intStartDay = -1$intEndDay = -1## Begin Script

#Connect to VCConnect-VIServer $sVCentre -User $sVCUser -Password $sVCPwd -ea silentlycontinue$arrVMs = Get-VM | where-object {$_.Name -like $strVMWildCard}
$stats = Get-Stat -Entity $arrVMs -Stat $metrics -Start $today9am.AddDays($intStartDay) -Finish $today5pm.AddDays($intEndDay)
# group the data and collate the stats into averages for the day.$groups = $stats | Group-Object -Property {$_.Entity, $_.MetricId, $_.Instance}
$report = $groups | % {
    New-Object PSObject -Property @{
        Description = $_.Group[0].Description
        Entity = $_.Group[0].Entity
        EntityId = $_.Group[0].EntityId
        Instance = $_.Group[0].Instance
        MetricId = $_.Group[0].MetricId
        Timestamp = $_.Group[0].Timestamp.Date.AddHours($_.Group[0].Timestamp.Hour)
        Unit = $_.Group[0].Unit
        Value = [math]::Round(($_.Group | Measure-Object -Property Value -Average).Average, 2)
    }
}
#Exporting the report to a CSV file.$strCSVSuffix = (get-date).toString('yyyyMMddhhmm')
$strCSVFile = $strCSVLocation + $strCSVName + "_" + $strCSVSuffix + ".csv"$report | Export-Csv $strCSVfile -NoTypeInformation -UseCulture

Tags: VMware

Similar Questions

  • Using PowerCLI for virtual disk latencies

    Hi all

    I'm trying to get the disk reading and latencies on some virtual machines

    I'm quite a beginner on PowerCLi apart from some ships a writing utility

    I checked this thread

    http://communities.VMware.com/thread/304827

    But these counters do not work for me

    Can someone please help?

    [vSphere PowerCLI] D:\Program Files\VMware\Infrastructure\vSphere PowerCLI > $stats += Get-Stat - entity "USB-SSAPP" - Stat virtualDisk.totalWriteLatency.average
    Start $today1am. AddDays ($intStartDay) - finish $today4am. AddDays ($intEndDay)
    [vSphere PowerCLI] D:\Program Files\VMware\Infrastructure\vSphere PowerCLI > $stats

    Returns nothing,

    I created all the variables that I'm providing in the command.

    Kind regards

    P

    You might start by checking what statistical level, the period you specified is defined in vCenter.

    "Latency" needs to at least level 2 metrics.

    I guess that "USB-SSAPP" is the name of a host ESX (i)?

  • Using regedit for low disk space window

    My D drive is completely filled, as I use it as support for now. Low disk space appears several times. I followed the steps in regedit to stop him, but under the policy section, there is not explore. What can I do to prevent the window from appearing without free space on my D drive? What can I do if the Solution Explorer is not under the section of the policy? Thank you.

    Remove popups cure the symptoms but not the cause. Here are a few suggestions:

    • Do not use an internal hard drive for backups. Making it largely denies the end of a backup.
    • You get an external 500 GB drive in a box 2.5 "USB when your backups. It costs less than $60,00.
  • Using syntax for the 'If' statement in the query?

    Hi, I work at the end before the PS 9.2 via the request handler and need help

    What I want to do, it's a field of expression to create
    another field of expression that I can use to group on. Maybe the query like
    expressions based on expressions...? Maybe because I'm on an Oracle database, I need to use Decode? If so, how can I use decode?

    Details:

    The field I created Gets the length of the employee in
    service and it works very well

    MONTHS_BETWEEN (SYSDATE, A.SERVICE_DT) / 12

    It works as a character or a numeric field.

    This is the problem... The next field, I would like that the query is one that goes like this...

    IF ((MONTHS_BETWEEN(SYSDATE,A.SERVICE_DT)/12))
    < = 4.99, "minus 5"

    ELSE IF ((MONTHS_BETWEEN(SYSDATE,A.SERVICE_DT)/12)) > = 5 AND
    ((MONTHS_BETWEEN(SYSYDATE,A.SERVICE_DT)/12)) < = 9.99, "5 to 9".

    ELSE IF ((MONTHS_BETWEEN(SYSDATE,A.SERVICE_DT)/12)) > = 10 AND
    ((MONTHS_BETWEEN(SYSYDATE,A.SERVICE_DT)/12)) < = 14.99, '10 to 14', "15 and"
    More»

    I get an error message that "a SQL error has occurred. For more details, please see your system log. Error in running because the SQL query is 972. Message = ORA-00972 identifier is too long (50 380)

    Can you tell me what expression should I use? And please keep in mind that I do not have access to the SQL Developer, so I have to use the query. Thank you!... Mary



    I would recommend using BOX WHEN if you're on an Oracle database.  Something like:

    CASE WHEN ((MONTHS_BETWEEN(SYSDATE,A.SERVICE_DT)/12)) <=4.99 then="" 'less="" than="" 5'="" when="" ((months_between(sysdate,a.service_dt)/12))="">= 5 AND

    ((MONTHS_BETWEEN(SYSDATE,A.SERVICE_DT)/12)) <=9.99 then="" '5="" to="" 9'="" when="" ((months_between(sysdate,a.service_dt)/12))="">= 10 AND ((MONTHS_BETWEEN(SYSDATE,A.SERVICE_DT)/12))<=14.99 then="" '10="" to="" 14'="" else="" '15="" and="" over'="">

    You can find more on the syntax of the CASE on the Oracle's Web site:

    http://docs.Oracle.com/CD/B19306_01/AppDev.102/b14261/case_statement.htm

  • Using PowerCLI for update vROps

    Now that vROps API fully support REST and PowerShell supports the REST, how can I take a power shell script and do something like:

    • import a list of virtual machines from a CSV file
    • vROps by using components REMAINS powerShell
    • Create a custom group in vROps containing these virtual machines?

    Thank you!

    So, you can use Invoke-RESTMethod to call the REST API.  Of that, it returns a json object type that can be analyzed through ConvertFrom-JSON.  On the other hand, you should be able to use ConvertTo-JSON to create the text of the PUBLICATION using Invoke-RESTMethod command.

    I personally have not tapped into this area yet and probably won't be able to, but I used a lot of PowerShell to make interaction REST API without difficulty, this should be no different.

  • Way to the commands per second using PowerCLI

    You can use powerCLI for average orders per second of a virtual machine on a historical period in the same way, as you can with cpu.usagemhz.average?

    Just to clarify:

    Does

    datastore.numberreadaveraged.Average

    give me information on the entire data store connected to the virtual machine? Or is information specific to just the VM I comment on?

    (In this case, I'm eager to get all the IOPs for all all of the virtual disks connected to a specific virtual machine)

    It gives you the IOPS / s specific to entire virtual machine and not the data store.

    Also - I'm the zeros for my data when I launch the present.  I see in vSphere client commands per second only to the data in real time, not for the last day, week or year.  Is it because of my level settings statistics?

    Yes, vCenter 5.0 and place unfortunately don't collect statistics of e/s long term on a per-VM level more.

    However, you can still add these values to return to lower levels of statistics as described in this article:

    http://alpacapowered.WordPress.com/2012/12/17/control-vCenter-performance-counter-collection-and-get-back-VM-IOPS-statistics/

  • Inventory of VC using powercli

    Hi all

    I'm looking for a script using powercli for several stocks of VCenterservers something like Vcenter name, host name, name of vm, the VM OS. Notes VM, information data store and vm tools release in excel or csv format

    Note: for multiple Vcenters

    You can check the PowerCLI version you are running? You can do it with the Get-PowerCLIVersion cmdlet. The latest version is: "VMware vSphere PowerCLI 5.1 Release 2 build 1012425. If you are using an earlier version, then please install the latest version. You can download this version of http://www.vmware.com/go/powercli.

    The

    Set-PowerCLIConfiguration -DefaultVIServerMode Multiple -Scope User -Confirm:$false
    

    command should work in the latest version of PowerCLI.

    Certificate warnings can be removed with the following command:

    Set-PowerCLIConfiguration -InvalidCertificateAction Ignore -Scope User -Confirm:$false
    

    To make the script more quickly, I did a new version using the cmdlet Get-View . This new version is about three times faster than the former.

    & { foreach ($vCenterServer in $DefaultVIServers)
        {
          Get-View -Server $vCenterServer -ViewType VirtualMachine -Filter @{"Config.Template"="False"} -Property Name,
            Runtime.Host,
            Guest.GuestFullName,
            Config.Annotation,
            Datastore,
            Config.Tools.ToolsVersion |
          Select-Object -Property @{N="vCenter";E={$vCenterServer.Name}},
            @{N="VMHost";E={(Get-View -Id $_.Runtime.Host -Property Name).Name}},
            @{N="VM";E={$_.Name}},
            @{N="Guest OS";E={$_.Guest.GuestFullName}},
            @{N="Notes";E={$_.Config.Annotation}},
            @{N="Datastores";E={[string]::Join(',',(Get-View -Id $_.Datastore).Name)}},
            @{N="VMware Tools version";E={$_.Config.Tools.ToolsVersion}}
        }
      } |
    Export-Csv -Path VMsInfo.csv -NoTypeInformation -UseCulture
    
  • It is better to install vMA 5 if I already use PowerCli to do a lot of my script?

    I have been using PowerCLI for awhile now and love it.  I have the vMA 5 installed in my lab at home and I use it a little.  The main reason I used the vMA is to collect some syslogs.  I can also run some scripts perl at the VMAs as well.

    I can't do with PowerCLI from the administrative point of view I can do with the vMA 5?  Thanks for your comments!

    As everyone has already mentioned, if you are familiar and prefer PowerCLI and more importantly if your management platform is Windows, then you must continue using them. vMA is just a device for Linux with installed vCLI which includes vSphere SDK for Perl for convenience, vCLI can be installed on other Windows systems or taken Linux support. Out of vSphere 5, there is not a collector of syslog for Windows or you can use the syslog collector that is in the VCSA, it is no longer supported in vMA 5.

    If you want to run syslog (which the syslog collector is just syslog-ng), you may do so on vMA 5.0 but it would be unsupported. Here are the steps if you haven't seen this already - http://www.virtuallyghetto.com/2011/07/free-linux-windows-syslog-alternatives.html

    At the end of the day, all the features of vSphere are exposed through the vSphere API, this is true if it is consumed as a PowerCLI, vSphere SDK for Perl or any other vSphere SDK. So everything you can do a SDK development kit, you can do in the other. Depends on the platform of choice and what you are comfortable with

  • How to use PowerCLI to activate the function VM NPIV and config setting?

    Hi all:

    I'm having a problem on PowerCLI.

    Can I use PowerCLI for NPIV to the VM config?

    OK, I see. This is possible with the operator "set".

    Note that the script must convert the hexadecimal number WWN in a 64-bit decimal number.

    $vmName = "MyVM"
    $nodeWWN = "28:2b:00:0c:29:00:00:07"
    $portWWN = "28:2b:00:0c:29:00:00:08"
    
    # Convert WWN string to 64-bit number
    $nodeWWN64 = [int64]("0x" + $nodeWWN.Replace(":",""))
    $portWWN64 = [int64]("0x" + $portWWN.Replace(":",""))
    
    # Activate NPIV
    $spec = New-Object VMware.Vim.VirtualMachineConfigSpec
    $spec.NpivDesiredNodeWwns = 0
    $spec.NpivDesiredPortWwns = 0
    $spec.NpivTemporaryDisabled = $false
    $spec.NpivWorldWideNameOp = "set"
    $spec.NpivPortWorldWideName = @($portWWN64)
    $spec.NpivNodeWorldWideName = @($nodeWWN64)
    
    $vm = Get-VM -Name $vmName
    $vm.ExtensionData.ReconfigVM($spec)
    

    You can use the cmdlet New - hard drive to attach a disc RDM. Make sure to specify a type of "gross" on the parameter - DiskType.

    You ID LUN with the parameter - DeviceName.

    ____________

    Blog: LucD notes

    Twitter: lucd22

  • I have no sound on my pc am under XP service pack 3 have tried to use the Windows XP disk to install the driver for the Audio system built-in Audio of P17.sys without success.

    original text: P17.sys

    I have no sound on my pc am under XP service pack 3 have tried to use the Windows XP disk to install the driver for the Audio system built-in Audio of P17.sys without success. I bought Rocketfish to a sound and turns off sound internal on the bios and still get the same error and the show. Help, please...

    Hello

    1. What is the exact error message you get?
    2. Are you not sound on the computer or Rocketfish?

    If you do not get the sound on the computer, then all first activate the sound Board in the BIOS and check. Also, follow the steps in this link and check if that helps:
    http://Windows.Microsoft.com/en-us/Windows/help/no-sound-in-Windows

    Otherwise, I suggest you to give us more information about the issue, so that we can help you better.

    It will be useful.

  • How Windows XP Setup (F6) to use an instead of a floppy drive usb flash drive to find the drivers for a disk sata hard

    Hello

    How can I install Windows XP Setup (F6) use an instead of a floppy drive usb flash drive to find the drivers for a disk sata hard.

    Kind regards
    Imane

    Hi Mike,.

    You can not install it. This must be done using the floppy drive. This feature is available for Vista and Windows 7.

    Visit our Microsoft answers feedback Forum and let us know what you think.

  • I want to use two different images for a button state...

    I want to use two different images for a button state... [Normal] grayscale media social icon outline [rollover] color media social status icon.

    Option 1:

    Create a status button which becomes transparent in the mouse above.

    Have the other underneith of the image.

    Option 2:

    Create a status button with a background image.

    Then select a different background image for each State.

    You can also do cool stuff like Sprite buttons too.

    Example: Adobe Muse Social Sprites by MuseThemes

    Widget page: Adobe Muse Social Sprites by MuseThemes

    Themes of Muse had a great video about these doing just now.

  • All trying to deploy Linux VM model using PowerCLI, during customization in error that "do not provide dns when you create NIC mapping for customization with type 'Linux" ".

    All trying to deploy Linux VM model using PowerCLI, during customization in error that "do not provide dns when you create NIC mapping for customization with type 'Linux" ".

    See my response on the other thread where you posted the same question.

  • Automate the VMs using PowerCLI performance report

    Dear Experts,

    I want to automate the monthly performance report (CPU, memory, disk) of the Virtual Machines using PowerCLI or any other script. Basically, I want to do under the tasks mentioned on monthly basis:

    1. use of the CPU (of all virtual machines) statistical average based monthly (as a percentage). Same report for memory (in percent) and the disc (Kbps).

    2. is it possible folderwise? I have several clients in my support infrastructure and I made segregation in making records and for each of them, this report is necessary.

    3. export only these 3 reports in Excel.

    Details of the infrastructure: ESXi 4.0 and 4.1

    Dear Experts, your kind suggestions will be much appreciated? As it takes a lot of time as we do this manually.

    Thank you very much!

    No problem, with the Group-Object cmdlet we can divide the result by VM.

    $metrics = "cpu.usage.average","mem.usage.average","disk.usage.average"
    $start = (Get-Date).AddDays(-30)
    
    $folders = Get-Folder -Location (Get-Folder -Name vm -Location Datacenters)
    # $folders = Get-Folder -Name Folder1,Folder2,Folder3
    &{foreach($folder in $folders){
        $vms = Get-VM -Location $folder    if($vms){
          $stats = Get-Stat -Entity $vms -Stat $metrics -Start $start -ErrorAction SilentlyContinue      if($stats){
            $stats | Group-Object -Property {$_.Entity.Name} | %{
              New-Object PSObject -Property @{
                Folder = $folder.Name            VM = $_.Values[0]
                CpuAvg = ($_.Group | where {$_.MetricId -eq "cpu.usage.average"} | Measure-Object -Property Value -Average).Average            MemAvg = ($_.Group | where {$_.MetricId -eq "mem.usage.average"} | Measure-Object -Property Value -Average).Average            DiskAvg = ($_.Group | where {$_.MetricId -eq "disk.usage.average"} | Measure-Object -Property Value -Average).Average          }
            }
          }
        }
      }} | Export-Csv C:\report.csv -NoTypeInformation -UseCulture
    
  • Using PowerCLI to recover the capacity of volume comments data

    I am using PowerCLI to declare on the volume letter and free space associated with a guest computer.  I am currently addressing this problem through the extensiondata of the VM guest and then placing the properties I want in a PSObject.

    The question that I am running is that numeric values keep coming up as zero when it is inside the loop for, although they correctly resolve by themselves.  One thing I found interesting was these two upcoming properties like "System.Nullable [long"] when executing GetType(), but I don't know if that is related to the question.

    The script is below, and I changed the font color on the problem section.  I'd appreciate any help.

    # Pre - performance Variables

    $USCulture = New-Object - TypeName System.Globalization.CultureInfo - ArgumentList "en - us".

    $USCulture.NumberFormat.PercentDecimalDigits = 2

    $USCulture.NumberFormat.NumberDecimalDigits = 2

    Guest computers #Get

    [table] $vmguests = $vmcluster | Get - VM

    foreach ($vmguest to $vmguests)

    {

    $vmguestinfo = new-Object - TypeName System.Management.Automation.PSObject

    $vmguestinfo | Add-Member - MemberType NoteProperty-Name "Hostname" - value $vmguest.extensiondata.guest.Hostname

    $vmguestinfo | Add-Member - MemberType NoteProperty-Name "GuestState"-$vmguest.extensiondata.guest.GuestState value

    $vmguestinfo | Add-Member - MemberType NoteProperty-Name 'GuestFullName'-$vmguest.extensiondata.guest.GuestFullName value

    $vmguesthdds = $vmguest. ExtensionData.Guest.Disk

    for ($i = 0; $i - lt $vmguesthdds. Length; $i++)

    {

    $vmguestinfo | Add-Member - MemberType NoteProperty-Name ' DiskPath$ I '-$vmguesthdds [$i] value. DiskPath

    $vmguestinfo | Add-Member - MemberType ScriptProperty-Name ' CapacityGB$ I "-value {($vmguesthdds [$i]. Capacity). ToString ("N", $USCulture)}

    $vmguestinfo | Add-Member - MemberType ScriptProperty-Name ' UsedSpaceGB$ I "-value {[System.Decimal]: Subtract ($vmguesthdds [$i].} Capacity, $vmguesthdds [$i]. FreeSpace). ToString ("N", $USCulture)}

    $vmguestinfo | Add-Member - MemberType ScriptProperty-Name ' FreeSpacePercent$ I "-value {[System.Decimal]: Divide ($vmguesthdds [$i].} FreeSpace), ($vmguesthdds [$i]. Capacity). ToString ("P", $USCulture)}

    }

    [table] $vmguestresults += $vmguestinfo

    }

    Thank you

    Yes, he had a few typos in the code.

    I corrected which, in the code and the attachment.

    Try this one.

    I'm afraid that I can't achieve this GitHub repository.

    A search on your GitHub account does not return either

Maybe you are looking for