powercli的一点实践
密码加密
- 输入用户名和密码,这里将密码存入文件
$credential=get-credential $credential.Password|ConvertFrom-Securestring |Set-content password.txt
- 获取密码
$p=get-content password.txt |convertto-securestring $cre=new-object system.management.automation.pscredential("ls3686@ad.shanghai.nyu.edu",$p)
- 使用密文密码进行连接
connect-viserver 10.214.24.109 -credential $cre
使用golang来编译powershell的脚本
引入下面两个模块
ps "github.com/bhendo/go-powershell"
"github.com/bhendo/go-powershell/backend"
生成漂亮的html页面
首先建立css文件,这里以下面的css为例。 保存css文件为css.html.
然后通过powershell导出的文件的方法:
- 生成html格式的vms对象
$vms=get-vm|select-object name,numcpu,MemoryGB,@{n="UsedSpace";e={[math]::Round($_.UsedSpaceGB)}},@{n="ProvisionedSpace";e={[math]::Round($_.ProvisionedSpaceGB)}},@{n="HOSTNAME";e={$_.ExtensionData.guest.hostname}},@{n="IP";e={$_.ExtensionData.guest.ipaddress}},@{N="OS";e={$_.ExtensionData.guest.guestfullname}},@{N="SnapshotSize";e={[math]::Round((Get-Snapshot -VM $_ | Measure-Object -Sum SizeGB).Sum)}} |convertto-html -Fragment
- 创建html空文件对象
$filename=$(get-date -format "yyyy-MM-dd")+"-Production.html"
- 将vms对象写入filename这个文件,这里面的body部分因为没有使用powershell的变量引用,所以其实只引入了vms这个对象,其他的css都为空。
$report=ConvertTo-Html -title "Virtual Machine detail informations" -head "<div id='title'>Production-Env VM information reporting</div>$br<div id='subtitle'>Report generated on:$(get-date)</div>" -body "$css $PageBoxOpener $BoxContentOpener $PageBoxCloser</table> $br $BoxContentOpener $vms $PageBoxCloser" |Out-File $filename
- 合并css到文件,合并css到html文件末尾,使得表格呈现出来。
get-content css.html |add-content $filename
用powershell发邮件
write-host "begin sending email" -ForegroundColor "blue"
$msg=new-object net.mail.mailmessage
$attachment=new-object net.mail.attachment($filename) #这里的$filename是html文件的文件名,可以加上路径
$smtpserver=new-object net.mail.smtpclient("smtp.mysmtpserver.com")
$msg.from="demo@mycompany.com"
$msg.to.add("mark@home.com")
$msg.subject="something may interested"
# $msg.body=$htmlbody |Out-String
$msg.Attachments.add($attachment)
$msg.IsBodyHtml=$true
$smtpserver.Send($msg)
write-host "message sent" -foreground color "blue"
用powershell检测端口开放情况
起因是开始做了一个用iis发布的folder,因为iis服务器没有加入域,没发做域的认证。后来换成了go,编译了一下,还是放在了这台windows机器上。为了保证服务的可靠性,需要做一个监控端口是否开放的脚本,如果端口连接不上,那就需要重启这个exe文件。
用了两种方式,一种是打开sockets的方式,一种是test-openport的方式。
其中cmd /qn的参数是静默在后台运行的意思。实际上不需要加/qn参数。
$ipaddress="10.214.8.75"
$port=8075
#$connection=new-object system.net.sockets.tcpclient($ipaddress,$port)
$connection=test-netconnection 10.214.8.75 -port 8075
#if ($connection.Connected){
if ($connection.tcptestsucceeded){
write-host "port is open,fine!"
}
else {
write-host "port is not open!"
"c:\authpublish\authpublish.exe" |cmd /qn
}