【问题标题】:Getting services on remote servers through powershell通过 powershell 在远程服务器上获取服务
【发布时间】:2016-09-01 13:02:10
【问题描述】:

我一直在尝试开发一个 powershell 脚本来查询 AD 中的特定 OU,然后获取每个服务上的服务,包括名称、状态、启动模式、启动名称、描述。我已经非常接近但没有得到我期望的结果。有人可以帮忙吗?

问题是如果我专门为一台服务器运行命令,我会得到我想要的结果。如果我为 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

【问题讨论】:

    标签: powershell service export-to-csv


    【解决方案1】:

    我认为这应该可以解决问题,但是下面会想为 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 all 发送到一个变量,然后再发送到一个文件。

    $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
    

    【讨论】:

    • 好多了,但连接到某些服务器时遇到问题。获取错误消息:连接到远程服务器失败并显示以下错误消息:客户端无法连接到请求中指定的目标。验证目标上的服务是否正在运行并且正在接受请求。请查阅在目标(最常见的是 IIS 或 WinRM)上运行的 WS-Management 服务的日志和文档。如果目标是 WinRM 服务,在目标上运行以下命令分析和配置 WinRM 服务:“winrm qu ickconfig”。
    • 我也必须使用 QADComputer,ADComputer 不起作用
    • 啊,好吧,如果他们是 server 2003,他们可能还不支持远程 powershell 连接或类似的东西。或者远程powershell被禁用了类似的东西。最后,这并不重要,我相信 Quest powershell 返回的结果与常规 PS 相同。我改变它只是因为我不想安装 quest powershell :P
    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 2014-06-18
      • 1970-01-01
      • 2019-01-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-11-26
      相关资源
      最近更新 更多