I\'m fairly new to Powershell, and am wondering if someone knows of any better way to accomplish the following example problem.
I have an array of mappings from IP a
After 1.5 years, the cmdlet I had pasted in the original answer has undergone so many updates that it has become completely outdated. Therefore I have replaced the code and the ReadMe with a link to the latest version.
Main features:
The Join-Object cmdlet can be download from PowerShell Gallery using the command:
Install-Script -Name Join
The Join-Object cmdlet reveals the following proxy commands with their own (-JoinType
and -Property
) defaults:
InnerJoin-Object
(Alias InnerJoin
or Join
), combines the related objectsLeftJoin-Object
(Alias LeftJoin
), combines the related objects and adds the rest of the left objectsRightJoin-Object
(Alias RightJoin
), combines the related objects and adds the rest of the right objectsFullJoin-Object
(Alias FullJoin
), combines the related objects and adds the rest of the left and right objectsCrossJoin-Object
(Alias CrossJoin
), combines each left object with each right objectUpdate-Object
(Alias Update
), updates the left object with the related right objectMerge-Object
(Alias Merge
), updates the left object with the related right object and adds the rest of the new (unrelated) right objectsThe full ReadMe (and source code) is available from GitHub: https://github.com/iRon7/Join-Object
After downloading (Install-Script -Name Join
), the script can simply be invoked by dot sourcing:
. .\Join.ps1
You might also consider to convert the script to a PowerShell module by renaming it to a PowerShell module (.psm1
) file and moving it to a one of the module folders defined in $env:PSModulePath
. For more details see: How to Write a PowerShell Script Module.
Note: the Import-Module
command is required to load the proxy commands.
To answer the actual example in the question:
$reservations | LeftJoin $leases -On IP
IP MAC Name
-- --- ----
192.168.1.1 001D606839C2 Apple
192.168.1.2 00E018782BE1 Pear
192.168.1.3 0022192AF09C Banana
192.168.1.4 0013D4352A0D
More examples can be found in the related Stackoverflow questions at:
And in the Join-Object test script.