Exploring Plug&Play Devices (Part 1)

by Dec 30, 2019

You are probably living already in a connected smart home with many devices hooked up to your network. PowerShell can help you find your devices with just a few lines of code:

$UPnPFinder = New-Object -ComObject UPnP.UPnPDeviceFinder
$UPnPFinder.FindByType("upnp:rootdevice", 0)

Note that the UPnP finder component takes some time to detect your devices. The result looks like this:

 
IsRootDevice     : True
RootDevice       : System.__ComObject
ParentDevice     : 
HasChildren      : False
Children         : System.__ComObject
UniqueDeviceName : uuid:73796E6F-6473-6D00-0000-001132283f5e
FriendlyName     : Storage2 (DS414)
Type             : urn:schemas-upnp-org:device:Basic:1
PresentationURL  : http://192.168.2.107:5000/
ManufacturerName : Synology
ManufacturerURL  : http://www.synology.com/
ModelName        : DS414
ModelNumber      : DS414 5.1-5055
Description      : Synology NAS
ModelURL         : http://www.synology.com/
UPC              : 
SerialNumber     : 001132283f5e
Services         : System.__ComObject

IsRootDevice     : True
RootDevice       : System.__ComObject
ParentDevice     : 
HasChildren      : False
Children         : System.__ComObject
UniqueDeviceName : uuid:2f402f80-da50-11e1-9b23-001788ac0af1
FriendlyName     : BridgeOne (192.168.2.100)
Type             : urn:schemas-upnp-org:device:Basic:1
PresentationURL  : http://192.168.2.100/index.html
ManufacturerName : Signify
ManufacturerURL  : http://www.meethue.com/
ModelName        : Philips hue bridge 2015
ModelNumber      : BSB002
Description      : Philips hue Personal Wireless Lighting
ModelURL         : http://www.meethue.com/
UPC              : 
SerialNumber     : 001788ac0af1
Services         : System.__ComObject
... 
 

Use Select-Object to pick the properties you find interesting:

$UPnPFinder = New-Object -ComObject UPnP.UPnPDeviceFinder
$UPnPFinder.FindByType("upnp:rootdevice", 0) | 
  Select-Object ModelName, FriendlyName, PresentationUrl |
  Sort-Object ModelName

In my home, the list looks like this:

 
ModelName                          FriendlyName               PresentationURL                
---------                          ------------               ---------------                
AFTMM                              Tobias's 2nd Fire TV                                      
AFTS                               Tobias's Fire TV                                          
AFTT                               Tobias's 3rd Fire TV stick                                
DS414                              Storage2 (DS414)           http://192.168.2.107:5000/     
NETGEAR Orbi Desktop AC3000 Router RBR50 (Gateway)            http://www.orbilogin.net/      
Philips hue bridge 2015            BridgeOne (192.168.2.100)  http://192.168.2.100/index.html
Philips hue bridge 2015            BridgeWork (192.168.2.106) http://192.168.2.106/index.html
SoundTouch 20                      Bad                                                       
SoundTouch 30                      Portable                                                  
SoundTouch SA-4                    Garden                                                    
SoundTouch SA-4                    LivingRoom      
 

I am using a Synology NAS, and if I ever forget the URL to access it, I can now easily look it up. The same goes for my Philips Hue light system: the UPnP finder returns the IP addresses for all hubs.

Note that the UPnP finder will only find devices that are connected to the same network your computer is connected to. If the device IP address is on another subnet, it can’t be detected this way.


You are a PowerShell Professional, passionate about improving your code and skills? You take security seriously and are always looking for the latest advice and guidance to make your code more secure and faster? You’d love to connect to the vibrant PowerShell community and get in touch with other PowerShell Professionals to share tricks and experience? Then PowerShell Conference EU 2020 might be just the right place for you: https://psconf.eu (June 2-5, 2020 in Hanover, Germany).

It’s a unique mixture of classic conference with three parallel tracks filled with fast-paced PowerShell presentations, and advanced learning class with live discussions, Q&A and plenty of networking.

Secure your seat while they last: https://psconf.eu/register.html. Help build the agenda and make this “your” event by submitting hypothetical sessions you’d like to hear: https://powershell.one/psconfeu/psconf.eu-2020/reverse-cfp. And if you’d like to present yourself and join the psconf.eu speakers’ team, submit proposals: https://sessionize.com/psconfeu/.

Twitter This Tip! ReTweet this Tip!