我有几个服务器通过 VPN 连接到我的主机服务器。所有服务器都运行 Windows 7。我为每个服务器循环运行Get-Service -ComputerName $server -Name Spooler
。由于某种原因,其中一些服务器成功返回服务,而另一些服务器没有返回Get-Service : Cannot find any service with service name 'Spooler'
。我 100% 知道它们都有Spooler
服务。
可能是服务器上的某些配置不同,导致无法返回服务。有人能建议我应该检查什么吗?
答案1
可能的原因是您没有足够的权限来查询远程计算机上的服务。请尝试不指定参数-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.
如果这是您的问题,您可以尝试授予远程登录和/或管理员访问权限,以访问远程计算机上的您的帐户。如果没有更多有关您的设置的详细信息,我无法提供更准确的解决方案。
答案2
除了权限问题之外,我认为下一个最可能的原因是您的 $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
如果您抓住对象并将内容扩展为字符串,那么您将拥有一个 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*
我希望这个答案不是太详细。这是我的第一个答案。如果它有帮助,请告诉我。