Как обновить статус службы на удаленном компьютере в powershell? - PullRequest
0 голосов
/ 24 мая 2018

Этот скрипт должен проверять, запущена ли служба на сервере server1, и запускать ее, если это не так.

$cred = Import-Clixml -Path F:\Powershell\Safe\xxxx.txt 
$server1 = Invoke-Command -ComputerName xxxx -ArgumentList $servicename -ScriptBlock {
    Param($servicename)
    Get-Service -Name $servicename
} -Credential $cred

if ($server1.Status -eq "Running"){
    Write-Host "The Telephony service is started on xxxx"
} else {
    Write-Host "The Telephony service is stopped on xxxx, starting up service"
    Start-Sleep -Seconds 5
    Invoke-Command -ComputerName xxxx -ArgumentList $servicename -ScriptBlock {
        Param($servicename)
        Start-Service -Name $servicename
    } -Credential $cred
    Write-Host "Telephony service is starting xxxx"
    Start-Sleep -Seconds 10
    $server1.Refresh()
    if ($server1.status -eq "Running") {
        Write-Host "Telephony service is now started on xxxx"
    } else {
        Write-Host "The Telephony service failed to start on xxxx please check services and try again."

Я получаю сообщение об ошибке:

Методвызов не удался, потому что [Deserialized.System.ServiceProcess.ServiceController] не содержит метод с именем 'refresh'

Однако при работе при использовании команды $server.Refresh() в локальной службе, а не на удаленном ПКэто работает просто отлично.Как обновить переменную для статуса службы на удаленном ПК?

1 Ответ

0 голосов
/ 24 мая 2018

Вам придется запрашивать сервис каждый раз, когда вы хотите получить статус, используя вторую строку вашего скрипта.Методы удаляются при сериализации, что происходит, когда объекты возвращаются с удаленного сервера.Каждый раз, когда вы хотите получить текущий статус этой службы, вам нужно будет запустить:

$server1 = Invoke-Command -ComputerName xxxxxxxxx -ArgumentList $servicename -ScriptBlock {Param($servicename) Get-Service -name $servicename} -Credential $cred

Или поместить все это в один блок сценариев и сделать все это на удаленном сервере.

$cred = Import-Clixml -path F:\Powershell\Safe\xxxxxxxx.txt 

$SBlock = {
    Param($servicename)

    $Service = Get-Service -name $servicename
    if ($Service.Status -eq "Running"){
        "The Telephony service is started on xxxxxxxxx"
    }
    Else{
        "The Telephony service is stopped on xxxxxxxxx, starting up service"
        start-sleep -seconds 5
        Start-Service -name $servicename
        "Telephony service is starting xxxxxxxxx"
        start-sleep -seconds 10
        $Service.Refresh()
        if ($server1.status -eq "Running"){
            "Telephony service is now started on xxxxxxxxx"
        }
        else {
            "The Telephony service failed to start on xxxxxxxxx please check services and try again."
        }
    }
}

Invoke-Command -ComputerName xxxxxxxxx -ArgumentList $servicename -ScriptBlock $SBlock -Credential $cred
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...