Команды Powershell Get-Service и Get-WmiObject возвращают false в файле Jenkins

#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