Неожиданный токен с сервисным скриптом - PullRequest
0 голосов
/ 01 ноября 2018

Я написал скрипт, который управляет службами на сервере и запускает / останавливает и т. Д., В зависимости от Задачи в файле csv, а также изменяет тип запуска, опять же, в зависимости от типа запуска в файле csv.

CSV-файл:

Server,Service,Startup Type,Task
server1,SQL Server Analysis Services (MSSQLSERVER),automatic,start
server2,"SQL Server Analysis Services (MSSQLSERVER), SQL Server Analysis Services (MSSQLSERVER) CEIP",Manual,stop

Сценарий

$csvFile = Import-CSV .\SSAS_services.csv

$ServiceState = Get-Service -Name
$ServiceStartupType = Get-Service | select -property name,starttype

ForEach ($row in $csvFile)
{   
    #checking if service in csv file exists on server
    if (Get-Service $row.Service | Select-Object Name, StartType, Status -ComputerName $row.Server -ErrorAction SilentlyContinue)
    {
        "$row.Service not found on $row.Server!" | out-file .\SSAS_services.txt -Append
    }
    else 
    {
        Get-Service $row.Service | Select-Object Name, StartType, Status -ComputerName $row.Server | select machinename,name | format-table -AutoSize
    }

    # Change the service on the server

    if ($row.Task -eq "stop" -and $row.Server $ServiceState $row.Service -ne "stop")
    {
        Invoke-Command -ScriptBlock { Stop-Service $using:row.Service } -ComputerName    $row.Server -ArgumentList $row
        Start-Sleep 60
    }
    elseif ($row.Task -eq "start" -and $row.Server $ServiceState $row.Service -ne "start")
    {
        Invoke-Command -ScriptBlock { Start-Service $using:row.Service } -ComputerName    $row.Server -ArgumentList $row
        Start-Sleep 60
    }
    elseif ($row.Task -eq "pause" -and $row.Server $ServiceState $row.Service -ne "pause")
    {
        Invoke-Command -ScriptBlock { Suspend-Service $using:row.Service } -ComputerName    $row.Server -ArgumentList $row
        Start-Sleep 60
    }
    elseif ($row.Task -eq "Restart")
    {
        Invoke-Command -ScriptBlock { Restart-Service $using:row.Service } -ComputerName    $row.Server -ArgumentList $row
        Start-Sleep 60
    }

    #changing startup type if different

    if ($row."Startup Type" -eq $ServiceStartupType -ComputerName    $row.Server)
    {
        "Changing Startup Type from '$ServiceStartupType' to $row.'Startup Type'"

        Invoke-Command -ScriptBlock { Set-Service $using:row.Service -StartupType $using:row."Startup Type" } -ComputerName    $row.Server -ArgumentList $row
    }

} | Tee-object .\SSAS_services.txt -Append

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

Неожиданный токен '$ ServiceState' в выражении или операторе. + if ($ row.Task -eq "stop" и $ row.Server $ ServiceState $ row.Serv ...

Отсутствует закрытие ')' после выражения в операторе if. + ... if ($ row.Task -eq "stop" и $ row.Server $ ServiceState $ row.Service ...

Отсутствует закрывающий '}' в блоке оператора или определении типа. + ... sk -eq "stop" и $ row.Server $ ServiceState $ row.Service -ne "stop") +

Неожиданный токен ')' в выражении или утверждении. + ... elseif ($ row.Task -eq "start" -and $ row.Server $ ServiceState $ row.Se ...
~

Неожиданный токен «$ ServiceState» в выражении или выражении. + elseif ($ row.Task -eq "start" и $ row.Server $ ServiceState $ row ... +

Неожиданный токен '$ row' в выражении или выражении. + ... -eq "start" -and $ row.Server $ ServiceState $ row.Service -ne "start") + Неожиданный токен ')' в выражении или утверждении. + ... elseif ($ row.Task -eq "pause" -and $ row.Server $ ServiceState $ row.Se ... +
~~~~~~~~~~~~~ Неожиданный токен '$ ServiceState' в выражении или выражении. Не все ошибки разбора были зарегистрированы. Правильный обнаруженные ошибки и попробуйте еще раз. + CategoryInfo: ParserError: (:) [], ParentContainsErrorRecordException + FullyQualifiedErrorId: UnexpectedToken ~

1 Ответ

0 голосов
/ 01 ноября 2018

Оператор if с -and $row.Server $ServiceState $row.Service -ne "stop" не является допустимым синтаксисом powershell (выражение должно иметь логическое значение). Вы написали функцию или используете invoke-expression для оценки состояния сервиса.

* 1005 Е.Г. *

 $serviceName = "WSearch"
 $command = "get-service $serviceName"
 if ((invoke-expression $command).Status -eq "Running") {
    # do something...
 }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...