使用PowerShell从远程服务器获取服务状态

时间:2014-05-02 05:41:53

标签: powershell service remote-server

如何获取需要用户名和密码才能登录的远程计算机的服务状态?

我正在尝试使用以下代码找到解决方案:

$serviceStatus = get-service -ComputerName $machineName -Name $service

get-service命令的默认语法是:

Parameter Set: Default
Get-Service [[-Name] <String[]> ] [-ComputerName <String[]> ] [-DependentServices] [-Exclude <String[]> ] [-Include <String[]> ] [-RequiredServices] [ <CommonParameters>]

Parameter Set: DisplayName
Get-Service -DisplayName <String[]> [-ComputerName <String[]> ] [-DependentServices] [-Exclude <String[]> ] [-Include <String[]> ] [-RequiredServices] [ <CommonParameters>]

Parameter Set: InputObject
Get-Service [-ComputerName <String[]> ] [-DependentServices] [-Exclude <String[]> ] [-Include <String[]> ] [-InputObject <ServiceController[]> ] [-RequiredServices] [ <CommonParameters>]

这没有用户名和密码的选项。

4 个答案:

答案 0 :(得分:9)

据我所知,Get-Service doesn't accept a credential parameter。但是,您可以通过WMI

执行此操作
$cred = get-Credential -credential <your domain user here>
Get-WMIObject Win32_Service -computer $computer -credential $cred

评论后更新:

您可以将凭据作为securestring保存到文件中,然后重新加载它以手动创建凭据而无需提示。请参阅信息here

答案 1 :(得分:5)

这也有效:

{{1}}

请注意,密码不应位于安全字符串中。

答案 2 :(得分:0)

Invoke-Command可以做到这一点。

$Cred = Get-Credential -Credential "<your domain user here>"
$ScriptBlock = {
    param($Service)
    Get-Service -Name "$Service"
}
$ServiceStatus = Invoke-Command -ComputerName $MachineName -Credential $Cred -ScriptBlock $ScriptBlock -ArgumentList "$Service"

请注意,为了将变量$Service传递到脚本块中的Get-Service cmdlet,必须事先声明脚本块,并在{{ 1}}块。然后,您可以通过$Service参数将param参数传递到脚本块中。

$Service还通过为-ArgumentList参数提供逗号分隔的计算机列表来支持在多台服务器上运行。

答案 3 :(得分:0)

就像Morton的答案一样,但是使用New-PSDrive作为共享,然后删除共享以进行整理。

New-PSDrive -Name tempDriveName –PSProvider FileSystem –Root “\\server\c$” -Credential $Cred
$service = Get-Service -Name $serviceName -ComputerName $MachineName 
Remove-PSDrive -Name tempDriveName