Remote Service Status

This topic contains 5 replies, has 3 voices, and was last updated by Profile photo of Sam Boutros Sam Boutros 2 weeks, 3 days ago.

  • Author
    Posts
  • #65824
    Profile photo of Ali Kahveci
    Ali Kahveci
    Participant

    Hello everybody,

    How can i check remote service status with username and password?

    ServiceName=Tomcat7
    ComputerName=BuildServer
    Username=kahveci
    Domainname=testdomain
    Password=kahvecitest

  • #65827
    Profile photo of Dudebro
    Dudebro
    Participant

    You can create a PSSession and run Invoke-Command against it:

    $Splat           = @{
        TypeName     = "System.Management.Automation.PSCredential"
        ArgumentList = $Username, ( $Password | ConvertTo-SecureString -AsPlainText -Force )
    }
    
    $Credential = New-Object @Splat
    $Session    = New-PSSession -ComputerName $ComputerName -Credential $Credential
    
    Invoke-Command -Session $Session -ScriptBlock { Get-Service -Name $Using:ServiceName }
    
    • #65836
      Profile photo of Ali Kahveci
      Ali Kahveci
      Participant

      Thanks Dudebro for your answer but the codes did not run.

      Errors:
      [iparabuildersrv] Connecting to remote server failed with the following error message : WinRM cannot process the reques
      t. The following error occured while using Kerberos authentication: There are currently no logon servers available to s
      ervice the logon request.
      Possible causes are:
      -The user name or password specified are invalid.
      -Kerberos is used when no authentication method and no user name are specified.
      -Kerberos accepts domain user names, but not local user names.
      -The Service Principal Name (SPN) for the remote computer name and port does not exist.
      -The client and remote computers are in different domains and there is no trust between the two domains.
      After checking for the above issues, try the following:
      -Check the Event Viewer for events related to authentication.
      -Change the authentication method; add the destination computer to the WinRM TrustedHosts configuration setting or us
      e HTTPS transport.
      Note that computers in the TrustedHosts list might not be authenticated.
      -For more information about WinRM configuration, run the following command: winrm help config. For more information,
      see the about_Remote_Troubleshooting Help topic.
      + CategoryInfo : OpenError: (System.Manageme....RemoteRunspace:RemoteRunspace) [], PSRemotingTransportExc
      eption
      + FullyQualifiedErrorId : PSSessionOpenFailed
      Invoke-Command : Cannot validate argument on parameter 'Session'. The argument is null or empty. Supply an argument tha
      t is not null or empty and then try the command again.
      At line:7 char:24
      + Invoke-Command -Session <<<< $Session -ScriptBlock { Get-Service -Name Tomcat7 } + CategoryInfo : InvalidData: (:) [Invoke-Command], ParameterBindingValidationException + FullyQualifiedErrorId : ParameterArgumentValidationError,Microsoft.PowerShell.Commands.InvokeCommandCommand

  • #65865
    Profile photo of Sam Boutros
    Sam Boutros
    Participant

    Ali,

    There's a couple of ways I would do this:
    Option 1. Since you have the name and password of the user who has the necessary rights, you can simply start a PS session under that credential:

    $Username     = 'kahveci'
    $DomainName   = 'testdomain'
    # Never type in passwords in scripts
    
    Start-Process  'c:\windows\system32\WindowsPowerShell\v1.0\PowerShell.exe' -Credential "$DomainName\$Username"
    

    Then run the Get-Service cmdlet in the new PS window:

    whoami
    # shows you're running under testdomain\kahveci crdentials
    
    $ServiceName  = 'Tomcat7'
    $ComputerName = 'BuildServer'
    Get-Service -ComputerName $ComputerName -Name $ServiceName
    

    Option 2. Use PS remoting:

    $ServiceName  = 'Tomcat7'
    $ComputerName = 'BuildServer'
    $Username     = 'kahveci'
    $DomainName   = 'testdomain'
    # Never type in passwords in scripts
    
    try {
        $Session = New-PSSession -ComputerName $ComputerName -Credential "$DomainName\$Username" -ErrorAction Stop
        Invoke-Command -Session $Session -ScriptBlock { Get-Service -Name $Using:ServiceName }
    } catch {
        "Failed to establish PS session with computer '$ComputerName' using the credential '$DomainName\$Username'" 
        $_
    }
    
    $Session | Remove-PSSession
    
    • #65920
      Profile photo of Ali Kahveci
      Ali Kahveci
      Participant

      Thank you Sam for your answer,

      Option 2. Use PS remoting is running succesfully. I can see service status. But i need to set service status to new variable then i will use service status in if condition. How can i set service status to new variable?

    • #65932
      Profile photo of Sam Boutros
      Sam Boutros
      Participant

      This PS object will contain the needed information:

      
      $ServiceName  = 'Tomcat7'
      $ComputerName = 'BuildServer'
      $Username     = 'kahveci'
      $DomainName   = 'testdomain'
      # Never type in passwords in scripts
      
      try {
          $Session = New-PSSession -ComputerName $ComputerName -Credential "$DomainName\$Username" -ErrorAction Stop
          $Result = Invoke-Command -Session $Session -ScriptBlock { Get-Service -Name $Using:ServiceName }
          New-Object -TypeName PSObject -Property @{
              ComputerName       = $ComputerName
              ServiceName        = $Result.Name
              ServiceDisplayName = $Result.DisplayName
              ServiceStatus      = $Result.Status
          } | select ComputerName, ServiceName, ServiceDisplayName, ServiceStatus 
      } catch {
          "Failed to establish PS session with computer '$ComputerName' using the credential '$DomainName\$Username'" 
          $_
      }
      
      $Session | Remove-PSSession
      
      

You must be logged in to reply to this topic.