Разный отклик на несколько параметров - PullRequest
1 голос
/ 12 марта 2019

Я не могу решить проблему:

  1. Используя Jenkins / Groovy Script, я выполняю файл ps1 с этими аргументами:

    $myBuildTestNumber = "build-"+$env:BUILD_NUMBER;
    $rootDirectory = "\\\\myRootPath\\";
    $sn = "ibex.insight.reportrunner";
    Import-Module E:\\PSSDeployService.ps1 -ArgumentList $myBuildTestNumber,$rootDirectory,$sn
    
  2. Файл .ps1 выглядит так:

    Param(
        [Parameter(Position=0,Mandatory=$false)][string]$BuildNumber,
        [Parameter(Position=1,Mandatory=$false)][string]$rootDirectorys,
        [Parameter(Position=2,Mandatory=$false)][string]$serviceName
    )
    Import-Module E:\PSSDeployServiceModule.psm1
    # Here I am calling a function 'DeployServiceProc' from the .psm1 file with the parameters
    DeployServiceProc $rootDirectorys $BuildNumber $serviceName;
    
  3. Файл .psm1 выглядит следующим образом:

    function DeployServiceProc($rootDirectory, $BuildNumber, $serviceName) {
        function backupServiceFiles($rd,$bn,$sn) {
            "In Function 'backupServiceFiles'..."
            "rd: ${rd}";
            "Build Number: " + $bn;
            "Service Name: " + $sn;
            $serviceStatus = Get-Service $sn;
            "Service Status: " + $serviceStatus;
    
            if ($serviceStatus -eq 'Stopped') {
                #"Service is stopped, taking backup";
            }
        }
        Invoke-Command -ComputerName "myRemoteSystem.Name" -ScriptBlock ${function:backupServiceFiles} -ArgumentList $rootDirectory,$BuildNumber,$serviceName -Credential $Cred
    }
    

Вопрос: Если я не предоставлю три аргумента, код:

$serviceStatus = Get-Service $sn;

работает просто отлично.

Но если я предоставлю все три аргумента, код вернется:

Состояние службы: System.ServiceProcess.ServiceController

Я не могу определить, что я делаю неправильно.

1 Ответ

1 голос
/ 12 марта 2019

Можете ли вы попытаться выполнить команду, убрав кавычки вокруг переменной $ {rd} и повторив попытку (возможно, это одна из 3 переменных, которые при использовании вы получаете этот вывод?):

"rd: ${rd}";

"rd:" ${rd};

Для некоторых типов переменных с помощью кавычек выводится тип переменной, а не фактическое содержимое переменной.

Редактировать 1:

Хорошо, когда пишешь

$serviceStatus = Get-Service $sn;

Вы получаете весь объект, но хотите показать статус, если я не ошибаюсь?

поэтому попробуйте следующую строку кода

"Service Status: " + $serviceStatus.status; 
...