Power Shell 和 Power CLI结合 将虚拟机实时数据写入Oracle数据库

本文介绍了如何在PowerShell中利用PowerCLI与Oracle数据库进行交互,通过编写脚本来自动化收集虚拟机信息并将其存储到数据库中。此外,还展示了如何将此脚本整合为定时任务,实现后台运行。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在这里连接数据库是利用PowerShell的
[System.Reflection.Assembly]::LoadWithPartialName("System.Data.OracleClient")
把Oracle客户端的类库读进来。利用它来实现与Oracle的交互
想在PowerShell中运行PowerCLI
应该把PowerCLI的控制台文件传给powershell.exe
如脚本的文件名为InsertData.ps1
则可以用以下命令
powershell.exe -psc "C:/Program Files/VMware/Infrastructure/vSphere PowerCLI/vim.psc1" -File "C:/InsertData.ps1"
这样就可以在PowerShell中使用PowerCLI的CmdLet了。

 

我们还可以将上述命令写成VBS文件再添加到计划任务中
让其在后台运行,就可以实现定时收集虚拟机信息到数据库
GetInfo.vbs
--------------------
Set WshShell = WScript.CreateObject("WScript.Shell")
Call WshShell.Run( "powershell.exe -psc ""C:/Program Files/VMware/Infrastructure/vSphere PowerCLI/vim.psc1"" -File ""C:/InsertData.ps1""", 0, True )

 

 

InsertData.ps1

----------------------------------------------------------------------------------------------------------------------

#加载Oracle客户端的类库
[System.Reflection.Assembly]::LoadWithPartialName("System.Data.OracleClient")

#SELECT句结果显示函数
function Get-Result($cmd){
#$cmd.CommandText = $sqlStr
$reader = $cmd.ExecuteReader()
$reader|% -begin {if($_ -ne $Null ) {$_.read()}} -Process {$_.getValue(0)}
}
#不进行执行确认
$ConfirmPreference="none"

#连接 VMware Esx Server
#代理设置、不使用代理
$proxySetting=Set-PowerCLIConfiguration -ProxyPolicy NoProxy
#连接
$server=Connect-VIServer 192.168.0.1 -User admin -Password admin
#Oracle 连接字符串
$connectionString="Data Source=orcl;User Id=sys;Password=sys;Integrated Security=no"
#初始化连接对象
$connection = New-Object System.Data.OracleClient.OracleConnection($connectionString)
#打开连接
$connection.Open()
#创建命令对象
$cmd = $connection.CreateCommand()
#取得事务
[System.Data.OracleClient.OracleTransaction] $tran = $connection.BeginTransaction()
#将事务赋予命令对象
$cmd.Transaction = $tran

#变量声明
#host名
$hostNameStr = (Get-VMHost).Name
#vm名数组
$vmList=(Get-VM) | % {$_.Name}

#VMHOST信息
#VMHOST对象
$vmhost=Get-VMHost
#存储器对象
$dataStore=Get-Datastore
#CPU使用率
$cpuUsed="{0:0}" -f ($vmhost.CpuUsageMhz * 100 / $vmhost.CpuTotalMhz)
#内存使用率
$memUsed="{0:0}" -f ($vmhost.MemoryUsageMB * 100 / $vmhost.MemoryTotalMB)
#网络连接使用KBPS
$netUsed="{0:0}" -f $(Get-Stat -Entity $vmhost -MaxSamples 1 -Realtime)[0].value
#存储器剩余空间
$diskFree=$dataStore.FreeSpaceMB
#存储器容量
$diskTotal=$dataStore.FreeSpaceMB
#VMHost状态
$state=$vmhost.State
#VMHost电源状态
$power=$vmhost.PowerState
#SQL语句
#这里的STATISTICS表可以自己定义
$cmd.CommandText="
INSERT into
STATISTICS(
HOST_ID
,VM_ID
,DIVISION
,CPU_USAGE_AVERAGE
,MEM_USAGE_AVERAGE
,NET_USAGE_AVERAGE
,DISK_FREESPACE
,DISK_CAPACITY
,STATUS
,POWER
,UPDATE_DATETIME
) values (
'$hostNameStr'
,null
,'SYS'
,'$cpuUsed'
,'$memUsed'
,'$netUsed'
,'$diskFree'
,'$diskTotal'
,'$state'
,'$power'
,Sysdate)"
#执行插入
$cmd.ExecuteReader()

#各VM的信息
for($i=0;$i -lt $vmList.Length;++$i){
#在这里可以处理各虚拟机的信息
}
#断开VMware Esx Server的连接
Disconnect-VIServer
#异常处理
trap {
#Rollback
$tran.Rollback()
#释放命令对象的资源
$cmd.Dispose()
#断开与Oracle的连接
$connection.Close()
#释放连接对象的资源
$connection.Dispose()
break
}
#若成功提交事务
$tran.Commit()
#释放命令对象的资源
$cmd.Dispose()
#断开与Oracle的连接
$connection.Close()
#释放连接对象的资源
$connection.Dispose()

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值