Как я могу добавить имя сервера слева от результата каждой строки в этом скрипте? Спасибо!

$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

Это пример результата:

Status   Name               DisplayName                           
------   ----               -----------                           
Stopped  sacsvr             Special Administration Console Helper 
Stopped  sacsvr             Special Administration Console Helper 
Stopped  sacsvr             Special Administration Console Helper 
1
Crit Scratch 10 Дек 2014 в 01:17

2 ответа

В качестве альтернативы вы можете просто добавить свойство к объектам, которые вы выводите прямо сейчас. Передайте свой Set-Service в Add-Member следующим образом:

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

Теперь каждый объект, который вы передаете $subresult, имеет новое свойство Server, которое является именем сервера, на котором он был запущен. Вы, вероятно, захотите использовать Select при выводе, чтобы иметь желаемый порядок.

$SubResult | Select Server, Status, Name, DisplayName | Export-CSV 'local_group_members.csv' -NoType
2
TheMadTechnician 10 Дек 2014 в 05:55
Спасибо за ваш ответ, он очень полезен. Другой вопрос, как я могу добавить что-то для проверки работоспособности сервера (например, Test-Connection) и поместить результат также в Export-CVS этого скрипта?
 – 
Crit Scratch
10 Дек 2014 в 19:41
Это немного сложнее и лучше подходит для отдельного вопроса. Вам нужно будет проверить, работает ли сервер, а затем либо запустить Set-Service, либо добавить члена, чтобы сказать, что сервер работает, либо вывести, что сервер не работает, потому что, если он не работает, set-service выйдет из строя. .
 – 
TheMadTechnician
10 Дек 2014 в 21:36

Вы можете произвольно изменить порядок или добавить что-либо в вывод с помощью Select-Object. . Вы можете использовать хэш-таблицы, чтобы включить вычисляемые свойства, такие как желаемое имя сервера.

Таким образом, для каждого сервера вы можете установить службы и пометить выходные данные этим именем сервера:

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

Вышесказанное является сокращением для:

Select-Object -Property (properties)

Параметр -Property позволяет выбрать любую произвольную группу свойств по типу передаваемого объекта. Другой параметр -InputObject позволяет нам передавать объекты по значению.

1
Anthony Neace 10 Дек 2014 в 01:56