DB에 연결하여 쿼리 할 서버 목록을 얻은 다음 wmi 쿼리를 사용하여 디스크 공간을 쿼리하는 스크립트가 있습니다. 이제이 결과를 표로 가져오고 싶습니다. 몇 가지 문제가 발생했습니다.
invoke-sqlcmd는 저장 프로 시저 또는 매개 변수와 함께 사용하기가 쉽지 않습니다. 작동하지 못했습니다. 해시 테이블은 다음 버전에서 구현 될 목록에 있습니다. 모니터링 시스템을 위해 여러 번이 작업을 계획 중이며 SQL 방법은 매우 어색해 보입니다.
csv로 내보내고 정기적으로 가져 오기를 가져올 수 있지만 코드 구조가 작동하는 방식으로 단일 csv에 쓰는 데 문제가 있습니다. 해시 테이블을 보유하기 위해 데이터 구조를 설정하는 방법을 잘 모르겠습니다. $ 드라이브 결과.
이 작업을 수행하고 다소 쉽게 / 간단하게 수행하는 방법에 대한 아이디어가 있습니까?
$servers = Invoke-Sqlcmd -Query "SELECT SERVERHardwareName FROM SERVERLIST_Hardware WHERE EXCLUDE = 0 and activenode = 1 or activenode is null;" -ServerInstance "sqlserver" -Database "dba_rep"
$ExportPath = 'c:\temp\psout\Server-DiskSpace.csv'
# going through, server by server, querying.
foreach($server in $servers)
{
$server = $server.SERVERHardwareName + '.fullyqualified.domain'
Write-Output $server
$Drives = Get-WmiObject -ComputerName $server -Query 'SELECT * from Win32_LogicalDisk WHERE DriveType=3' `
| select SystemName,DeviceId,DriveType, VolumeName,Description,
@{Label="FreeSpace(GB)"; `
Expression={"{0:N2}" `
-f ($_.FreeSpace/1GB)}},`
@{Label="Size(GB)"; `
Expression={"{0:N2}" `
-f ($_.Size/1GB)}}
# So here we have a hash table of drives for one server
foreach($Drive in $Drives)
{
$Drive | Export-Csv -Path $ExportPath -NoTypeInformation
}
}