web-dev-qa-db-ja.com

「Get-Service」の実行時に一部のサーバーが失敗するのはなぜですか?

VPNでホストサーバーに接続されているサーバーがいくつかあります。すべての実行ウィンドウ7。サーバーごとにループGet-Service -ComputerName $server -Name Spoolerで実行しています。何らかの理由で、サービスを正常に返すものもあれば、Get-Service : Cannot find any service with service name 'Spooler'と言わないものもあります。私はそれらすべてがSpoolerサービスを持っていることを100%知っています。

おそらく、サービスを返さないサーバーで何かが異なって構成されています。誰かが私が何をチェックすべきかアドバイスできますか?

2
theateist

考えられる原因は、リモートマシン上のサービスを照会するための十分な特権がないことです。 -Name引数を指定せずに試してください。例:

get-service -ComputerName TEST-CLIENT

ここで、TEST-CLIENTはサーバー名です。そして、より良いエラーメッセージが表示されるかどうかを確認してください。例:

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

これが問題であることが判明した場合は、リモートログオンや管理者アクセスをリモートマシンのアカウントに許可してみてください。セットアップの詳細がなければ、これ以上正確な解決策を提供することはできません。

1
Andy Verhoef

特権の問題は別として、次に考えられる原因は、$ server変数が正しいタイプではないことだと思います。

Get-Serviceのヘルプファイルを調べます。 -ComputerNameは文字列値のみを受け入れることがわかります。

    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

Get-ADComputerを使用して$ server変数を設定する場合、変数にはおそらくオブジェクトタイプ「Microsoft.ActiveDirectory.Management.ADComputer」が含まれています。

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

オブジェクトを取得して内容をStringに展開すると、Get-Serviceが理解できる変数が得られます。

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

....。

複製された結果...

    *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*   

この答えがあまり詳細ではないことを願っています。それは私の最初のものです。それが役立つかどうか教えてください。

0
Eric O