一、检查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 ‘目录拷贝完成!‘



