Set-DbatoolsInsecureConnection -SessionOnly
# Database configuration
$centralServer = "DESKTOP-SFQAKOI\SQLTESTSRV1" # Replace with your central
SQL Server instance name
$centralDatabase = "DBA" # Central database name
$centralTable = "ServerVersions" # Table name for storing server details
# Discover available SQL servers
$sqlServers = Get-DbaRegisteredServer
# Output the discovered servers
$sqlServers | ForEach-Objects { Write-Host "Discovered server: $($_.ServerName)" }
# Loop through each discovered server and query its SQL information
#foreach ($server in $sqlServer) {
try {
Write-Host "Connecting to $($[Link]) to retrieve SQL Server
details..."
# Define the query to get version and server info
$query = @"
SELECT
SERVERPROPERTY('MachineName') AS ServerName,
SERVERPROPERTY('DomainName') AS DomainName, -- Retrieves the domain
name
SERVERPROPERTY('ProductVersion') AS Version,
SERVERPROPERTY('ProductLevel') AS PatchLevel,
SERVERPROPERTY('Edition') AS Edition,
GETDATE() AS DateChecked
"@
# Execute the query on the server
$result = Invoke-DbaQuery -SqlInstance $[Link] -Query $query
# Process the result if it is not empty
if ($result) {
$serverName = $[Link]
$domainName = $[Link]
$version = $[Link]
$patchLevel = $[Link]
$edition = $[Link]
$dateChecked = $[Link]
Write-Host "Server: $serverName, Domain: $domainName, Version:
$version, Patch Level: $patchLevel, Edition: $edition"
# Insert or update server information using MERGE (Upsert)
$upsertQuery = @"
MERGE INTO $[Link].$centralTable AS target
USING (VALUES ('$serverName', '$domainName', '$version', '$patchLevel', '$edition',
'$dateChecked')) AS source (ServerName, DomainName, Version, PatchLevel, Edition,
DateChecked)
ON [Link] = [Link]
WHEN MATCHED THEN
UPDATE SET
DomainName = [Link],
Version = [Link],
PatchLevel = [Link],
Edition = [Link],
DateChecked = [Link]
WHEN NOT MATCHED THEN
INSERT (ServerName, DomainName, Version, PatchLevel, Edition, DateChecked)
VALUES ([Link], [Link], [Link],
[Link], [Link], [Link]);
"@
# Execute the upsert query using dbatools
Invoke-DbaQuery -SqlInstance $centralServer -Database $centralDatabase
-Query $upsertQuery
Write-Host "Inserted/Updated information for $serverName"
} else {
Write-Warning "No data returned for $($[Link])"
}
} catch {
Write-Warning "Failed to connect to or query $($[Link]). Error:
$_"
}
}
Write-Host "SQL Server information has been updated in the database
$centralDatabase in the table $centralTable."