Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/powershell/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Powershell 对多个参数的不同响应_Powershell_Jenkins_Parameter Passing - Fatal编程技术网

Powershell 对多个参数的不同响应

Powershell 对多个参数的不同响应,powershell,jenkins,parameter-passing,Powershell,Jenkins,Parameter Passing,我无法解决以下问题: 使用Jenkins/Groovy脚本,我正在执行带有以下参数的ps1文件: $myBuildTestNumber=“build-”+$env:build\u编号; $rootDirectory=“\\\\myRootPath\\”; $sn=“ibex.insight.reportrunner”; 导入模块E:\\PSSDeployService.ps1-参数列表$myBuildTestNumber、$rootDirectory、$sn .ps1文件如下所示: Param

我无法解决以下问题:

  • 使用Jenkins/Groovy脚本,我正在执行带有以下参数的ps1文件:

    $myBuildTestNumber=“build-”+$env:build\u编号;
    $rootDirectory=“\\\\myRootPath\\”;
    $sn=“ibex.insight.reportrunner”;
    导入模块E:\\PSSDeployService.ps1-参数列表$myBuildTestNumber、$rootDirectory、$sn
    
  • .ps1文件如下所示:

    Param(
    [参数(位置=0,强制=false)][字符串]$BuildNumber,
    [参数(位置=1,强制=false)][string]$rootDirectorys,
    [参数(位置=2,必填项=$false)][字符串]$serviceName
    )
    导入模块E:\PSSDeployServiceModule.psm1
    #在这里,我使用参数从.psm1文件调用函数“DeployServiceProc”
    DeployServiceProc$rootDirectorys$BuildNumber$serviceName;
    
  • psm1文件如下所示:

    函数DeployServiceProc($rootDirectory、$BuildNumber、$serviceName){
    功能备份服务文件($rd、$bn、$sn){
    “在函数“backupServiceFiles”中…”
    “rd:${rd}”;
    “建造数量:”+$十亿;
    “服务名称:”+$sn;
    $serviceStatus=获取服务$sn;
    “服务状态:”+$serviceStatus;
    如果($serviceStatus-eq“已停止”){
    #“服务已停止,正在进行备份”;
    }
    }
    调用命令-ComputerName“myRemoteSystem.Name”-ScriptBlock${function:backupServiceFiles}-ArgumentList$rootDirectory、$BuildNumber、$serviceName-Credential$Cred
    }
    
  • 问题是: 如果我不提供三个参数,代码:

    $serviceStatus = Get-Service $sn;
    
    很好用

    但如果我提供所有三个参数,代码将返回:

    服务状态:System.ServiceProcess.ServiceController


    我无法确定我做错了什么。

    您能否尝试通过删除${rd}变量周围的引号来运行命令,然后重试(这可能是使用此输出时获得的3个变量之一):

    对于某些类型的变量,使用引号输出变量类型,而不是变量的实际内容

    编辑1:

    好的,当你写作的时候

    $serviceStatus=获取服务$sn

    您得到了整个对象,但如果我没有弄错的话,您想显示状态吗

    因此,请尝试下一行代码

    "Service Status: " + $serviceStatus.status; 
    

    “不提供3个参数”是什么意思?你能给出一个有效调用和无效调用的例子吗?你能试着通过删除${rd}变量周围的引号并重试来运行你的命令吗(这可能是你得到这个输出的3个变量之一?:“rd:${rd}”;“rd:${rd};对于某些类型的变量,使用引号输出变量类型,而不是变量的实际内容。请考虑:函数StestService($SN){“函数”StistService……“开始服务$ Sn$ Max Read=20 $状态=“运行””。#如果您想等待服务启动,请更改为Stopped{$count=(获取服务$sn |?{$$\状态-eq$status})。count$count;$maxreat--sleep-millizes 1000}直到($count-eq 1-或$maxreat-eq 0)}有趣的是,我正在复制一个工作函数并修改它,就像问题代码一样,它工作得非常好。函数backupServiceFiles3($rd,$bn,$sn){“在函数'backupServiceFiles3'…”$rd;$bn;$sn;$status=“Stopped”;获取服务$sn$count=(获取服务$sn |?{$|.status-eq$status})。count;$count;#0停止,如果($count-eq 1){“在第一个块中:停止”;}elseif($count-eq 0){“在第二个块中:正在运行”;}}}当您写入$serviceStatus=Get Service$sn时,确定;您得到了整个对象,但如果我没有弄错,您希望显示状态?因此请尝试下一行代码“Service status:“+$serviceStatus.status;这不是答案。请添加此作为评论。谢谢。不,我还是得到了同样的结果。爱你的人。它起作用了。你可以查看链接。在图2中,它有一个关于.NET引用如何在PowerShell中工作的非常好的示例。
    "Service Status: " + $serviceStatus.status;