There is a special type of WMI class called "association class". This type of class binds two normal, related classes together. A typical example is association class for NIC-related classes. For each NIC in a system, there are two WMI classes for it: Win32_NetworkAdapter & Win32_NetworkAdapterConfiguration. The former mainly includes NIC hardware info, such as speed, MAC, media connection status, etc; the later mainly includes configuration info on a NIC, such as IP, DHCP, DNS, etc. More than often, you need to obtain info from both classes, and that's where association class comes to help.
Still using NIC as our example, windows defines an association class called Win32_NetworkAdapterSetting, through which you can access info from both above-mentioned classes. An association class include two members, one called element, the other called setting. Not surprisingly, element links to a Win32_NetworkAdapter object (because it is the element) and setting links to a Win32_NetworkAdapterConfiguration object (because it is the setting stuff). Below is how you use it:
$ac = Get-WmiObject -Class win32_NetworkAdapterSetting #gets all NIC info
$connectedAdapters = $ac | where {([wmi]$_.element).netConnectionStatus -eq 2}
$connectedAdapters | foreach {([wmi]$_.setting)|select caption, dhcpEnabled,IPaddress,dnsServerSearchOrder }
Search This Blog
Apr 3, 2012
Mar 8, 2012
[Powershell] Try-Catch fails to catch an exception?
I was running a script that does WMI query and found that my try-catch-final statement seemed not working. The exception was still shown on console instead of handled by my catch block.
It turns out that exceptions are categorized into two groups, terminating exceptions and non-terminating exceptions. By default, try-catch intercepts only terminating exceptions. No surprisingly, get-WMIobject exceptions are non-terminating exceptions.
There are two ways to make it work. One is to make all exception terminating by below assignment:
$ErrorActionPreference = "Stop"; #Make all errors terminating
Remember to reset the preference at the end of your script as this is global.
$ErrorActionPreference = "Continue"
Or right after get-WMIobject statement, check the value of $?
if ($?){
#processing block
}
else {
throw $error[0].exception
}
It turns out that exceptions are categorized into two groups, terminating exceptions and non-terminating exceptions. By default, try-catch intercepts only terminating exceptions. No surprisingly, get-WMIobject exceptions are non-terminating exceptions.
There are two ways to make it work. One is to make all exception terminating by below assignment:
$ErrorActionPreference = "Stop"; #Make all errors terminating
Remember to reset the preference at the end of your script as this is global.
$ErrorActionPreference = "Continue"
Or right after get-WMIobject statement, check the value of $?
if ($?){
#processing block
}
else {
throw $error[0].exception
}
Retrieving Terminal Server Configuration Settings Using Powershell
It was quite easy for Windows 2003 TS servers with Win32_TerminalServiceSetting WMI class, there are tons of documents on the Net. It took me some time, however, to find out that MS change the class considerably for Windows 2008.
It's now under a different name space root\cimv2\TerminalServices. It also requires you to specify an authentication flavour before you can gain access.
In short, you get info with below commands (w2k3 and w2k8 respectively):
gwmi Win32_TerminalServiceSetting -computername -namespace root/cimv2/TerminalServices -authentication 6
or
gwmi Win32_TerminalServiceSetting -computername [-namespace root/cimv2]
It's now under a different name space root\cimv2\TerminalServices. It also requires you to specify an authentication flavour before you can gain access.
In short, you get info with below commands (w2k3 and w2k8 respectively):
gwmi Win32_TerminalServiceSetting -computername
or
gwmi Win32_TerminalServiceSetting -computername
Subscribe to:
Posts (Atom)