У меня есть несколько серверов, подключенных к моему хост-серверу через VPN. Все запускаются windows 7. Я работаю в цикле Get-Service -ComputerName $server -Name Spooler
для каждого сервера. По какой-то причине некоторые из них успешно возвращают услугу, а некоторые не говорят Get-Service : Cannot find any service with service name 'Spooler'
. Я знаю на 100%, что у всех есть Spooler
служба.
Возможно, что-то настроено иначе на серверах, которые не могут вернуть услугу. Может кто посоветует, что проверять?
Вероятная причина в том, что у вас недостаточно прав для запроса служб на удаленном компьютере. Попробуйте без указания -Name
аргумент, например:
get-service -ComputerName TEST-CLIENT
Где ТЕСТ-КЛИЕНТ - имя вашего сервера. И посмотрите, получите ли вы более точное сообщение об ошибке, например:
get-service : Cannot open Service Control Manager on computer 'TEST-CLIENT'. This operation might require other privileges.
Если это окажется вашей проблемой, вы можете попробовать предоставить удаленный вход и / или доступ администратора к вашей учетной записи на удаленном компьютере. Без более подробной информации о вашей настройке я не могу дать более точное решение.
Помимо проблемы с привилегиями, я думаю, что следующая наиболее вероятная причина заключается в том, что ваша переменная $ 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
Если вы устанавливаете переменную $ server с помощью Get-ADComputer, переменная, вероятно, содержит тип объекта «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*
Надеюсь, этот ответ не слишком подробный. Это мой первый. Сообщите мне, если это поможет.