avatarJen-Hsuan Hsieh (Sean)

总结

本文介绍了如何在Jenkins中集成PowerShell远程控制功能,并详细说明了编写PowerShell脚本的基础规则、环境设置、远程登录和控制的方法,以及在Jenkins中配置Freestyle作业来使用这些功能。

摘要

文章首先介绍了PowerShell在Windows系统上的强大功能,并解释了为什么选择PowerShell进行远程控制。接着,阐述了PowerShell脚本编写的基础知识,包括参数定义、字符串格式化和常用操作。文章继而详细描述了在服务器端和客户端进行PowerShell远程控制所需的环境设置,包括用户账号创建、PowerShell脚本执行策略更改、网络环境配置和PowerShell远程功能启用。

在远程控制的部分,文章讨论了四种不同的执行脚本和exe文件的方法,分别是使用start-process和不使用start-process的情况。最后,文章指导如何在Jenkins中创建一个Freestyle作业,并使用参数化构建来替代原有的params参数,以便在构建时输入参数,并展示了如何在Jenkins中使用这些参数。

文章作者Sean HS是一位软件工程师,他提供了自己的LinkedIn链接,并邀请读者对文章中的内容进行交流和讨论。文章最后还推荐了其他相关的软件测试和DevOps主题的文章。

观点

  • PowerShell是Windows上强大的自动化工具,适合进行远程控制任务。
  • 远程控制需要在服务器端和客户端进行适当的配置,包括设置用户账号、调整PowerShell执行策略、配置网络环境和启用远程功能。
  • 远程执行脚本或exe文件有多种方法,每种方法都有其适用场景和潜在的限制。
  • 在Jenkins中集成远程控制任务,可以通过参数化构建来提高任务的灵活性和可重用性。
  • 文章作者鼓励与读者的交流和讨论,以进一步提高文章内容的准确性和实用性。
  • 推荐了其他相关主题的文章,以供读者进一步学习和探索。

Software Testing — Integrate PowerShell Remote Control Into Jenkins Freestyle Job

Copy right@A Layman

Introduction

最近需要用到Jenkins做Remote Control ,PowerShell輕便而且用途廣泛,在Windows上他是個很強力的工具,於是想到用PowerShell來進行控制。

PowerShell可以簡單地撰寫WinRM的操作 ,不過事前的設定有點繁雜 ,而且針對不同情形 ,遠端script的寫法也可以分為很多種 ,故寫下這篇做記錄。

Fundamental of writing a PowerShell scripts

在進入Remote Control前先介紹PowerShell的基本撰寫規則 ,包涵參數 ,字串格式化以及常使用的操作。

Parameters

PowerShell中以params定義參數列表 ,參數列表中可以指定參數類型 ,預設值 ,或是預設動作 ,例如在使用者未輸入該參數時丟出exception message或是跳出提示框要使用者輸入字串。

String format

PowerShell的格式化方式如下:

Basic usage: Check Windows User/Password is valid

Basic usage: Check Network connection type

Environment setting for PowerShell remote control

在進行Remote Control前有以下幾個步驟是要先進行的 ,分為server端(控制方)跟client端(被控制方):

server端

1.替目標機器建立使用者帳號及密碼。 2.Enable powerShell script for Windows:

%SystemRoot%\system32\WindowsPowerShell\v1.0\powershell.exe -command  "Set-ExecutionPolicy unrestricted -force"

3.設定網路環境: -關閉防火牆:

netsh advfirewall set allprofiles state off

-將connection type改為private或是work connection:

4.Enable PowerShell Remote ability:

%SystemRoot%\system32\WindowsPowerShell\v1.0\powershell.exe -command "Enable-PSRemoting -Force"

5.檢查細節:

6. 嘗試看看Remote Login。

client端

Enable PowerShell Remote ability:

%SystemRoot%\system32\WindowsPowerShell\v1.0\powershell.exe -command "Enable-PSRemoting -Force"

Remote Login

遠端登入在概念上有點像是Linux系統上的ssh ,需要條件為IP ,帳號及密碼 ,登入後就可以對該台機器進行操作。

成功登入後的畫面如下:

Copy right@A Layman

再輸入exit即可離開。

Remote control

除了登入外也可以遠端呼叫該機器上的script檔案 ,這邊分為執行.ps1及exe ,在分為是否使用start-process ,共四種情形 ,最後談談在Jenkins上Remote Control的執行情形。

1. Run powerShell script — use start-process

用start-process啟動powershell以執行.ps1 ,缺點是在某些使用上可能會hang住 ,作法如下:

2. Run PowerShell script- not use start-process

替代方式是直接在ScriptBlock呼叫當地的script,以個人的經驗來看 ,使用這種方式應該可以避免hang住的情形。

3. Run exe — use start-process

利用start-process來啟動執行檔 ,並指定參數 ,適用於不需要得到output的場景 ,缺點是在某些使用上可能會hang住。

如果需要得到output可以用以下的方式:

4. Run exe — not use start-process

Jenkins Freestyle tasks

在已裝好Jenkins為前提下 ,先建立一個Freestyle job ,再來將原本在params的參數都換成參數化建置中的參數 ,並寫入預設值。

Copy right@A layman

這麼做在下次建置時就可以很方便的輸入參數:

Copy right@A layman

接著本原來的程式碼中的params拿掉 ,而參數化建置的參數前是$env開頭 , 如下所示:

Summary

謝謝你耐心地讀到Summary,我是Sean HS, 是位軟體工程師。 這片文章是我在研究過程時的筆記,若有錯誤之處,期待您的見解,與您交流討論。

Other topics

Software Testing

[Software as a Service] Modern APM & Logging Services

[DevOps] Ansible Provisioning for Windows:

中文
Powershell
Jenkins
Software Testing
Recommended from ReadMedium