Curt Chapman
Curt Chapman

Reputation: 11

Get-WMIObject include computer name

I'm trying out a script to go grab installed software on servers remotely. Problem is I want it to output certain attribs including the computer name but I can't seem to figure out how to get the name inserted.

Here is what I have so far...

$servers = Get-QADComputer -SearchRoot "OU=servers,OU=mydomain:-),DC=COM" | Select Name

...which works fine of course. Then...

$servers | % {Get-WMIObject -Class Win32Reg_AddREmovePrograms} | select Displayname,Version,InstallDate,PSComputerName

... which provides the full list of software installed on all servers in that OU but the PSComputerName becomes MY COMPUTER (the computer I run the query from - not the computername of the system being queried). The goal is to have the servername the software is installed on on each line item of software. I've asked professor Google and don't seem to see anything helpful (or anything that I understand anyway).

Hope this makes sense. semi-amateur PS script writer so hopefully this is easy for you guys. Thanks in advance for your help

Upvotes: 1

Views: 8891

Answers (2)

briantist
briantist

Reputation: 47792

Since the object returned from the WMI call doesn't contain the computer you made the request on, you need to include it yourself from include your ForEach-Object (%) block. You could use Add-Member to add it yourself, then do your Select-Object outside like you're doing now:

$servers | % {
    Get-WMIObject -Class Win32Reg_AddREmovePrograms -ComputerName $_ |
    Add-Member -MemberType NoteProperty -Name ComputerName -Value $_ -PassThru
} | select Displayname,Version,InstallDate,ComputerName

Another way is to move the Select-Object to inside the block and do it within there, by creating a new property on the fly with a hashtable:

$servers | % {
    Get-WMIObject -Class Win32Reg_AddREmovePrograms -computername $_ |
    Select-Object Displayname,Version,InstallDate,@{Name='ComputerName';Expression={$_}}
}

Upvotes: 1

user4003407
user4003407

Reputation: 22102

Your command:

Get-WMIObject -Class Win32Reg_AddREmovePrograms

Does not specify computer to query, so it just query computer command being executed on. Thus PSComputerName display MY COMPUTER, as MY COMPUTER is computer being queried. You have to specify -ComputerName parameter to Get-WMIObject cmdlet to query specific computer. And -ComputerName parameter accept array of computer names, so you can put array of computer names to it instead of using ForEach-Object cmdlet and query one computer at time.

Upvotes: 1

Related Questions