The example below covers how a PowerShell script can connect to a Windows Print Server, how it can query printers information, and how it can connect to an Oracle database to perform a query.
# Start configuring parameters
Param (
[string]$Printservers = "printserver1",
[string]$OracleServer = "orcl",
[string]$OracleUser = "scott",
[string]$OraclePassword = "tiger"
[string]$sql = "insert into printer_list (print_server, printer_name, printer_location, printer_comment, printer_ip, printer_driver_name, printer_driver_version, printer_driver, entry_dt) values(:print_server, :printer_name, :printer_location, :printer_comment, :printer_ip, :printer_driver_name, :printer_driver_version, :printer_driver, sysdate) "
)
# End configuring parameters
ForEach ($Printserver in $Printservers) { # Start looping through each print server
$Printers = Get-WmiObject Win32_Printer -ComputerName $Printserver
ForEach ($Printer in $Printers) { # Start looping through each printer
[System.Reflection.Assembly]::LoadWithPartialName("System.Data.OracleClient")
$connectionString = "User Id=$OracleUser;Password=$OraclePassword;Data Source=$OracleServer;"
$connection = $null
$command = $null
Try {
$connection = New-Object System.Data.OracleClient.OracleConnection($connectionString)
$command = New-Object System.Data.OracleClient.OracleCommand -ArgumentList $sql, $connection
$connection.Open()
$NoOutput = $command.Parameters.Add("print_server", $Printserver)
$NoOutput = $command.Parameters.Add("printer_name", $Printer.Name)
$Location = $Printer.Location
if (!$Location) {
$Location = " "
}
$NoOutput = $command.Parameters.Add("printer_location", $Location)
$Comment = $Printer.Comment
if (!$Comment) {
$Comment = " "
}
$NoOutput = $command.Parameters.Add("printer_comment", $Comment)
$NoOutput = $command.Parameters.Add("printer_ip", $Printer.Portname)
$Drivers = Get-WmiObject Win32_PrinterDriver -Filter "__path like '%$($Printer.DriverName)%'" -ComputerName $Printserver
$DriverVersion = " "
$Driver = " "
ForEach ($Driver in $Drivers) {
$Drive = $Driver.DriverPath.Substring(0,1)
$DriverVersion = (Get-ItemProperty ($Driver.DriverPath.Replace("$Drive`:","\\$PrintServer\$Drive`$"))).VersionInfo.ProductVersion
$Driver = Split-Path $Driver.DriverPath -Leaf
}
$Drivername = $Printer.Drivername
if (!$Drivername) {
$Drivername = " "
}
$NoOutput = $command.Parameters.Add("printer_driver_name", $Drivername)
$NoOutput = $command.Parameters.Add("printer_driver_version", $DriverVersion)
$NoOutput = $command.Parameters.Add("printer_driver", $Driver)
$command.ExecuteNonQuery()
}
Finally {
if ($connection -ne $null) {
$connection.Close()
$connection.Dispose()
}
if ($command -ne $null) {
$command.Dispose()
}
}
} # End looping through each printer
} # End looping through each print server
