I’m working through chapter 8 (Using the Database functions) in Learn PowerShell Toolmaking In A Month Of Lunches. In the code I’m working through there are two modules. One of the modules (MOLDatabase) has the below function (Get-MOLDatabaseData) in it that is then called from another function (Get-MOLComputerNamesFromDatabase) in another module (MOLTools; MOLDatabase module is loaded in the MOLTools module code). It retrieves a list of computer names from a SQL Express database. The information that is returned (3 server names that are in the SQL database, one of which [fake server name: not-online] doesn’t really exist) is then passed on to another function (Get-MOLSystemInfo), in the MOLTools module, that gets some WMI information for each server name. Everything works great, except for the fact that a 4th value (The number “3”) is returned by the “$adapter.Fill($dataset)” line of code in the Get-MOLDatabaseData function, which is returned by the Get-MOLComputerNamesFromDatabase function, which gets sent to the Get-MOLSystemInfo as if it’s a server that the function needs to look up. It fails as follows (i.e. The first warning below should not be there). If I run the Get-MOLComputerNamesFromDatabase function by itself, I get the number three ("3), followed by the table with just the three servers names in the database. How do I suppress the output of the “$adapter.Fill($dataset)” line of code in the Get-MOLDatabaseData function so that it isn’t returned?
PS C:> Get-MOLComputerNamesFromDatabase | Get-MOLSystemInfo
WARNING: Failed to get Win32_OperatingSystem information from 3. To log the error details, re-run the script with the -LogErrors parameter. Get-MOLComputerNamesFromDatabase Get-MOLComputerNamesFromDatabase | Get-MOLSystemInfo
WARNING: Failed to get Win32_OperatingSystem information from 3. To log the error details, re-run the script with the -LogErrors parameter.
ComputerName OSVersion SPVersion BIOSSerial Manufacturer Model
OG99SQL 6.3.9600 0 3342-7101-5095-19… Microsoft Corpora… Virtual Machine
OG99SQL 6.3.9600 0 3342-7101-5095-19… Microsoft Corpora… Virtual Machine
WARNING: Failed to get Win32_OperatingSystem information from not-online. To log the error details, re-run the script with the -LogErrors parameter.
PS C:> Get-MOLComputerNamesFromDatabase
3
ComputerName
localhost
localhost
not-online
–Code from MOLDatabase module file:
function Get-MOLDatabaseData {
[CmdletBinding()]
param (
[string]$connectionString,
[string]$query,
[switch]$isSQLServer
)
if ($isSQLServer) {
Write-Verbose 'in SQL Server mode'
$connection = New-Object -TypeName `
System.Data.SqlClient.SqlConnection
} else {
Write-Verbose 'in OleDB mode'
$connection = New-Object -TypeName `
System.Data.OleDb.OleDbConnection
}
$connection.ConnectionString = $connectionString
$command = $connection.CreateCommand()
$command.CommandText = $query
if ($isSQLServer) {
$adapter = New-Object -TypeName `
System.Data.SqlClient.SqlDataAdapter $command
} else {
$adapter = New-Object -TypeName `
System.Data.OleDb.OleDbDataAdapter $command
}
$dataset = New-Object -TypeName System.Data.DataSet
$adapter.Fill($dataset) <----This is the line causing problems.
$dataset.Tables[0]
$connection.close()
}