Reputation: 1017
How to get the service status for a remote computer that needs a user name and password to log in?
I am trying to find a solution using the following code:
$serviceStatus = get-service -ComputerName $machineName -Name $service
The default syntax for the get-service
command is:
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>]
This does not have an option for username and password.
Upvotes: 12
Views: 101200
Reputation: 885
Just like Morton's answer, but using New-PSDrive for the share and Remove the share to tidy up.
New-PSDrive -Name tempDriveName –PSProvider FileSystem –Root “\\server\c$” -Credential $Cred
$service = Get-Service -Name $serviceName -ComputerName $MachineName
Remove-PSDrive -Name tempDriveName
Upvotes: 1
Reputation: 1388
Invoke-Command
can accomplish this.
$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"
Note that in order to pass the variable $Service
to the Get-Service
cmdlet in the script block, you have to declare the script block beforehand and define the $Service
variable in the param
block. You can then pass the $Service
argument into the script block via the -ArgumentList
parameter.
Invoke-Command
also supports running on multiple servers by supplying a comma delimited list of computers for the -ComputerName
parameter.
Upvotes: 0
Reputation: 7806
This also works:
net use \\server\c$ $password /USER:$username
$service = Get-Service $serviceName -ComputerName $server
Note that password should not be in a secure string.
Upvotes: 15
Reputation: 43589
As far as I know, Get-Service doesn't accept a credential parameter. However, you can do it through WMI:
$cred = get-Credential -credential <your domain user here>
Get-WMIObject Win32_Service -computer $computer -credential $cred
Update after comment:
You can save credentials as a securestring into a file, and then reload it for manually creating a credential without having a prompt. See information here.
Upvotes: 14