Microsoft Virtualization Discussions

Using powershell to query Windows servers to DSM version info...


Hello all-


Have been using this WMI call to get windows DSM driver version from a list of about 100 servers:


Get-WmiObject -Class Win32_Product -ComputerName $s -Filter "Name='Data ONTAP DSM for Windows MPIO'" #| Format-List -Property *


The problem is, using powershell it is VERY slow...takes about 2 hours to get thru 100 servers...Does anyone know of a Netapp powershell command to get the verison info for the Netapp DSM driver version ???



Hello @pippen23,


Using the "Win32_Product" WMI class has some downsides, the most notable is that it uses the MSI provider to enumerate the products and gather information.  Every time you query Win32_Product it does that enumeration which has a non-inconsequential imact to the system (my Win10 quad core i7 desktop jumps to 25% CPU).  You can see these queries happening in the Windows application log too.


There's some work arounds, like forward only enumerators, but the one I favor is from the Scripting Guy.  It queries the registry for the software information and is significantly faster (and doesn't cause the MSI provider to eat a lot of CPU on the hosts).


Hope that helps!



If this post resolved your issue, please help others by selecting ACCEPT AS SOLUTION or adding a KUDO.


I assume you are creating a variable from reading your machine list ($s), then running a ForEach loop through the list submitting each Cmdlet. But you could parrallelize this process by submitting each Cmdlet to run as a background job, thus dramatically improving total time to completion. Just add "-AsJob" to the end of your Cmdlet.


You can run "Get-Job" to see the status of your submitted jobs after that.


Probably a good idea to pipe the results to an OutFile for review.