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
$myBuildTestNumber=“build-”+$env:build\u编号;
$rootDirectory=“\\\\myRootPath\\”;
$sn=“ibex.insight.reportrunner”;
导入模块E:\\PSSDeployService.ps1-参数列表$myBuildTestNumber、$rootDirectory、$sn
Param(
[参数(位置=0,强制=false)][字符串]$BuildNumber,
[参数(位置=1,强制=false)][string]$rootDirectorys,
[参数(位置=2,必填项=$false)][字符串]$serviceName
)
导入模块E:\PSSDeployServiceModule.psm1
#在这里,我使用参数从.psm1文件调用函数“DeployServiceProc”
DeployServiceProc$rootDirectorys$BuildNumber$serviceName;
函数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;