PowerShell 5 module for KeePass automation and manipulation
This module allows for the manipulation of a KeePass database that can be incorporated into scripts and toolsets for automation. It could also be used as a command line tool if you don't want to use the GUI. The only requirement for this module is that the latest KeePass version 2.xx is installed. Get it from https://keepass.info/download.html
In the \tests
folder there is a Pester script that will run through most the functions of the module and ensure that they are all working correctly.
- Download and copy the module to the default module path, usually
C:\Program Files\Windows PowerShell\Modules\
- Import the module using
Import-Module -Name 'PowerShellKeePass'
- Initialize the KeePass Library using
Initialize-KeePassModule
. If you have installed KeePass into its default folder, you can just type it as shown. If KeePass is installed elsewhere, you'll need to add a path to the command:Initialize-KeePassModule -Path 'path\to\KeePass.exe'
- Start using the module in your scripts!
In case you can't remember the group structure of your KeePass database, you can show the Tree view simple with the command Get-KeePassGroupTreeView -KeePassDatabase $kpdb
. The treeview for the default KeePass database is...
ExampleDatabase
├─ E: Sample Entry
├─ E: Sample Entry #2
├─ General
├─ Windows
├─ Network
├─ Internet
├─ eMail
└─ Homebanking
The default output of the module is to return a PSCustomObject containing everything available for the entires or groups you are requesting, however the default view is to show only the Title
, UserName
, Url
and LastModified
fields. However, this is just a view and all other properties of the object are available.
Title UserName Url LastModified
----- -------- --- ------------
Sample Entry User Name https://keepass.info/ 01/01/2020 00:00:00
Sample Entry #2 Michael321 https://keepass.info/help/kb/testform.html 01/01/2020 00:00:00
The full details of an object would look something like this
Uuid : 68D516A7434D4744AC09F68501B5765F
Title : Sample Entry
UserName : User Name
Password : ********
PasswordQuality : Very Weak (14 bits)
Url : https://keepass.info/
Notes : Notes
FullPath : Database
Icon : Key
CustomIcon :
Created : 00/00/2020 00:00:00
LastAccessed : 00/00/2020 00:00:00
LastModified : 00/00/2020 00:00:00
Expiry : N/A
LocationChanged : 00/00/2020 00:00:00
Touched :
UsageCount : 0
Fields : {}
Binaries : {}
SizeKB : 1
Foreground : Color [Empty]
Background : Color [Empty]
Tags : {}
OverrideUrl :
AutoType : KeePassLib.Collections.AutoTypeConfig
Credential : System.Management.Automation.PSCredential
KeePassObject : KeePassLib.PwEntry
One of the parameters of some functions is the -AsObject
parameter. This will return the entry or group details as a KeePass object not a PSCustomObject.
Uuid : KeePassLib.PwUuid
ParentGroup : KeePassLib.PwGroup
LocationChanged : 28/05/2020 15:04:24
Strings : {[Notes, KeePassLib.Security.ProtectedString], [Password, KeePassLib.Security.Prote...}
Binaries : {}
AutoType : KeePassLib.Collections.AutoTypeConfig
History : {}
IconId : Key
CustomIconUuid : KeePassLib.PwUuid
ForegroundColor : Color [Empty]
BackgroundColor : Color [Empty]
CreationTime : 28/05/2020 15:04:24
LastModificationTime : 28/05/2020 15:04:24
LastAccessTime : 28/05/2020 15:04:24
ExpiryTime : 28/05/2020 15:03:42
Expires : False
UsageCount : 0
OverrideUrl :
Tags : {}
CustomData : {}
Touched :
This example will create a new KeePass database and populate it with an example entry.
Import-Module -Name 'PowerShellKeePass'
Initialize-KeePassModule
$kpdb = (New-KeePassDatabase -FilePath 'C:\ExampleDatabase.kdbx' -MasterPassword 'Passw0rd!23' -KeeFile 'C:\KeeFile.txt')
New-KeePassEntry -KeePassDatabase $kpdb -Title 'New Entry #1' -UserName 'Bob' -Icon 'Book'
Close-KeePassDataBase -KeePassDatabase $kpdb
This example will open an existing database and search for a specific entry.
Import-Module -Name 'PowerShellKeePass'
Initialize-KeePassModule
$kpdb = (Open-KeePassDatabase -FilePath 'C:\ExampleDatabase.kdbx' -MasterPassword 'Passw0rd!23' -KeeFile 'C:\KeeFile.txt')
Find-KeePassEntry -KeePassDatabase $kpdb -SearchFor 'Sample Entry' -Field Title