如何获取需要用户名和密码才能登录的远程计算机的服务状态?
我正在尝试使用以下代码找到解决方案:
$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>]
这没有用户名和密码的选项。
答案 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