I like using the PICkit 2 with the PK2CMD.exe command line control. I can embedded it into any IDE with ease and automate the programming of the microcontroller through the PICkit 2 programmer. The limitation of the Microchip released PK2CMD vs the PICkit 2 GUI control was they used different device files and the PK2CMD didn't support as many devices as the GUI supported. The GUI supported more of the latest devices but neither supported the PIC18F25K22 which is an awesome device.
But several years ago a Microchip forum post by MichaelS explained that he figured out how to modify the PK2CMD to work with the device file for the GUI. So this meant that the PK2CMD v1.21 by MichaelS could support all the parts that the GUI supported. And if that GUI device list was ever updated, then the PK2CMD would also get updated by that same file.