Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/corion/dbd-wmi
interface to the Windows WMI
https://github.com/corion/dbd-wmi
Last synced: 7 days ago
JSON representation
interface to the Windows WMI
- Host: GitHub
- URL: https://github.com/corion/dbd-wmi
- Owner: Corion
- Created: 2015-01-14T18:56:07.000Z (almost 10 years ago)
- Default Branch: master
- Last Pushed: 2019-03-10T10:58:08.000Z (over 5 years ago)
- Last Synced: 2024-10-11T21:18:29.716Z (about 1 month ago)
- Language: Perl
- Size: 43 KB
- Stars: 2
- Watchers: 3
- Forks: 2
- Open Issues: 0
-
Metadata Files:
- Readme: README.mkdn
- Changelog: Changes
Awesome Lists containing this project
README
[![Build Status](https://travis-ci.org/Corion/dbd-wmi.svg?branch=master)](https://github.com/Corion/dbd-wmi)
# NAME
DBD::WMI - interface to the Windows WMI
# ABSTRACT
This module allows you to issue WQL queries
through the DBI.# SYNOPSIS
use DBI;
my $dbh = DBI->connect('dbi:WMI:');my $sth = $dbh->prepare(<execute();
while (my @row = $sth->fetchrow) {
my $proc = $row[0];
print join "\t", $proc->{Caption}, $proc->{ExecutablePath} || "";
# $proc->Terminate();
print "\n";
}The WMI
allows you to query various tables ("namespaces"), like the filesystem,
currently active processes and events:SELECT * FROM Win32_Process
The driver/WMI implements two kinds of queries, finite queries like the
query above and potentially infinite queries for events as they occur in
the system:my $query = q{
SELECT * FROM __instanceoperationevent
WITHIN 1
WHERE TargetInstance ISA 'Win32_DiskDrive'
}This query returns one row (via ->fetchrow\_arrayref() ) whenever a disk
drive gets added to or removed from the system (think of an USB stick).There is currently no support for selecting specific
columns instead of `*`. Support for selecting columns that
then get returned as plain Perl scalars is planned.## `DBD::WMI::db::parse_columns STATEMENT`
This routine parses out the requested columns
from the WQL statement and returns an array reference
with the names of the columns.Currently, this only works for `SELECT` statements.
All other statements get an implicit column
of `*`, meaning that the Win32::OLE objects
will be returned.# HANDLING OF QUERY COLUMNS
The WMI and WQL return full objects instead of single columns. The specification
of columns is merely a hint to the object what properties to preload. The
DBD interface deviates from that approach in that it returns objects
for queries of the form `SELECT *` and the values of the object
properties when columns are specified. These columns are then case sensitive.# FUN QUERIES
## List all printers
SELECT * FROM Win32_Printer
## List all print jobs on a printer
SELECT * FROM Win32_PrintJob
WHERE DriverName = 'HP Deskjet 6122'## Return a new row whenever a new print job is started
SELECT * FROM __InstanceCreationEvent
WITHIN 10
WHERE
TargetInstance ISA 'Win32_PrintJob'## Finding the default printer
SELECT * FROM Win32_Printer
WHERE Default = TRUE## Setting the default printer (untested, WinXP, Win2003)
use DBI;
my $dbh = DBI->connect('dbi:WMI:');
my $sth = $dbh->prepare(<execute;
while (my @row = $sth->fetchrow) {
# We get Win32::OLE objects back:
my $printer = $row[0];
printf "Making %s the default printer\n", $printer->{Name};
$printer->SetDefaultPrinter;
};## Find all network adapters with IP enabled
SELECT * from Win32_NetworkAdapterConfiguration
WHERE IPEnabled = True## Find files in a directory
ASSOCIATORS OF {Win32_Directory.Name='C:\WINNT'}
WHERE ResultClass = CIM_DataFile## Find printers on a remote machine
use DBI;
my $machine = 'dawn';
my $dbh = DBI->connect('dbi:WMI:'.$machine);
my $sth = $dbh->prepare(<execute;
while (my @row = $sth->fetchrow) {
my $printer = $row[0];
printf "Making %s the default printer on %s\n", $printer->{Name}, $machine;
$printer->SetDefaultPrinter;
};## Get method names of objects
use Win32::OLE qw(in);
...SELECT * FROM Win32_Process
$sth->execute;
while (my @row = $sth->fetchrow) {
for my $method (in $row[0]->Methods_) {
print "Can call $method() on the object\n"
};
};# TODO
- Implement placeholders and proper interpolation of values
- Need to implement DSN parameters for remote computers, credentials# SEE ALSO
WMI is Microsofts implementation of the WBEM standard ([http://www.dmtf.org/standards/wbem/](http://www.dmtf.org/standards/wbem/)) except that it uses DCOM and not CIM-XML as the transport medium.
The MS WMI main page at [http://msdn.microsoft.com/library/default.asp?url=/library/en-us/wmisdk/wmi/wmi\_start\_page.asp](http://msdn.microsoft.com/library/default.asp?url=/library/en-us/wmisdk/wmi/wmi_start_page.asp)
The WQL documentation at [http://msdn.microsoft.com/library/default.asp?url=/library/en-us/wmisdk/wmi/wql\_sql\_for\_wmi.asp](http://msdn.microsoft.com/library/default.asp?url=/library/en-us/wmisdk/wmi/wql_sql_for_wmi.asp)
The "Hey Scripting Guy" column at [http://www.microsoft.com/technet/scriptcenter/resources/qanda/default.mspx](http://www.microsoft.com/technet/scriptcenter/resources/qanda/default.mspx)
Wikipedia on WMI at [http://en.wikipedia.org/wiki/Windows\_Management\_Instrumentation](http://en.wikipedia.org/wiki/Windows_Management_Instrumentation)
List of available Win32 WMI classes at [http://msdn.microsoft.com/library/default.asp?url=/library/en-us/wmisdk/wmi/win32\_classes.asp](http://msdn.microsoft.com/library/default.asp?url=/library/en-us/wmisdk/wmi/win32_classes.asp)
# REPOSITORY
The public repository of this module is
[https://github.com/Corion/dbd-wmi](https://github.com/Corion/dbd-wmi).# SUPPORT
The public support forum of this module is
[https://perlmonks.org/](https://perlmonks.org/).# BUG TRACKER
Please report bugs in this module via the RT CPAN bug queue at
[https://rt.cpan.org/Public/Dist/Display.html?Name=DBD-WMI](https://rt.cpan.org/Public/Dist/Display.html?Name=DBD-WMI)
or via mail to [[email protected]](https://metacpan.org/pod/[email protected]).# AUTHOR
Max Maischein `[email protected]`
# COPYRIGHT (c)
Copyright 2009-2018 by Max Maischein `[email protected]`.
# LICENSE
This module is released under the same terms as Perl itself.