К сожалению, нет класса WMI, включенного в ОС, которая предоставляет информацию, которую вы ищете.В .NET класс PrinterSettings
эта информация собирается посредством вызовов pinvoke для функции DeviceCapabilities()
в winspool.drv
.Они не предоставили эти возможности ни в одном из ROOT\cimv2
классов WMI, включая следующие:
- CIM_Printer (это то, из чего происходит Win32_Printer)
- Win32_PerfFormattedData_Spooler_PrintQueue
- Win32_PerfRawData_Spooler_PrintQueue
- Win32_Printer
- Win32_PrinterConfiguration
- Win32_PrinterDriver
- Win32_PrintJob
Существуют и другие классы принтеров, но это классы принтеров, которые включают в себя любые данные, используемые для запросов.Если вы разрабатываете свое решение для .NET, я бы предложил просто использовать класс PrinterSettings в пространстве имен System.Drawing ( здесь есть ответ с отличным примером ).Если вы используете язык сценариев, вы можете выполнить аналогичную работу, используя сборку .NET в PowerShell, например:
Add-Type -AssemblyName System.Drawing
$PrinterSettings = New-Object System.Drawing.Printing.PrinterSettings
ForEach ($Printer in Get-Printer) {
$PrinterSettings.PrinterName = $Printer.Name
Write-Host $Printer.Name
Write-Host $PrinterSettings.PaperSources
}