Powershell 및 SQL Server를 사용하여 VMware vCenter에서 수집 한 데이터를 데이터베이스에 삽입하려고합니다.Powershell을 사용하여 SQL Server의 여러 열에 데이터 삽입
$conn = New-Object System.Data.SqlClient.SqlConnection
$conn.ConnectionString = "Data Source=.\sqlexpress;Initial Catalog=Computer;Integrated Security=SSPI;"
$conn.open()
$cmd = New-Object System.Data.SqlClient.SqlCommand
$cmd.connection = $conn
$val = 0
$clusterinf = foreach($cluster in Get-Cluster){
$esx = $cluster | Get-VMHost
$ds = Get-Datastore -VMHost $esx | where {$_.Type -eq "VMFS"}
$cluster | Select @{N="VCname";E={$cluster.Uid.Split(':@')[1]}},
@{N="DCname";E={(Get-Datacenter -Cluster $cluster).Name}},
@{N="Clustername";E={$cluster.Name}},
@{N="TotalPhysicalMemory";E={[Math]::Round(($esx | Measure-Object -Property MemoryTotalMB -Sum).Sum /1KB)}},
@{N="TotalUsedMemory";E={[Math]::Round(($esx | Measure-Object -Property MemoryUsageMB -Sum).Sum /1KB)}},
@{N="AvailableMemroy";E={[Math]::Round(($esx | Measure-Object -InputObject {$_.MemoryTotalMB - $_.MemoryUsageMB} -Sum).Sum /1KB)}},
@{N="TotalCPU";E={[Math]::Round(($esx | Measure-Object -Property CpuTotalMhz -Sum).Sum /1KB)}},
@{N="TotalUsedCPU";E={[Math]::Round(($esx | Measure-Object -Property CpuUsageMhz -Sum).Sum /1KB)}},
@{N="AvailableCPU";E={[Math]::Round(($esx | Measure-Object -InputObject {$_.CpuTotalMhz - $_.CpuUsageMhz} -Sum).Sum /1KB)}},
@{N="TotalDiskSpace";E={[Math]::Round(($ds | where {$_.Type -eq "VMFS"} | Measure-Object -Property CapacityMB -Sum).Sum /1KB)}},
@{N="ConfiguredDiskSpace";E={[Math]::Round(($ds | Measure-Object -InputObject {$_.CapacityMB - $_.FreeSpaceMB} -Sum).Sum /1KB)}},
@{N="AvailableDiskSpace";E={[Math]::Round(($ds | Measure-Object -Property FreeSpaceMB -Sum).Sum /1KB)}},
@{N="Total Configured Memory GB For Powered on VMs";E={[Math]::Round(($_ | Get-VM | Where-Object {$_.PowerState -eq "PoweredOn"} | %{$_.MemoryMB} | Measure-Object -Sum | Select -ExpandProperty Sum)/1KB) }}
$cmd.commandtext = "INSERT INTO Clusterinfo (VCname) VALUES('{$val}')" -f $clusterinf.VCname
$cmd.ExecuteNonQuery()
$val++
}
$conn.close()
그리고 이것은 내가 믿는 의도 한대로 작동 :
이것은 내가 지금 가지고있는 것입니다. 이제 내 질문은, 다음 칼럼을 계속하려면 어떻게해야합니까? 그래서 DCname
, Clustername
, TotalPhysicalMemory
등등을 추가 할 수 있습니까?
나는이 삽입 문을 시도하고있다 :
$cmd.commandtext = "INSERT INTO Clusterinfo (VCname, DCname, CLustername) VALUES('$($clusterinf.VCname)','$($clusterinf.DCname)','$($clusterinf.Clustername)')"
그러나 삽입하므로 그것 정말, 원하는 결과를 포기하지 않을 모든 VCname
, DCname
등등, 하나의 행에, 그리고 다른 행에 . Powershell How to query multiple classes and write in to SQL Table
을하지만 내 자신의 질문에 대한 해결책의 주위에 내 머리를 얻이 수없는 것 :
은이 질문에서 찾고있다.
아무도이 문제를 해결하는 방법에 대한 아이디어가 있습니까?
F를 부탁드립니다. 대단히 감사합니다. 완벽하게 작동합니다. 실제로 스크립트를 사용하여 그런 식으로 작업하려고했지만 데이터베이스에서는 값 대신 "System.Object []"만 삽입했습니다. 그래서 foreach 루프 내에서 $ clusterinf를 움직여서 의도 한 것처럼 작동합니다. 내가 그걸 못 본 것 같아. 다시 말하지만, 나에게 그것을 지적 해 주신 것에 감사드립니다. 그리고 또한, 사이드 노트를 주셔서 감사합니다, 나는 그것을 들여다 볼 것입니다. 좋은 저녁 되세요. –