Por que alguns servidores falham ao executar o "Get-Service"?

3

Eu tenho vários servidores conectados em VPN ao meu servidor host. Todos executam o windows 7. Estou executando em loop Get-Service -ComputerName $server -Name Spooler para cada servidor. Por alguma razão, alguns deles retornam o serviço com sucesso e alguns não dizem Get-Service : Cannot find any service with service name 'Spooler' . Eu sei para 100% que todos eles têm Spooler service.

Provavelmente, algo está configurado de forma diferente nos servidores que não retornam o serviço. Alguém pode aconselhar o que devo verificar?

    
por theateist 20.02.2017 / 04:03

2 respostas

1

Uma causa provável é que você não tem privilégios suficientes para consultar serviços na máquina remota. Tente sem especificar o argumento -Name , por exemplo:

get-service -ComputerName TEST-CLIENT

Onde TEST-CLIENT é o nome do seu servidor. E veja se você recebe uma mensagem de erro melhor, por exemplo:

get-service : Cannot open Service Control Manager on computer 'TEST-CLIENT'. This operation might require other privileges.

Se este for o seu problema, você pode tentar conceder acesso remoto de administrador e / ou administrador à sua conta na máquina remota. Sem mais detalhes sobre sua configuração, não posso fornecer uma solução mais exata.

    
por 20.02.2017 / 05:05
0

Além do problema de privilégios, acho que o próximo culpado mais provável é que sua variável $ server não é do tipo correto.

Procurando no arquivo de ajuda de Get-Service. Podemos ver que -ComputerName só aceita valores String.

    PS C:\Temp> Get-Help Get-Service -Parameter Computername

    -ComputerName **<String[]>**
Gets the services running on the specified computers. The default is the local computer.

Type the NetBIOS name, an IP address, or a fully qualified domain name (FQDN) of a remote computer. To specify the local computer, type the computer name, a dot (.), or localhost.

This parameter does not rely on Windows PowerShell remoting. You can use the ComputerName parameter of Get-Service even if your computer is not configured to run remote commands.

Required?                    false
Position?                    named
Default value                None
Accept pipeline input?       True (ByPropertyName)
Accept wildcard characters?  false

Se você definir sua variável $ server usando Get-ADComputer, a variável provavelmente contém o tipo de objeto "Microsoft.ActiveDirectory.Management.ADComputer"

    PS C:\Temp> Get-ADComputer -Identity AE-HTPC | Get-Member
       TypeName: Microsoft.ActiveDirectory.Management.ADComputer

Se você pegar o objeto e expandir o conteúdo para String, você terá uma variável que o Get-Service possa entender.

    PS C:\Temp> Get-ADComputer -Identity AE-HTPC | Select-Object -
    ExpandProperty Name | Get-Member
       TypeName: System.String

...

Resultados replicados ...

    *PS C:\Temp> $server = Get-ADComputer -Identity AE-HTPC

    PS C:\Temp> Get-Service -ComputerName $server
    Get-Service : Cannot open Service Control Manager on computer 'CN=AE-
    HTPC,OU=HTPC,OU=Workstations,OU=All Clients,DC=ae,DC=kingdom,DC=com'.         
    This operation might require other privileges.
    At line:1 char:1
    + Get-Service -ComputerName $server
    + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo          : NotSpecified: (:) [Get-Service], InvalidOperationException
+ FullyQualifiedErrorId : System.InvalidOperationException,Microsoft.PowerShell.Commands.GetServiceCommand

    PS C:\Temp> $server = Get-ADComputer -Identity AE-HTPC | Select-Object -ExpandProperty name

    PS C:\Temp> Get-Service -ComputerName $server
    Status   Name               DisplayName                           
    ------   ----               -----------                           
    Stopped  AdobeFlashPlaye... Adobe Flash Player Update Service     
    Stopped  AJRouter           AllJoyn Router Service*   

Espero que esta resposta não seja detalhada demais. É o meu primeiro. Deixe-me saber se isso ajuda.

    
por 08.01.2018 / 02:51