#powershell #jenkins
#powershell #дженкинс
Вопрос:
Я должен запустить сценарий powershell в конвейере Jenkins. Используемая нами версия Powershell — 5.1. У меня нет проблем с большинством команд в скрипте. Я пытаюсь определить, существует ли служба окон. Если это так, мне не нужно копировать exe-файл, если это не так, я хочу скопировать exe-файл на сервер windows. Это раздел кода, который является проблемой:
Write-Host "Unzipped the folder"
if(Get-WmiObject -Class Win32_Service -Filter "Name='TMWTMSListener'")
{
Write-Host "TMWTMSListener Service exists"
Stop-Service -Name "TMWTMSListener" -NoWait
Write-Host "TMWTMSListener Service stopped"
Copy-Item -Path "$tempDeployExtractPath*.jar" -Destination "$deployPath" -Force
Copy-Item -Path "$tempDeployExtractPath*.xml" -Destination "$deployPath" -Force
}
else {
Write-Host "TMWTMSListener Service does not exist"
Copy-Item -Path "$tempDeployExtractPath*.jar" -Destination "$deployPath" -Force
Copy-Item -Path "$tempDeployExtractPath*.exe" -Destination "$deployPath" -Force
Copy-Item -Path "$tempDeployExtractPath*.xml" -Destination "$deployPath" -Force
}
Я также пробовал эту команду в операторе if:
if(Get-Service -DisplayName "TMWTMSListener" -ErrorAction Ignore)
Оператор if всегда имеет значение false, хотя, когда я тестирую обе эти команды на сервере в Powershell, оператор if имеет значение true.
Даже если я остановлю службу, команды при запуске на сервере в Powershell возвращают true. Он может найти службу.
Есть ли какие-либо способы решения этой проблемы? Как я могу сохранить результаты команды Get-Service или Get-WmiObject в Jenkins?
Комментарии:
1. это
when I test both of these commands on the server in Powershell the if statement is true
указывает на то, что вы выполняете код в двух разных системах. итак … вы запускаете код в системе, в которой запущена целевая служба?2. ДА. Я выполнил обе команды на целевом сервере, на котором запущена служба. Оператор if имеет значение true . Но выполнение команд в конвейере Jenkins возвращает false
3. ах! это имеет больше смысла … Спасибо. [ grin ] ///// мне сказали, что некоторые приложения для оркестровки имеют неприятную привычку запускать 32-разрядную версию PoSh вместо 64-разрядной версии. вы это проверили? вы можете использовать
[System.Environment]::Is64BitProcess
для проверки этого.
Ответ №1:
Я решил вышеуказанную проблему. Мне нужно было задать имя компьютера в команде. Он просматривал окно сборки для службы. Это нужно было посмотреть на удаленном сервере. это команда, которую я использовал, чтобы определить, существовала ли служба
$ServiceResult = Get-Service -ComputerName "C0016581" -DisplayName "TMWTMSListener" -ErrorAction Ignore