Include the attribute custom report (Export-Csv)

I am writing a script to report on disk / the use of the capacity for each virtual machine in the environment.

I try to include a column in the generated report (CSV), which includes the CustomField/CustomAttributes for each virtual computer as well as the news of disk capacity.  The report runs fine, but after you export the report to CSV (Export-Csv using) the newly created column just to the custom attribute field displays the following parameters for each line/entry:

VMware.VimAutomation.ViCore.Impl.V1.Util.ReadOnlyDictionary'2 (System.String, System.String)

When I use out-file it works, but formatting is very obscured...

Here's the function/script that I use, I 'bolded in Red' the part of the script which I believe is the origin of the problem:

Function Get-VMGuestDiskUsage {}
(param
[parameter (valuefrompipeline = $true required = $true, HelpMessage = "enter an entity vm")]
([VMware.VimAutomation.ViCore.Impl.V1.Inventory.VirtualMachineImpl] $VM)
{in process
$ErrorActionPreference = "SilentlyContinue".
foreach ($disk in $VM. Guest.Disks) {}
$objDisk = new-Object System.Object
$objDisk | Add-Member - MemberType NoteProperty-VM name-value $VM. Name
$objDisk | Add-Member - MemberType NoteProperty-name of Volume-value $disk. Path
$objDisk | Add-Member - MemberType NoteProperty-CapacityMB name-value ([math]: round ($disk.) Capacity / 1 MB))
$objDisk | Add-Member - MemberType NoteProperty-FreeSpaceMB name-value ([math]: round ($disk.) FreeSpace / 1 MB))
$objDisk | Add-Member - MemberType NoteProperty - percent use of name-value ('{0:p2}' f (($disk.))) Capacity - $disk. FreeSpace) / $disk. Capacity))
$objDisk | Add-Member - MemberType NoteProperty-name CustomFields-value ($VM. CustomFields)
$objDisk
}
}
}

Get - VM * | Get-VMGuestDiskUsage | Export-Csv - NoTypeInformation c:\scripts\output\test.csv

Any help is greatly appreciated!  Also please let me know if I did a poor job explaining the scenario and what I'm after here.

Hello, jSun311-

Because the property "CustomFields" itself is an object, and you try to get out of the strings to the CSV format, you must manage the object.  You can replace the line in question by something like:

$objDisk | Add-Member -MemberType NoteProperty -Name CustomFields -Value (($VM.CustomFields | %{"$($_.Key) = $($_.Value)"}) -join ",")

Which would result in the output for the column that might look like:

dTestAttrib0 = someValue,dTestAttrib1 = AnotherValue

In other words, there is a list separated by characters of the key/value pairs in the CustomFields property for the virtual machine.

In addition, if you are interested, you might be able to clean up your code a bit by using the '-property ' New-Object parameter.  As:

...foreach ($disk in $VM.Guest.disks) {    New-Object PSObject -Property @{        VM = $VM.Name        Volume = $disk.Path        CapacityMB = [math]::Round($disk.Capacity / 1MB)        FreeSpaceMB = [math]::Round($disk.FreeSpace/1MB)        "Usage%" = "{0:p2}" -f (($disk.Capacity - $disk.FreeSpace) / $disk.Capacity)        CustomFields = ($VM.CustomFields | %{"$($_.Key) = $($_.Value)"}) -join ","    } ## end new-object} ## end foreach...

In this way, you shouldn't bother with calls Add-Member and repetitive cases here.  Enjoy.

Tags: VMware

Similar Questions

  • Include the attribute custom report using the disc

    I'm to customize a script provided by Alan Renouf in his PowerGUI Powerpack.  The script I'm customization in the Powerpack is named 'VM disk sizes.

    His screenplay does everything we need from a point of view of output except that we can also include a custom attribute (Custom Field) VM as well as the information of the disk space.  I have included the below custom script, please note that this is a script/PowerGUI PowerPack we customize but was initially written and provided by Alan Renouf and all credit for this original work must be given to Alan.

    I have included our custom below script and have "in bold Red" line in the script that does not work:

    $AllVMs = get-View - ViewType VirtualMachine. Where {-not $_.} Config.Template}
    $SortedVMs = $AllVMs | Select *, @{N = "NumDisks"; E={@($_. Guest.Disk.Length)}} | Sort-Object-down NumDisks
    {ForEach ($VM to $SortedVMs)
    $Details = new-object PSObject
    $Details | Add-Member-Name name-value $VM.name - Membertype NoteProperty
    $Details | Add-Member - MemberType NoteProperty-name CustomFields-value (($VM.)) CustomFields | %{"$($_. Key) = $($_.) (Value)'}) - join ',')
    $DiskNum = 0
    Foreach ($disk in $VM. Guest.Disk) {}
    $Details | Add-Member-name "drive$ ($DiskNum) path"-MemberType NoteProperty-value $Disk.DiskPath
    $Details | Add-Member-Name "Disk$ ($DiskNum) Capacity (MB)"-MemberType NoteProperty-value ([math]: round ($disk.) Capacity / 1 MB))
    $Details | Add-Member-Name "Disk$ ($DiskNum) FreeSpace (MB)"-MemberType NoteProperty-value ([math]: round ($disk.) FreeSpace / 1 MB))
    $DiskNum ++
    } # end foreach nested
    $Details.PSTypeNames.Clear)
    $Details.PSTypeNames.Add ('Virtu-al'.PowerPack.VMGuestDisks) '
    $Details.PSTypeNames.Add ('Virtu-al'.PowerPack.VM) '
    $Details
    } # end foreach

    When you use the Get view as seen on the first line of the script, it appears the CustomField information not available in the generated view.  How to develop the view to include CustomFields/CustomAttributes for each virtual computer in our environment and then report on their subject?

    Please let me know if I did a poor job explaining the scenario and what I'm after here.  Any help is greatly appreciated!

    Hello, jSun311-

    Yes, you are right - there is no such thing as the "CustomFields" property on a managed object VirtualMachine .  You can always get the names and the corresponding values of the custom fields, you just have a little.  For example, you could change the line to:

    ...## make a comma-separated string that holds the custom field key/value pairs, like "cust0 = myValue0,cust1 = myDateInfo"$Details | Add-Member -MemberType NoteProperty -Name CustomFields -Value (($VM.Value | %{$oCustFieldStrValue = $_; "{0} = {1}" -f ($VM.AvailableField | ?{$_.Key -eq $oCustFieldStrValue.Key}).Name, $oCustFieldStrValue.Value}) -join ",")...
    

    and you should be happy as a clam.

    BTW, this call Get-view on your first line could be optimized a little using the - Filter parameter, like:

    $AllVMs = Get-View -ViewType VirtualMachine -Filter @{"Config.Template" = "false"}
    

    Pretty minimal in this case, but can be very useful in other scenarios of Get-View.  And, you may want to retrieve only the properties of the managed VirtualMachine object that you plan to use, so that the memory usage is reduced to the minimum, speed is optimized, etc. (do you this by using the - Get-mode property param).

    Anyway, how does do for you?

  • Write-Host returns the correct value of the data store while Export-CSV does not work

    Hi team

    I use the attached script to get vcenter inventory. Everything works fine but the output to one gives CSV value like datasore ' VMware.Vim.VirtaulMachineConfigInfoDatastroreUrlPair [of] "instead of the actual data store name.

    But when I do a write-host in the end (instead of export to CSV) I can't find the name of data reflecting properly store.

    Can someone help me understand what Miss me?

    Thanks in advance.

    Olivier ONE

    The problem is that the virtual machine can have several data warehouses and the DatastoreUrl is an object, not a string.

    Try changing:

    $Report.DatastoreName = $VMview.Config.DatastoreUrl

    in:

    $Report.DatastoreName = [string]: join ('',($VMview.Config.DatastoreUrl |) Select-Object name - Expandproperty))

  • User error needs help correction-> repeatable Tag on the attribute custom section

    Okay, I v.6111.  Today, I put manually the tag supplier_eq_create on all the existing attributes in our sections for suppliers can add them when we send the EQS. Unfortuately, I accidentally clicked on the reproducible tag instead of Supplier_EQ_Create in some cases in our environment Export/setting in scene.  When I try to remove its repeatable label, I get the error that says "reproducible State of the line can be changed after the outbreak of the line"... we did not really use the reproducible feature of the tag.  I need to know how I can remove this tag with the attributes of active due to human error before importing it to PROD.  The forum can help me?

    Best, Beckie

    Hi Beckie,

    As long as you are sure that nobody use it you can remove this tag with a database script.

    As with all scripts, make sure that you back up your data.

    With the following script, you can find the lines that contain the reproducible tag of a particular section model

    select rowTemplate.* from eaSectionDynamicTagJoins rowTTagjoin
    inner join commonEARowTemplate rowTemplate on rowTemplate.pkid = rowTTagjoin.fkEAS
    inner join commonLookups tag on tag.pkid = rowTTagjoin.fkTag
    inner join commonEASectionTemplate sectionTemplate on sectionTemplate.pkid = rowTemplate.fkSectionTemplate
    where tag.Name = 'Repeatable' and langID = 0 and Category = 'EASRowDynamicTag'
    and sectionTemplate.id = '';
    

    Tags are related to patterns of row of section customized using the eaSectionDynamicTagJoins table.

    You can remove the tag of a specific line by using the following script

    delete from eaSectionDynamicTagJoins
    where fkEAS = '';
    

    I hope this helps. Let me know if you have any questions,

    Dmitriy

  • Include the user in report currency

    Hello

    I want to know how I can include the code of the user who is signed in currency in the report.
    Is there a session variable, that I can use for this?

    Kind regards

    Ingeborg

    Hi, try VALUEOF (NQ_SESSION. USER_DEFAULT_CURCY)

    -John CRMIT

  • Unable to get the values of the attributes of the Annotation VM Notes and Custom (product)

    Hi Experts,

    Need help to enter the values of the following custom attribute annotation is my script. No problem collecting other information.

    below is the codes where im having issues. There is no output for the VM Notes and the product.

    @{N = "VM Notes";} E={$_. Summary.Config.Annotation}},

    @{N = ' product'; E = {$key = $_.} AvailableField | where {$_.} Name - eq 'Product'} | Select the key - ExpandProperty

    $_. CustomValue | where {$_.} Key - eq $key} | {{Select - ExpandProperty value}}.

    Below is the script when the above code is integrated.

    $vCenterServerName = "test.com"

    SE connect-VIServer $vCenterServerName - xxx-xxxx password user

    $SMTPServer = "xxxx".

    $ToAddress = "xxxxx".

    $FromAddress = $vCenterServerName + "@xxx.com.

    $Subject = ' report VMPath for all VMs in vcenter - tpe.corp.kazootek.com.

    $date = get-Date-format-M - d - yyyy

    $reportlocation = "C:\test\vcenter-xxx-vmpath-$date.csv".

    $vmFields = ' Name ',' Parent ',' Config.Template ',' Runtime.Host ',' ResourcePool ',' Config.Hardware ',' Summary.Storage ',' Runtime.Powerstate ',' Summary.Config.Annotation '.

    # $report = C:\test\tpe_mate1.csv - UseCulture | %{

    $report = get-View - ViewType VirtualMachine-property $vmFields | %{

    $esx = get-view-id $_. Runtime.Host - name of the property, material

    $_ | Select Name,

    @{N = "VM Notes";} E={$_. Summary.Config.Annotation}},

    @{N = ' product'; E = {$key = $_.} AvailableField | where {$_.} Name - eq 'Product'} | Select the key - ExpandProperty

    $_. CustomValue | where {$_.} Key - eq $key} | {{Select - ExpandProperty value}}.

    @{N = 'Template'; E={$_. Config.Template}},

    @{N = 'Center'; E = {}

    $obj = get-view-Id $_. ResourcePool-name of the Parent property

    While ($obj - isnot [VMware.Vim.Datacenter]) {}

    $obj is get-view $obj. Parent - the Parent property name

    }

    $obj. Name

    }},

    @{N = "Cluster"; E = {}

    $obj = get-view-Id $_. ResourcePool-name of the Parent property

    While ($obj - isnot [VMware.Vim.ClusterComputeResource]) {}

    $obj is get-view $obj. Parent - the Parent property name

    }

    $obj. Name

    }},

    @{N = 'Host'; E = {$esx. Name}},

    @{N = "NumCpu"; E={$_. Config.Hardware.NumCpu}},

    @{N = "MemoryGB"; E = {[int]($_.)} Config.Hardware.MemoryMB/1KB)}}.

    @{N = "ProvisionedSpaceGB"; E = {($_.Summary.Storage.Committed+$_.Summary.Storage.Uncommitted)/1 GB)}},

    @{N = "Powerstate"; E={$_. Runtime.PowerState}},

    @{N = "Path"; E = {}

    $current = get-view-Id $_. Parent - the Parent property name

    $path = $_. Name

    {}

    $parent = $current

    if($parent.) Name - only "vm") {$path = $parent. {Name + "\" + $path}

    $current is get-view $current. Parent - the Parent property name

    } While ($current. Parent - no $null)

    [channel]: join ('-',($path.)) Split('\') [0.. ($path). Split('\'). (Count-2)]))

    }},

    @{N = "FolderId"; E={$_. Parent.ToString ()}}.

    @{N = "Manufacturer"; E = {$esx. Hardware.SystemInfo.Vendor}},

    @{N = ' model'; E = {$esx. Hardware.SystemInfo.Model}},

    @{N = "ProcessorType"; E = {$esx. Hardware.CpuPkg [0]. Description}}

    }

    # }

    $report | Export-Csv $reportlocation - NoTypeInformation - UseCulture

    Write-Host "Report exported to csv file" + $reportlocation

    Send-Mailmessage-to $FromAddress - to $ToAddress - subject $Subject - $reportlocation - SmtpServer $SMTPServer attachments

    Write-Host "report was sent by E-mail to '$ToAddress' to ' $FromAddress

    You must add the $vmFields variable AvailableField and CustomValue

    $vmFields = ' Name ',' Parent ',' Config.Template ',' Runtime.Host ',' ResourcePool ',' Config.Hardware ',' Summary.Storage ',.

    'Runtime.Powerstate ',' Summary.Config.Annotation ',' AvailableField', ' CustomValue.

  • inventory including the last report date of extinction

    Hello

    I'm new to power cli (about a week to try) and am trying to run a powercli script that will give me a list of off the virtual computer with specific information, including the date, it has been turned off. My script looks like this:

    @"
    ===============================================================================
    Title: vminventory.ps1
    Description: Export VM Information for vCenter in one. CSV file for import into what anyone
    Use:.\vminventory.ps1
    Date: 15/10/2012
    ===============================================================================
    "@
    # Get virtual center to connect to:
    $VCServerName = Read-Host "What is the name of Virtual Center?"
    $ExportFilePath = Read-Host "where you want to export the data?
    $VC = to connect-VIServer $VCServerName
    $Report = @)
    #$VMs = get-file $VMFolder | Get - VM
    $VMs = get - vm | WHERE-object {$_.powerstate - eq "poweredoff"}
    $Datastores = get-Datastore. Select Name, Id
    $VMHosts = get-VMHost | Select Name, Parent
    # Get turned off from the time of the event:
    {ForEach ($VM to $VMs)
    Get-VIEvent-body $VM - MaxSamples ([int]: MaxValue) | where {$_-is [VMware.Vim.VmPoweredOffEvent]} |
    Group-object - property {$_.} Vm.Name} | %{
    $lastPO = $_. Group | Tri-objet-property Createduserid-descending | Select - 1 first | Select Createduserid - ExpandProperty
    New-object PSObject-property @ {}
    VM = $_. Group [0]. Vm.Name
    "The last Poweroff" = $lastPO
    }
    }
    $VMView = $VM | Get-View
    $VMInfo = {} | Select VMName Powerstate, OS, IPAddress, ToolsStatus, host, Cluster, data store, NumCPU, MemMb, DiskGb, SSGOwner, BUSowner, PowerOFF, Note
    $VMInfo.VMName = $vm.name
    $VMInfo.Powerstate = $vm. PowerState
    $VMInfo.OS = $vm. Guest.OSFullName
    $VMInfo.IPAddress = $vm. Guest.IPAddress [0]
    $VMInfo.ToolsStatus = $VMView.Guest.ToolsStatus
    $VMInfo.Host = $vm.host.name
    $VMInfo.Cluster = $vm.host.Parent.Name
    $VMInfo.Datastore = ($Datastores | where {$_.}) ID-match (($vmview.)) Data store | Select - first 1) | Select the value). Value} | Select name). Name
    $VMInfo.NumCPU = $vm. NumCPU
    $VMInfo.MemMb = [math]: round (($vm.)) (MemoryMB), 2)
    $VMInfo.DiskGb = [math]: Round ((($vm.)) Hard drives | Measure-Object-CapacityKB property-sum). Summary * 1 k / 1 GB), 2)
    $VMInfo.PowerOFF = $lastPO
    $VMInfo.SSGOwner = ($vm |) Get-Annotation - CustomAttribute "SSG system owner"). Value
    $VMInfo.BUSowner = ($vm |) Get-Annotation - CustomAttribute "Business system owner"). Value
    $VMInfo.Note = $vm. Notes
    $Report += $VMInfo
    }
    $Report = $Report | Sort-Object VMName
    IF ($Report - don't ' ') {}
    $report | Export-Csv $ExportFilePath - NoTypeInformation
    }
    $VC = disconnect VIServer $VCServerName - confirm: $False

    I can't get to browse and read the power of the events in the log of the events on the virtual machine?  Someone at - it ideas?

    No, my mistake. Which should have been $lastPO.VM.VM.

    I've corrected the above code

    Update: just noticed another typo, it's fixed

  • error when you use the Export-CSV cmdlet

    Hello

    I get the following error when you try to pipe the output to a csv file

    " Could not bind the parameter argument 'InputObject' because she's nowhere.'"

    The output is placed in the csv file, but I get this error at the end of the script.

    Here is the code:

    ##Variables

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

    $report = @)

    $CSVfile = "d:\Vm_Report.csv".

    $VMs = get-vmhost | Get - VM

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

    {foreach ($VM to $VMs)

    $VMx = get-view $VM.ID

    $HW = $VMx.guest.net

    foreach ($dev to $HW)

    {

    foreach ($ip in $dev.ipaddress)

    {

    $report += $dev. Select @{Name = 'Name'; Expression = {$vm.name}},@{Name = 'IP address'; Expression = {$ip}}, @{Name = 'MAC'; {Expression = {$dev.macaddress}}.

    @{Name = 'Property DL'; Expression = {$vm. CustomFields}}

    }

    }

    }

    $report | Export-CSV - NoTypeInformation $CSVfile

    Thank you

    The attached script implements the test of the $HW variable.

    In my test environment, Export-Csv now works without any problem.

    Give it a try.

  • Virtual MACHINE created on date export csv - get - vm testvm works but says testvm get-vmcreationdate is not found.

    Hello

    I entered the following two functions in my shell powercli

    Two functions I have installed

    function {Get-VMEvents

    < #.

    . Logbook

    Get events for an entity or query all events.

    . Description

    This function returns the events for the entities. It is very similar to

    cmdlet Get-vievent. Please note that get-VMEvent can handle 1 vm at a time.

    You can't send picture of vms in this version of the script.

    . Example of

    Get-VMEvents 0All-types "VmCreatedEvent", "VmDeployedEvent", "VmClonedEvent".

    He will receive all events of type "VmCreatedEvent", "VmDeployedEvent"

    'VmClonedEvent '.

    . Example of

    Get-VMEvents-name 'vm1' - type 'VmCreatedEvent '.

    Will be out of the events of creation of virtual machine: "vm1. It's faster than the vms piping is of

    result of Get - vm. There is no need to use get - vm to move names to get-vmevents.

    Yet, it is OK when you do, it will be just a little more slow < span class = "wp-smiley wp-emoji wp-emoji-blink of eye" title = ';') > ;) </span >

    . Example of

    Get-VMEvents-name 'vm1' - category 'WARNING '.

    Will be out all events for vm: 'vm1. It is is faster than the names of piping of

    cmdlet Get - vm. Category will get-vmevent to search only the defined category

    events.

    . Example of

    Get - vm "vm1 | Get-VMEvents-types "VmCreatedEvent", "VmMacAssignedEvent".

    Shows events for vm1 which will be regarding the events of creation,.

    and events when when / what mac address is assigned

    . VM parameter

    This setting is a unique string that represents the name of the vm. He expects this single vm name

    There in the virtual Center. Now in the first version of the script, it will only load a case

    where there is 1 instance of vm selected name. In the future it will load multiple as

    Well.

    . Types of parameters

    If none is specified, it will return all the events. If specified will return

    Only the events with selected types. For example: "VmCreatedEvent."

    "VmDeployedEvent", "VmMacAssignedEvent" "VmClonedEvent", etc...

    . Category of a parameter

    Possible categories are: warning, info, error. Please use this setting if you

    you want to filter events.

    . Setting all the

    If you need to set this parameter, so command queries all events

    Center Virtual Server virtual machines.

    . Notes

    NAME: VMEvents

    AUTHOR: Grzegorz Kulikowski

    LASTEDIT: 09/11/2012

    DOES NOT? #powercli @ irc.freenode.net

    . Link

    http://psvmware.WordPress.com

    # >

    (param

    [Parameter (ValueFromPipeline = $true)]

    [ValidatenotNullOrEmpty()]

    $VM,

    [String []] $variétés.

    [string] $category,

    [switch] $All

    )

    $si = get-view ServiceInstance

    $em is get-view $si. Content.EventManager

    $EventFilterSpec = new-Object VMware.Vim.EventFilterSpec

    $EventFilterSpec.Type = $types

    {if ($Category)}

    $EventFilterSpec.Category = $category

    }

    If {($VM)

    $EventFilterSpec.Entity = new-Object VMware.Vim.EventFilterSpecByEntity

    switch ($VM) {}

    {$_-is [VMware.Vim.VirtualMachine]} {$VMmoref = $vm.moref}

    {$_-is [VMware.VimAutomation.ViCore.Impl.V1.Inventory.VirtualMachineImpl]} {$VMmoref = $vm. ExtensionData.moref}

    default {$vmmoref = (get - view - ViewType virtualmachine-filter @{'name' = $VM}) .moref}

    }

    $EventFilterSpec.Entity.Entity = $vmmoref

    $em. QueryEvents ($EventFilterSpec)

    }

    If {($All)

    $em. QueryEvents ($EventFilterSpec)

    }

    }

    function get-vmcreationdate {}

    < #.

    . Logbook

    Gets if possible virtual machine created.

    . Description

    This function will return the object with information about the creation time, method, of months,.

    creator of particular virtual machine.

    VMname: SomeVM12

    Createduserid: 10/08/2012 11:48:18

    CreatedMonth: August

    CreationMethod: cloned

    Creator: office\greg

    This function displays NoEvent property in case when your VC do not

    more information on these specific events, or your vm events no longer have

    entries for the subject being created. If your VC data base has more tension date it is no longer possible

    you find this event.

    . Example of

    Get-VMCreationdate - VMnames 'my_vm1', 'My_otherVM '.

    This will return items that contain date information of creating virtual machines with names

    myvm1 and myvm2

    . Example of

    Get-VM-location 'Cluster1 | Get-VMCreationdate

    This will return items that contain information created for virtual machines that are

    Located in Cluster1

    . Example of

    Notice-EEG - viewtype virtualmachine - SearchRoot (get-datacenter "mydc") user.user | Get-VMCreationDate

    This will return items that contain information created for virtual machines that are

    located in the data center "mydc" container If you use this feature in an existing loop where you

    having the cmdlet get-view virtual machines, you can pass them via pipes or as a parameter VMnames.

    . Example of

    $report = get-cluster "cl-01' | Get-VMCreationdate

    $report | Export-csv c:\myreport.csv

    Stores all reported creationtimes object in the array $report variable and export the report to a csv file.

    You can also filter the report before you write in the csv file using select

    $report | Where-Object {$_.} {CreatedMonth - eq "October"} | Select VMName, CreatedMonth

    So that you see only the vms that have been created in October.

    . Example of

    Get-vmcreationdate - VMnames "my_vm1", testvm55

    WARNING: my_vm1 is not found, typo?

    VMname: testvm55

    Createduserid: 05/10/2012 14:24:03

    CreatedMonth: October

    CreationMethod: NewVM

    Creator: home\greg

    In case when you receive virtual machine that is not appropriate in the infrastructure of yor, a warning is displayed.

    You can always store the full text of the report in the $report variable, but it includes all the information on

    dates of creation of the missing vm. A warning always only for your information there is

    probably a typing mistake in the name of the virtual machine.

    . Parameter VMnames

    This parameter must contain objects of virtual machine or strings representing vm

    names. It is possible to supply this function wiith VM objects coming from get - vm or

    get - view.

    . Notes

    NAME: Get-VMCreationdate

    AUTHOR: Grzegorz Kulikowski

    LASTEDIT: 27/11/2012

    DOES NOT? #powercli @ irc.freenode.net

    . Link

    http://psvmware.WordPress.com

    # >

    (param

    [Parameter (ValueFromPipeline = $true, mandatory = $true)]

    [ValidateNotNullOrEmpty()]

    [Object []] $VMnames

    )

    {in process

    {foreach ($vm to $VMnames)

    $ReportedVM = "" | Select VMname Createduserid, CreatedMonth, CreationMethod, creator

    If ($CollectedEvent = $vm |) Get - VMEvents - types "VmBeingDeployedEvent", "VmRegisteredEvent", "VmClonedEvent", "VmBeingCreatedEvent" - ErrorAction SilentlyContinue)

    {

    If ($CollectedEvent.GetType ().) IsArray) {$CollectedEvent = $CollectedEvent |?} {{$_-is [vmware.vim.VmRegisteredEvent]}}

    $CollectedEventType = $CollectedEvent.gettype () .name

    $CollectedEventMonth = "{0: MMMM}" $CollectedEvent.CreatedTime f

    $CollectedEventCreationDate = $CollectedEvent.CreatedTime

    $CollectedEventCreator = $CollectedEvent.Username

    Switch ($CollectedEventType)

    {

    "VmClonedEvent" {$CreationMethod = "Cloned"}

    "VmRegisteredEvent" {$CreationMethod = "RegisteredFromVMX"}

    "VmBeingDeployedEvent" {$CreationMethod = "VmFromTemplate"}

    "VmBeingCreatedEvent" {$CreationMethod = "NewVM"}

    default value {$CreationMethod = 'Error'}

    }

    $ReportedVM.VMname = $CollectedEvent.vm.Name

    $ReportedVM.CreatedTime = $CollectedEventCreationDate

    $ReportedVM.CreatedMonth = $CollectedEventMonth

    $ReportedVM.CreationMethod = $CreationMethod

    $ReportedVM.Creator = $CollectedEventCreator

    } else {}

    If ($?) {

    If ($vm - is [VMware.Vim.VirtualMachine]) {$ReportedVM.VMname = $vm.name} else {$ReportedVM.VMname = $vm.} ToString()}

    $ReportedVM.CreatedTime = 'NoEvent.

    $ReportedVM.CreatedMonth = 'NoEvent.

    $ReportedVM.CreationMethod = 'NoEvent.

    $ReportedVM.Creator = 'NoEvent.

    } else {}

    $ReportedVM = $null

    Write-Warning "$VM is not found, typo?

    }

    }

    $ReportedVM

    }

    }

    }

    Now, if I use the first command

    Get - vm testvm

    I get a response of

    Name PowerState Num CPU MemoryGB

    ----                 ---------- -------- --------

    Receiving TestVM 4 4,000

    But if I do

    Get-vmcreationdate testvm

    he responds with

    WARNING: testvm is not found. misspelling?

    I can't understand why he says this?

    What will be the final objective to query the server vcenter set and export a CSV of the creation of each day VM - is their an easier way to do it?

    I was intending to use

    get - vm | Get-VMCreationDate | Export-Csv-path "d:\\reports\vmcreationinventory.csv ".

    But at the present time, each unique virtual machine is indicating "is not found."

    Attached is an example with a virtual machine called gbvls

    Although you may be better communicate with the author of these functions, from what I can tell, it seems to indicate that none of the specified events were found for these virtual machines.

    You can check if there are targeted with the cmdlet Get-VIEvent ordinary events.

    If you can see events, there could be a problem with the Get-VMEvents function.

    $vmName = 'testvm '.

    $tgtEvents = "VmBeingDeployedEvent", "VmRegisteredEvent", "VmClonedEvent", "VmBeingCreatedEvent".

    $vm = get-VM-name $vmName

    Get-VIEvent-body $vm - MaxSamples ([int]: MaxValue) |

    Where {$tgtEvents - contains $_.} GetType(). Name}

  • Need to include the hardware version of the virtual computer in 'standard' VMReport.ps1 in Excel...

    Need to include the hardware version of the virtual computer in 'standard' VMReport.ps1 in Excel...

    Notice-EEG - viewtype virtualmachine. Select Name, @{N = "HardwareVersion"; E = {'Version $($_.) Config.Version)"}}

    I above for the hardware version of vm, but I need to include in a report 'necessary' as 'necessary '.

    The script of VMReport.ps1 previously published works for all requirements except the hardware version of the virtual machine. I tried to 'embed' the syntax get-view without success.

    Any suggestions on how to get the VM hardware version (and the name of vm State, OS, CPU, IPAddress, host) in an excel spreadsheet?

    I have VDuc script is modified for the rest no problem.

    All points will be awarded as usual.

    Hello

    You can try below also extracts

    $report = @()
    
    Get-VM | %{
        $row = "" | Select VMName, State, OS,  Host, CPU, IPAddress, HWVersion
         $Ver = $_|get-view
         $vmGuest = $_ | Get-VMGuest
         $row.VMname = $_.Name
         $row.HWVersion= $Ver.Config.Version
         $row.IPAddress = $vmGuest.IPAddress[0]
         $row.Host = $_.Host.Name
         $row.OS = $_.Guest.OSFullName
         $row.State = $_.PowerState
         $row.CPU = $_.numcpu
         $report += $row
    }
    $report | Export-CSV c:\VMReportTest1.csv
    

    I hope this helps.

  • Ecommerce custom report

    I want to generate a report that shows a list of orders/purchases a specific product with details...

    -I want to just a specific product

    -It is not matter date, able to export all orders for this product

    -Ideally, it lists how much they paid, over a few basic - name, e-mail contact information, etc...

    for example the data report:

    Product A (assigns one, two, three). ProductARefNumber123; Mr. Smith; [email protected]£4.99

    Product A (three one, attributes); ProductARefNumber123; Ms. Jones, [email protected]£3.99

    Product A (assigns two, three); ProductARefNumber123; Ms. Jones, [email protected]£3.99

    I checked the ecommerce custom report - but it allows to filter a sales order by country or by amount?

    Help...?

    HI Mel,

    Not even promising anything, but there is hope

    Please look out for the next release related ads on our blog.

    m

  • Import of csv - Cluster Get - Export csv

    Hello community vmware,

    I'm looking for a script simple ps import a list of vm (based on a csv file that I feed into it).

    I would then result to a csv file of the 2 column (1 column with the name of the virtual machine) and the other with the corresponding cluster name, in that it is.

    Thanks in advance for the help.

    Try something like this

    It assumes that your input CSV file looks like this

    Name

    VM1

    VM2

    $report = import-Csv - UseCulture names.cvs | %{

    Get-VM-name $_. Name |

    Select Name,@{N='Cluster'; E = {Get-Cluster - VM $_______ |} Select name - ExpandProperty}}

    }

    $report | Export Csv report.csv - NoTypeInformation - UseCulture

  • How to include the name of the cluster?

    I use a function to collect usage statistics of the data store that I've modified it a bit, but how would I modify to add the cluster name, in that data warehouses are sitting?

    Function Get_DataStores {}

    $report = @)

    {foreach ($hostname in get-vmhost)

    Get-VMHost-name $hostname - location $cluster | Get-Datastore. %{

    $info = "" | Select the host, DSName, CapacityMB, FreeSpaceMB, ProvisionedMB, UsedMB

    $info. Host = $hostname

    $info. DSName = $_. Name

    $info. CapacityMB = ($_.) ExtensionData.Summary.Capacity)/1MB

    $info. FreeSpaceMB = ($_.) ExtensionData.Summary.FreeSpace)/1MB

    $info. ProvisionedMB = ((($_.)) ExtensionData.Summary.Capacity) - ($_.) ExtensionData.Summary.FreeSpace)) + ($_.) ExtensionData.Summary.Uncommitted))/1MB

    $info. UsedMB = (($info.)) CapacityMB - $info. (FreeSpaceMB) / 1 MB)

    $report += $info

    }

    }

    $csv = "C:\datastores.csv".

    $report | Export-Csv $csv - NoTypeInformation

    }

    Thanks in advance

    You could do it like this

    Function Get_DataStores {}

    $report = @)

    {foreach ($hostname in get-vmhost)

    $cluster = get-Cluster - VMHost $hostname

    Get-VMHost-name $hostname | Get-Datastore. %{

    $info = "" | Select the Cluster host, DSName, CapacityMB, FreeSpaceMB, ProvisionedMB, UsedMB

    $info. Cluster = $cluster. Name

    $info. Host = $hostname

    $info. DSName = $_. Name

    $info. CapacityMB = ($_.) ExtensionData.Summary.Capacity)/1MB

    $info. FreeSpaceMB = ($_.) ExtensionData.Summary.FreeSpace)/1MB

    $info. ProvisionedMB = ((($_.)) ExtensionData.Summary.Capacity) - ($_.) ExtensionData.Summary.FreeSpace)) + ($_.) ExtensionData.Summary.Uncommitted))/1MB

    $info. UsedMB = (($info.)) CapacityMB - $info. (FreeSpaceMB) / 1 MB)

    $report += $info

    }

    }

    $csv = "C:\datastores.csv".

    $report | Export-Csv $csv - NoTypeInformation

    }

  • Need help with an Export-CSV and ForEach loop

    Hi guys, I'm total NOOB in CLI so please forgive the stupid question.

    I need your expert advice for the very large environment and will award points.

    I have a working script that alerts to our logout ESXi hosts, maintenance and NotResponidng mode

    His job well, but need to send a mail to all three of our VCenters

    Current script only works for a VC at a time. How do I ForEach and always the hose of the same body CSV and HTML

    It would be nice to have an HTML and CSV output that looks like this (assuming that there are currently disconnected etc.)

    I have a set of credentials, that work on all 3 of my VC

    VC1

    Host1 disconnected

    Host2 NotResponding

    VC2

    Host3 disconnected

    Host4 NotResponding

    VC3

    No disconnected/maintemance/notresponding hosts for VC3

    Here is my current code, etc. of the hidden passwords >

    # Clear old sessions
    Disconnect VIServer VC01-confirm: $false

    # VC01 VC check for disconnection and Maintenance mode and does not
    SE connect-VIServer-Server VC01 - FakeUSer username-password FakePassword

    $Report = get-VMhost-State disconnected, maintenance, NotResponding | SELECT name, connectionstate

    # scan info to be html and give him a date stamp

    $ReportHtml = $report | ConvertTo-Html | Out-string

    # Write CSV file and give it a character of data

    $filePath = "C:\PS\Output".
    $filename = "VC01disconnectedHosts".
    $CurrentDate = get-Date
    $CurrentDate = $CurrentDate.ToString ('MM-dd-yyyy_hh-mm-ss')

    $Report | Export-Csv "C:\PS\Output\VC_$Currentdate.csv".

    # Send the info by Mail

    Send-MailMessage-to [email protected] - subject VMwareMorningcheckVC01$ CurrentDate '
    SmtpServer - mail.sanlam.co.za - from [email protected] '
    -BodyAsHtml-body $reportHtml - accessories 'C:\PS\Output\VC_$CurrentDate.csv '.

    Thank you in advance for help.

    You could use a ForEach loop through all vCenters and combine the results in a $1 report.

    Something like that

    $vCenters = "VC01","VC02","VC03"
    
    # Clear old sessionsDisconnect-VIServer $vCenters -Confirm:$false
    
    $report = @()# Check VC VC01 for Disconnects and Maintenance mode and Not Respondingforeach($vc in $vCenters){  Connect-VIServer -Server $vc -User FakeUSer -Password FakePassword
    
      $Report += (Get-VMhost -State Disconnected,Maintenance,NotResponding | Select @{N="VC";E={$vc}},name ,connectionstate)  Disconnect-VIServer $vc -Confirm:$false}
    
    # parse info to be html ,and give it date stamp
    
    $ReportHtml = ($report | ConvertTo-Html | out-String)
    
    # Write out CSV file and give it a Data Stamp
    
    $CurrentDate = Get-Date -Format 'MM-dd-yyyy_hh-mm-ss'$filename = "C:\PS\Output\DisconnectedHosts-$($CurrentDate).csv"
    
    $Report | Export-Csv -Path $filename -NoTypeInformation -UseCulture
    
    # Send info with Mail
    
    Send-MailMessage -To [email protected] -Subject VMwareMorningcheck$CurrentDate `-SmtpServer mail.sanlam.co.za -From [email protected] `-BodyAsHtml -Body $reportHtml -Attachments "C:\PS\Output\DisconnectedHosts-$($CurrentDate).csv"
    

    I added the property vCenter for each line in the report

  • Export-Csv not generating expected results


    I'm trying to generate a report from the script of grouping of NETWORK cards, but given the following code I will have to create Excel object and define its elements?

    The Export-Csv option does not work as I expect in this case. Thank you for your help.  The following code:

    ($VMHost in Get-VMHost){

    Foreach ($vSwitch in ($VMHost | Get-VirtualSwitch )){

    $NicTeaming = Get NicTeamingPolicy -VirtualSwitch $vSwitch

    $obj = new-object psobject

    $obj | Add Member -membertype NoteProperty -name home -value $VMHost

    $obj | Add Member -membertype NoteProperty -name vSwitch -value $vSwitch

    $obj | Add Member -membertype NoteProperty -name NumPorts -value $vSwitch. NumPorts

    $obj | Add Member -membertype NoteProperty -name NumPortsAvailable -value $vSwitch. NumPortsAvailable

    $PG = $vSwitch | Get-VirtualPortGroup

    If ($PG. Count-gt 1){

    $obj | Add Member - membertype NoteProperty -nom échanges -valeur ([string] ::join()«, », ($PG)))

    }

    Else {}

    $obj | Add-Member - membertype NoteProperty-trade name-value $PG

    }

    $obj | Add-Member - membertype NoteProperty - name BeaconInterval-$NicTeaming.BeaconInterval value

    $obj | Add-Member - membertype NoteProperty - name LoadBalancingPolicy-$NicTeaming.LoadBalancingPolicy value

    $obj | Add-Member - membertype NoteProperty - name NetworkFailoverDetectionPolicy-$NicTeaming.NetworkFailoverDetectionPolicy value

    $obj | Add-Member - membertype NoteProperty - name NotifySwitches-$NicTeaming.NotifySwitches value

    $obj | Add-Member - membertype NoteProperty - name FailbackEnabled-$NicTeaming.FailbackEnabled value


    If ($NicTeaming.ActiveNic - gt 1) {}

    $obj | Add-Member - membertype NoteProperty-ActiveNic name-value ([string]: join (",", ($NicTeaming.ActiveNic)))

    }

    Else {}

    $obj | Add-Member - membertype NoteProperty - name ActiveNic-$NicTeaming.ActiveNic value

    }

    If ($NicTeaming.StandbyNic - gt 1) {}

    $obj | Add-Member - membertype NoteProperty-StandbyNic name-value ([string]: join (",", ($NicTeaming.StandbyNic)))

    }

    Else {}

    $obj | Add-Member - membertype NoteProperty - name StandbyNic-$NicTeaming.StandbyNic value

    }

    If ($NicTeaming.UnusedNic - gt 1) {}

    $obj | Add-Member - membertype NoteProperty-UnusedNic name-value ([string]: join (",", ($NicTeaming.UnusedNic)))

    }

    Else {}

    $obj | Add-Member - membertype NoteProperty - name UnusedNic-$NicTeaming.UnusedNic value

    }

    $obj | Add-Member - membertype NoteProperty - name CheckBeacon-$NicTeaming.CheckBeacon value

    $obj

    $Report += $obj

    }

    $Report = $Report | Sort-Object VMName

    IF ($Report - don't ' ")

    {$Report |} {Export-Csv NIC - Teaming.csv}

    }

    You declare $report in a table?

    On the first line

    $report = @)

Maybe you are looking for