Solved

Get-WMIObject Output issue

Posted on 2014-02-07
6
343 Views
Last Modified: 2014-02-08
Hello All,

Banging my head against the wall with this one...

As part of a script I want to output to a text file the name of a server, the name of a service and the name of the user account that is used to run the service.  Input is obviously a csv or list of servers. just like this:
MyServerName,smstsmgr,LocalSystem

Open in new window


My issue is the output.  All I can get is too much information!  This is what I'm getting:

MyServerName,@{Name=smstsmgr; StartsAs=LocalSystem; DisplayName=ConfigMgr Task Sequence Agent}.name,@{Name=smstsmgr; StartsAs=LocalSystem; DisplayName=ConfigMgr Task Sequence Agent}.Displayname,.Startname
MyServerName,\\MyServerName\root\cimv2:Win32_Service.Name="smstsmgr".name,\\MyServerName\root\cimv2:Win32_Service.Name="smstsmgr".Displayname,\\MyServerName\root\cimv2:Win32_Service.Name="smstsmgr".Startname

Open in new window



This is on two lines in a text file.
This is my code:

function Get-AdminService

{
    [CmdletBinding()]

    Param()

    $Servers = Get-Content -Path $InputDir\RealServers.txt

    foreach ($Server in $Servers)
    {
        $SVC = Get-WMIObject -Class Win32_Service -Computername $Server -Filter "Name = 'smstsmgr'"

        foreach ($Service in $SVC)
        {
            Write-Verbose $Service.name 
            Add-Content -Path $OutputDir\ChgService.txt "$Server,$Service.name,$Service.Displayname,$Service.Startname"
        }
    }
}
Get-AdminService -Verbose

Open in new window


You can see where I'm writing verbose using just a single property and that works fine on the console. If I add multiple properties there it also doesn't work. If I wrap that part with "quotes" and just show a single property, I get a similar extended output to the file I'm generating:
VERBOSE: \\MyServerName\root\cimv2:Win32_Service.Name="smstsmgr".name

Open in new window


Please can anyone point out what I'm doing wrong and how I fix it?

Many thanks
0
Comment
Question by:Tommy_Cooper
  • 3
  • 2
6 Comments
 
LVL 34

Accepted Solution

by:
Dan Craciun earned 500 total points
Comment Utility
I think you should try it like this:
Add-Content -Path $OutputDir\ChgService.txt ($Server + ", " + $Service.name + ", " + $Service.Displayname + ", " + $Service.Startname)

Open in new window


HTH,
Dan
0
 
LVL 3

Author Comment

by:Tommy_Cooper
Comment Utility
Dan,

You're a star!

Thank you.
0
 
LVL 34

Expert Comment

by:Dan Craciun
Comment Utility
Nope, just banged my head against the same wall a while back :)

Glad I could help.
0
What Is Threat Intelligence?

Threat intelligence is often discussed, but rarely understood. Starting with a precise definition, along with clear business goals, is essential.

 
LVL 39

Expert Comment

by:footech
Comment Utility
Solution has already been accepted, but here's an explanation of this behavior...
Inside a string, if you're displaying properties of an object you need to use subexpression notation "$($x.property)".  So you could do the following:
           Add-Content -Path $OutputDir\ChgService.txt "$Server,$($Service.name),$($Service.Displayname),$($Service.Startname)"

Open in new window

I have found a few times that this works better than concatenation (which is what Dan's example uses).
In a case where your objective is to output a .CSV file however, in most cases I would use the Select-Object command to choose what properties I want and pipe that to Export-CSV.
0
 
LVL 3

Author Comment

by:Tommy_Cooper
Comment Utility
Footech - That is excellent. Thank you. If I could give you some points now I would :)
0
 
LVL 34

Expert Comment

by:Dan Craciun
Comment Utility
I'm not versed enough on PS, so I find the $($.) construct harder to read. That's why I prefer concatenation. Easier on my brain :)
0

Featured Post

How to improve team productivity

Quip adds documents, spreadsheets, and tasklists to your Slack experience
- Elevate ideas to Quip docs
- Share Quip docs in Slack
- Get notified of changes to your docs
- Available on iOS/Android/Desktop/Web
- Online/Offline

Join & Write a Comment

Are you one of those front-line IT Service Desk staff fielding calls, replying to emails, all-the-while working to resolve end-user technological nightmares? I am! That's why I have put together this brief overview of tools and techniques I use in o…
Set OWA language and time zone in Exchange for individuals, all users or per database.
Internet Business Fax to Email Made Easy - With eFax Corporate (http://www.enterprise.efax.com), you'll receive a dedicated online fax number, which is used the same way as a typical analog fax number. You'll receive secure faxes in your email, fr…
This video discusses moving either the default database or any database to a new volume.

762 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question

Need Help in Real-Time?

Connect with top rated Experts

6 Experts available now in Live!

Get 1:1 Help Now