Crit Scratch
Crit Scratch

Reputation: 43

Formatting the results of a powershell script

How can i add the server name at the left of each line result on this script?. Thank you!

$servers = Get-Content -path .\Machines.txt
[pscustomobject]$result = @()  
$subresult =
ForEach ($server in $servers) 
{
Set-Service -computername $servers -Name sacsvr -StartupType Disabled -PassThru
}
$result = $subresult 
$result | Out-File local_group_members.csv

This is an example result:

Status   Name               DisplayName                           
------   ----               -----------                           
Stopped  sacsvr             Special Administration Console Helper 
Stopped  sacsvr             Special Administration Console Helper 
Stopped  sacsvr             Special Administration Console Helper 

Upvotes: 1

Views: 60

Answers (2)

TheMadTechnician
TheMadTechnician

Reputation: 36332

Alternatively you can just add a property to the objects you're outputting right now. Pipe your Set-Service to Add-Member like this:

Set-Service -computername $servers -Name sacsvr -StartupType Disabled -PassThru | Add-Member -MemberType NoteProperty -Name 'Server' -Value $Server -PassThru

Now each object that you pass to $subresult has a new property Server that is the name of the server it was run on. You'll probably want to pipe through Select when outputting to have the order you want.

$SubResult | Select Server, Status, Name, DisplayName | Export-CSV 'local_group_members.csv' -NoType

Upvotes: 2

Anthony Neace
Anthony Neace

Reputation: 26021

You can arbitrarily re-order or add to your output with Select-Object. You can use hash tables to include calculated properties such as your desired ServerName.

So for each server, you can set the services and tag the output with that server name:

ForEach ($server in $servers) 
{
    Set-Service -computername $server -Name sacsvr -StartupType Disabled -PassThru |
    Select @{Name = 'ServerName'; Expression = {$server}}, Name, DisplayName, Status
}

The above is shorthand for:

Select-Object -Property (properties)

The -Property parameter allows you to select any arbitrary grouping of properties on the type of object being piped in. Another parameter, -InputObject allows us to pipe in objects by value.

Upvotes: 1

Related Questions