I'm trying to figure out how to change how the table insert works. Right now, it's just populating 2 columns. I would like to break up the first column into several columns using substring or something like take the next 3 characters after the"(". Any help would be appreciated.
#$destserver = "SESQLDEV01" #$destDB = "Monitor" param ($destserver, $destDB) $destserver = "BEAST" $destDB = "SSIMS_Prod" ########################################################################################### function Get-SqlData { param([string]$serverName=$(throw 'serverName is required.'), [string]$databaseName=$(throw 'databaseName is required.'), [string]$query=$(throw 'query is required.')) Write-Verbose "Get-SqlData serverName:$serverName databaseName:$databaseName query:$query" $connString = "Server=$serverName;Database=$databaseName;Integrated Security=SSPI;" $da = New-Object "System.Data.SqlClient.SqlDataAdapter" ($query,$connString) $dt = New-Object "System.Data.DataTable" [void]$da.fill($dt) $dt } ########################################################################################### function out-DataTable { $dt = new-object Data.datatable $First = $true foreach ($item in $input){ $DR = $DT.NewRow() $Item.PsObject.get_properties() | foreach { if ($first) { $Col = new-object Data.DataColumn $Col.ColumnName = $_.Name.ToString() $DT.Columns.Add($Col) } if ($_.value -eq $null) { $DR.Item($_.Name) = "[empty]" } elseif ($_.IsArray) { $DR.Item($_.Name) =[string]::Join($_.value ,";") } else { $DR.Item($_.Name) = $_.value } } $DT.Rows.Add($DR) $First = $false } return @(,($dt)) } ########################################################################################### function Get-WMIInfo { param($serverName) @("\\$serverName\PhysicalDisk(*)\Avg. Disk Read Queue Length", "\\$serverName\PhysicalDisk(*)\Avg. Disk Write Queue Length", "\\$serverName\PhysicalDisk(*)\Avg. Disk sec/Read", "\\$serverName\PhysicalDisk(*)\Avg. Disk sec/Write","\\$serverName\PhysicalDisk(*)\Disk Read Bytes/sec","\\$serverName\PhysicalDisk(*)\Disk Reads/sec","\\$serverName\PhysicalDisk(*)\Disk Write Bytes/sec","\\$serverName\PhysicalDisk(*)\Disk Writes/sec") |% { (Get-Counter $_.replace("*","1 c:")).CounterSamples } | Select-Object Path, CookedValue | ` add-Member -memberType noteProperty -name Server -value $servername -passThru } ########################################################################################### function Write-DataTableToDatabase { param ($dataTable,$destTbl) $connectionString = "Data Source=$destServer;Integrated Security=true;Initial Catalog=$destdb;" $bulkCopy = new-object ("Data.SqlClient.SqlBulkCopy") $connectionString $bulkCopy.DestinationTableName = "$destTbl" $bulkCopy.WriteToServer($dataTable) } ########################################################################################### Get-SqlData $destserver $destDb "Select ServerName From ServerNames" | foreach { $dataTable = Get-WMIInfo $_.servername | out-datatable if ($dataTable) { Write-DataTableToDatabase $dataTable 'PhysicalDisk' } }