# Powershell Decoder Sample

 loreck Jul 27, 2015 at 7:07 AM Edited Jul 27, 2015 at 7:08 AM I have included sample code below for a powershell based decoder using the ZXing.dll if anyone finds this useful. Best Regards, // Synopsis // Load Bitmap from File and call ZXing Decoder for barcode decoding. Reflection.Assembly::LoadFile("C:\Users\lorek\Desktop\zxing.dll") Reflection.Assembly::LoadWithPartialName("System.Drawing") $reader = New-Object ZXing.BarcodeReader$bitmap = [System.Drawing.Bitmap]::FromFile("c:\temp\sample.png") // $result =$reader.Decode($bitmap) micjahn Coordinator Aug 13, 2015 at 7:43 PM Thanks for sharing it. TreeStryder Oct 20, 2015 at 3:38 PM You can now use Add-Type, instead of Reflection.Assembly. Add-Type -Path (Join-Path$PSScriptRoot 'zxing.dll') $reader = New-Object ZXing.BarcodeReader$bitmap = [System.Drawing.Bitmap]::FromFile('C:\path\to\image.png') $result =$reader.Decode($bitmap)$result  For me, System.Drawing did not need to be explicitly loaded. If it did, one would use: Add-Type -AssemblyName System.Drawing loreck Oct 22, 2015 at 7:35 PM This works ok in v3 and later, however; I did experience inconsistent problems with function calls from the DLL when loaded in this way for v2. Overall, I have had significant difficulty getting Powershell to use the ZXing library properly in V2. The above code will work for a default option basic QRCode read, however; if you need to change options I have yet to discover an easy way of passing those parameters natively/semi-natively without defining the IDictionary Object fully first in a C# code block and then dynamically compiling it at runtime. It seems Powershell v2 simply cannot create strongly-typed Custom Dictionary Object members, and it handles Enumeration Types only slightly less poorly. All variations of New-Object where it is not defined below as 2[], Powershell cannot find the Type with the library loaded. Every variation I could think of below would find the type, but could not convert System.Object[] to System.String <<< ComObject The code below assumes both the ZXing.dll and System.Collections.Generic.* have been loaded with Add-Type or through Reflection. \$IDict = New-Object "System.Collections.Generic.Dictionary2[[ZXing.DecodeHintType, zxing.dll],[System.Collections.Generic.List[System.Object],mscorlib.dll]]"