栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 系统运维 > 运维 > Linux

jenkins配置windows 免密登录执行命令

Linux 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

jenkins配置windows 免密登录执行命令

一、检查windows服务是否启动

管理员方式打开PowerShell

输入命令确认是否开启WinRM 服务

PS C:UsersAdministrator> Get-Service WinRM

Status   Name               DisplayName
------   ----               -----------
Running  WinRM              Windows Remote Management (WS-Manag...

如果未开启,输入命令开启,然后在检查服务是否启动。

Enable-PSRemoting –Force

或者检查services中的服务是否启动

Windows Remote Management service
#使本机器可以执行ps1文件  
set-executionpolicy remotesigned  
#是否要通过本计算机上的 WinRM 服务启用远程管理?  
Set-WSManQuickConfig  
#关闭防火墙  
Enable-PSRemoting –Force  
#添加信任IP  
cd wsman::localhostclient  
Set-Item TrustedHosts "10.2.1.9"  
#远程该IP  
Enter-PSSession -ComputerName 10.2.1.9 –Credential Administrator 

A主机为jenkins,B主机为远端服务器,在B主机为A主机开通信任。

Step 1:在主机B上Run as Administrator打开PowerShell
    Step 1.1:启用远程:Enable-PSRemoting -Force
    Step 1.2:添加信任主机:下面a为允许所有主机,b为添加单个主机或主机列表
        a:Set-Item wsman:localhostclienttrustedhosts *
        b:Set-Item WSMan:localhostClientTrustedHosts -Force -Concatenate -Value IP地址
    Step 1.3:重启WinRM服务:
    1、Set-Service WinRM -StartMode AutomaticRestart-Service -Force WinRM
    2、Restart-Service WinRM
    Step 1.4:开放端口5985(http)、5986(https)

Step 2:在主机A上打开PowerShell
    Step 2.1:测试连接:Test-WsMan B
    Step 2.2:如果连接成功即可使用”Invoke-Command“命令执行相应脚本

查看powerShell版本

Get-Host | Select-Object Version

jenkins脚本

$pass=ConvertTo-SecureString -String 'Hes19412942' -AsPlainText -Force
$cre=New-Object pscredential('administrator', $pass)
$server = '10.161.176.1'
$session=New-PSSession -ComputerName $server -Credential $cre

Invoke-Command -Session $session -scriptBlock{
    Stop-Service -Name 'vds'
}

Invoke-Command -Session $session -scriptBlock{
    $site=Get-Item 'IIS:SitesYTJAPI'
    $site.Stop()
}

ls "D:foldertest" | cp -Destination "D:TestA" -ToSession $session -Recurse -Force
cp -FromSession $session -Path "D:TestAtest_20180424-152148" -Destination "D:folder_test" -Recurse -Force


Compress-Archive "Folder" -DestinationPath "Zip File Name" -Force
Expand-Archive "Zip File Name" -DestinationPath "Folder" -Force
Remove-PSSession -Id $session.Id

jenkins脚本解释

$pass=ConvertTo-SecureString -String 'Hes19412942' -AsPlainText -Force                          #定义密码
$cre=New-Object pscredential('administrator', $pass)                                            #定义用户
$server = '10.161.176.1'                                                                        #定义Server
$session=New-PSSession -ComputerName $server -Credential $cre                                   #获取session

Invoke-Command -Session $session -scriptBlock{                                                  #停止服务
    Stop-Service -Name 'vds'
}

Invoke-Command -Session $session -scriptBlock{                                                  #停止IIS
    $site=Get-Item 'IIS:SitesYTJAPI'
    $site.Stop()
}

ls "D:foldertest" | cp -Destination "D:TestA" -ToSession $session -Recurse -Force             #拷贝本地文件到远端服务器
cp -FromSession $session -Path "D:TestAtest_20180424-152148" -Destination "D:folder_test" -Recurse -Force        #拷贝远端服务器文件到本地


Compress-Archive "Folder" -DestinationPath "Zip File Name" -Force                               #压缩文件
Expand-Archive "Zip File Name" -DestinationPath "Folder" -Force                                 #解压文件
Remove-PSSession -Id $session.Id                                                                #释放session

服务器端备份压缩脚本

$today=Get-Date;
$date=$today.ToString('yyyyMMdd-HHmmss');
$testDir="D:test"; 
$backupDir="D:web_testtest_$date.zip"; 
$Expand="D:web_test"
#Compress-Archive  -Path $testDir -DestinationPath $backupDir -Force
Expand-Archive "D:web_testtest_20180424-175521.zip" -DestinationPath $Expand -Force

配置powershell,执行远端的脚本文件

$Username = 'administrator'
$Password = '123456'
$pass = ConvertTo-SecureString -AsPlainText $Password -Force
$Cred = New-Object System.Management.Automation.PSCredential -ArgumentList $Username,$pass
Invoke-Command -ComputerName 192.168.3.21 -scriptBlock { C:backup.ps1 } -credential $Cred

本地文件夹相互拷贝

Copy-Item C:NewDir*  c:          #复制文件夹下的所有文件
Copy-Item C:NewDir  c: -recurse   #复制文件夹到c:下

删除目录

Remove-Item 文件夹路径 -Recurse -Force -/confirm/i:$false

其中:
Recurse是同时删除子目录
Force是强制删除
/confirm/i:$false或/confirm/i:0,表示不需要确认,直接删除。

停止services VSS服务

while ((get-service VSS).status -eq "Running"){
stop-service VSS
sleep 2
}

启动services VSS服务

while ((get-service VSS).status -eq "Stopped"){
start-service VSS
sleep 2
}

远端执行命令

$Username = 'administrator'
$Password = '123456'
$pass = ConvertTo-SecureString -AsPlainText $Password -Force
$Cred = New-Object System.Management.Automation.PSCredential -ArgumentList $Username,$pass
Invoke-Command -ComputerName 192.168.3.22 -scriptBlock { C:stop-vds.ps1 } -credential $Cred

远端ps1文件编写

$today=Get-Date;
$date=$today.ToString('yyyyMMdd-HHmmss');
$localdir="C:NewDir";
Copy-Item $localdir  C:PerfLogsNewDir_$date -recurse
while ((get-service vds).status -eq "Running"){
stop-service vds
sleep 2
}

如果你想把本地的脚本在被管理的机器上运行:

$script1='get-host';  
$path1='/root/test.ps1';  
Invoke-Command -Session $mySession {echo $args[0]>$args[1];. $args[1]} -Args $script1,$path1

linux方法

$remoteDirPath="\WIN-OGLH25LAOBDwwwroot"
    Write-Host '连接远程主机...'
    net use $remoteDirPath  "123456" /user:"administrator"
    Write-Host ‘递归拷贝文件(强制覆盖模式)...‘
    
    $files = Get-ChildItem -Path "./iis/ "
    foreach($file in $files) {
        Copy-Item -Path $file.FullName -Destination $remoteDirPath -Include "*" -Exclude "" -Recurse -Force
    }
    Write-Host ‘目录拷贝完成!‘
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/682159.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号