powershell远程执行azure或aws上的命令和脚本

在win,linux本地powershell脚本中,远程执行azure或aws上的命令或脚本。

---【一 关于并发】---

脚本是顺序执行的,可以完成【顺序】批量。

但有1(或n台)被控机卡住问题。

这时候就需要【多进程】、【多线程】来解决。

【多进程】、【多线程】带来了【并发】批量,解决了【卡住】问题。

---【二 在linux上安装powershell】---

powershell脚本是win,linux通用的。对于linux你需要安装powershell先。

https://gitee.com/chuanjiao10/kasini3000_agent_linux

---【三 kasini3000】---

安装:

需要安装《kasini3000》脚本框架 https://gitee.com/chuanjiao10/kasini3000

账号:

需要编写nodelist.csv

kasini3000优势:

主控机<--->被控机,双向传递powershell对象(.net对象)

同时支持多云(多公有云,私有云)。支持azure,aws,阿里云,华为云等。

具有【多线程】并发批量,【多进程】并发批量,主控机任务计划。

每台被控机输出的结果,返回并保存在主控机的sqlite数据库中,供后续随时查询。

kasini3000主控机,支持安装在win,linux上。

win:nodelist.csv统一管理账号,密码。

linux:采用双秘钥ssh-key-file,随时更换其一。

win被控机,不需要任何安装。

win客户机版,需要启用winrm。

win服务器版,基本无需任何设定。

linux被控机版,需要一键安装powershell。

#远程执行命令

$从被控机返回到主控机的对象a = k_run_ip -ip 被控机ip {

可以是azure,aws,华为云,阿里云,腾讯云,私有云中的win,linux被控机命令,或脚本

100%兼容shell命令,shell脚本,py脚本。

}

#进入远程终端

gtnode 被控机ip

#多进程并发批量

k-commit -ip 被控机ip {

可以是azure,aws,华为云,阿里云,腾讯云,私有云中的win,linux被控机命令,或脚本

100%兼容shell命令,shell脚本,py脚本。

}

#多线程并发批量

k-commit-rs -ip 被控机ip {

可以是azure,aws,华为云,阿里云,腾讯云,私有云中的win,linux被控机命令,或脚本

100%兼容shell命令,shell脚本,py脚本。

}

#多线程并发,多线程并发,还有-file参数

k-commit -ip 被控机ip -f 'd:\主控机目录\此脚本会被自动复制到每台被控机.ps1'

k-commit-rs -ip 被控机ip -f 'd:\主控机目录\此脚本会被自动复制到每台被控机.ps1'

#从被控机返回结果,写入主控机slite数据库

k-commit-rs -ip 被控机ip {

Write-Output '磁盘满了' #一般搭配if ()使用

支持shell命令,shell脚本,py脚本的结果,返回到主控机,并保存到sqlite数据库。只需要echo 'xxx'

}

#在主控机上输出

kl-rs -ip 被控机ip

#从主控机,复制主控机文件目录,到被控机

k_copyto_ip -ip 被控机ip -LiteralPath '主控机目录' -Destination '被控机目录'

#从主控机,复制被控机文件目录,到主控机

k_copyfrom_ip -ip 被控机ip -LiteralPath '被控机目录' -Destination '主控机目录'

---【四 在win、linux本地powershell脚本中,远程执行azure命令,脚本(有多台卡住问题)】---

安装:

Install-Module -Name Az.Compute

Install-Module -Name Az.Accounts

账号:

$账号 = Get-Credential

Connect-AzAccount -Credential $账号

$ResourceGroupColl = Get-AzureRMResourceGroup

foreach ($ResourceGroup in $ResourceGroupColl)

{

$所有虚拟机 = Get-AzureRmVM -ResourceGroupName $ResourceGroup.ResourceGroupName

foreach ($单个虚拟机 in $所有虚拟机)

{

Invoke-AzVMRunCommand -ResourceGroupName $单个虚拟机.ResourceGroupName -VMName $VirtualMachine.Name -Command {

#手册在此 https://docs.microsoft.com/en-us/powershell/module/az.compute/invoke-azvmruncommand?view=azps-8.1.0

#win,linux虚拟机命令如:ls -l

}

}

}

#远程运行linux命令

Get-AzVM | Where-Object {$_.StorageProfile.OSDisk.OSType -eq 'Linux'} | foreach {

Invoke-AzVMRunCommand -CommandID 'runshellscript' -scriptstring "service --status-all"

}

#远程管理win

#Enable ps remoting

Enable-AzVMPSRemoting -Name web1 -ResourceGroupName WebServers -Protocol https -OsType Windows

#win账号,密码

$u = 'sysadmin'

$p = ConvertTo-SecureString 'pwd' -AsPlainText -Force

$cred = New-Object System.Management.Automation.PSCredential ($u, $p)

#远程执行命令

Invoke-AzVMrunCommand -Name web1 -ResourceGroupName WebServers -ScriptBlock {get-service win*} -Credential $cred

#进入远程终端

Enter-AzVM -Name web1 -ResourceGroupName WebServers -Credential $cred

---【五 在win、linux本地powershell脚本中,远程执行aws命令,脚本(有多台卡住问题)】---

安装:

Install-Module -Name AWS.Tools.Common

Install-Module -Name AWS.Tools.SimpleSystemsManagement

账号:

Set-AWSCredential -AccessKey '你的AK' -SecretKey '你的SK'

Set-DefaultAWSRegion -Region "cn-north-1"

问:如何通过powershell,向aws的ec2虚拟机(win-linux)中发送命令?

答:

https://docs.aws.amazon.com/powershell/latest/reference/items/Send-SSMCommand.html

网页最下面有例子。

---【后记】---

建议使用开源、免费、跨平台的kasini3000,连接aws、azure、阿里等云上的win、linux虚拟机,发送指令,运行脚本。

kasini3000对标ansible,ansible基于yaml语言。kasini3000基于脚本,传参、传值比较方便。而且传值可以传对象。

谢谢观看,完。

发表评论
留言与评论(共有 0 条评论) “”
   
验证码:

相关文章

推荐文章