• 0

Powershell guidance


Question

I've been tasked with trying to produce some statistics and I'd like to try and automate it rather than running these scripts and manually combining the data. I will admit I'm a complete Powershell n00b so I barely know anything so this is probably some elementary crap but trying to find examples to guide me has confused the hell out of me.

 

In a nutshell, I want my script to connect to connect to both a Virtual Machine Manager instance AND a couple of Hyper-V hosts and then export specific VM information. I can do all of this individually but I cannot make it work as one script and ideally as mentioned I want the exported data pumped into a single CSV.

 

I know my problem is going to be because I'm writing this line by line as I would by running it manually and I need to build some sort of intelligence into it. I suspect I need to go down the whole "foreach" route but the few examples I've found I just could not get my head around how you structure each variable within the collection.

 

If someone can do this and it's simple enough it would be great to have notes so I can understand what each line is doing (I understand that is asking for a lot)

 

Import-Module -Name virtualmachinemanager, hyper-v
Get-SCVMMServer -ComputerName "uk-vmmgmt-vmm"
Get-Vm -ComputerName uk-clstr-031, uk-clstr-032
get-VM | select TotalSize, Status, ComputerNameString, CreationTime, CPUCount, Memory, Cloud, Owner | export-csv "C:\Temp\HVExport.csv"

I suspect my next issue will be that some of the attributes are not going to be the same between SCVMM and Hyper-V but one problem at a time :D

Link to comment
Share on other sites

1 answer to this question

Recommended Posts

  • 0

What seems to be stopping me is that the Get-SCVMMServer seems to be interfering in some way with the Get-VM in that it makes the -ComputerName invalid. If I run the Get-VM -ComputerName separately it works fine but when used in conjunction with the SCVMM Server line it stops being valid.

 

I tried my hand at the foreach stuff but I'm pretty much in the same place.

 

Import-Module -Name virtualmachinemanager, hyper-v
$VMM = Get-SCVMMServer -ComputerName "uk-vmmgmt-vmm"
$Host = Get-Vm -ComputerName uk-clstr-031, uk-clstr-032
 $Hosts = @($VMM, $Host)
 foreach ($thing in $Hosts) {
 get-VM | select TotalSize, Status, ComputerNameString, CreationTime, CPUCount, Memory, Cloud, Owner | export-csv "C:\Temp\HVExport.csv"
}

 

However, if someone can explain the element where I've used $thing and that seeming to be accepted despite not being defined anywhere that would be great. It just doesn't seem to make sense. I tried to use the example I found below in which this case $tree is the non-defined variable and can be changed to anything I want and still function.

 

Example;

 

 $trees = @("Alder","Ash","Birch","Cedar","Chestnut","Elm")

 foreach ($tree in $trees) {
   "$tree = " + $tree.length
 }

 

Link to comment
Share on other sites

This topic is now closed to further replies.