通过PowerShell在远程服务器上获取服务

时间:2016-09-01 13:02:10

标签: powershell service export-to-csv

我一直在尝试开发一个powershell脚本来查询AD中的特定OU,然后获取每个服务上的服务,包括name,status,startmode,startname,description。我已经非常接近但没有得到我期望的结果。有人可以帮忙吗?

问题是如果我专门为一台服务器运行命令,我会得到我想要的结果。如果我在OU中运行所有服务器,则它找不到任何唯一的起始名(只有本地帐户)。我想要一个首先使用服务器名称的CSV

单台计算机的脚本(获得我们想要的结果):

$ServerName = “server01”

Get-WmiObject win32_service -ComputerName $servername | Select @{N="ServerName";E={$ServerName}}, Name, Status, StartMode, StartName, description | Export-Csv "server_Services.csv" -NoTypeInformation

用于查询OU的脚本(仅返回具有本地帐户的服务):

$ServerOU = 'OU=Servers,DC=some,DC=domain'

$ServerList = Get-QADComputer -SearchRoot $ServerOU -SearchScope Subtree

$ServerList | ForEach {   
      $ServerNameTemp = $_.Name
      Get-WMIObject Win32_Service | 
      Select @{N="ServerName";E={$ServerNameTemp}}, StartName, Name, StartMode, Status, description
      } | Export-Csv -NoTypeInformation $ExportFile

2 个答案:

答案 0 :(得分:0)

这应该是我认为的技巧但是下面想要为OU中的每个服务器创建一个文件,它将继续覆盖相同的文件。 我还将Get-QADComputer改为Get-ADComputer,对此问题没有特别需要任务powershell:)

$ServerOU = 'OU=Servers,DC=some,DC=domain'

$ServerList = Get-ADComputer -SearchBase $ServerOU  -Filter *

ForEach ($Server in $Serverlist)
{
          Invoke-Command -ComputerName $Server.Name -ScriptBlock {
              Get-WMIObject Win32_Service | 
              Select @{N="ServerName";E={[System.Net.Dns]::GetHostName()}}, StartName, Name, StartMode, Status, description}
} | Export-Csv -NoTypeInformation $ExportFile

这样它会首先将ti全部发送到变量,然后发送到文件。

$ServerOU = 'OU=Servers,DC=some,DC=domain'
$Services = @()
$ServerList = Get-ADComputer -SearchBase $ServerOU -Filter * 

ForEach ($Server in $Serverlist)
{
          $Services += Invoke-Command -ComputerName $Server.Name -ScriptBlock {
               Get-WMIObject Win32_Service | 
              Select-Object @{N="ServerName";E={[System.Net.Dns]::GetHostName()}}, StartName, Name, StartMode, Status, description }
} 

$Services | Export-Csv -NoTypeInformation $Exportfile

答案 1 :(得分:0)

PS Remoting会在win 2012中自动启用。如果您之前使用任何Win服务器,则需要启用WinRM服务,以启用PowerShell远程处理。如果您尝试对这些服务器使用“Invoke-Command”或任何“* -Session”cmdlet,这一点非常重要。