天问

Keepass批量修改过期时间

需求

使用 Keepass 来管理账号密码等隐私信息已经过去7年了,大量账号需要集中分类管理,尤其是早期使用的时候,很多账户没有设置有效期,比如网易云邮箱,180天没有登录,邮箱账号被无情回收了。。 考虑到账号的安全性,目前需要对所有账户设置一个有效期,所有账户半年后提示登录一次,强制更改密码。

由于账户较多,不太情愿一个一个的去设置,为此查找了相关插件以及API,通过一个自定义脚本实现批量修改Keepass过期时间。

Step1:下载Scripting KeePass (2.x)插件

这个就不多说,下载 Scripting KeePass 插件,由于插件是最新版本的,所以Keepass 也需要一同更新到最新版本。下载链接如下:

Scripting KeePass (2.x) - KeePass

Step2:编写shell脚本

新建脚本文件 keepass_tools.ps1,输入下面代码:

##################################
### Backup your password file! ###
### Edit these items as needed ###
##################################
$kps  = 'C:\Program Files (x86)\KeePass Password Safe 2\KPScript.exe'
$kdbx = '<your keepass file>'
$pass = '<your password>'

$keyfile='C:\Users\xx.jpg'

# Get entries
$output = & "$kps" -c:ListEntries "$kdbx" -pw:$pass -keyfile:"$keyfile"
$pattern = 'UUID: '
$uuids = $output | Select-String -pattern $pattern

$count = $uuids.Matches.Count

# Update each entry
foreach ($match in $uuids) {

    [DateTime]$theMin = [DateTime]::Now
    [DateTime]$theMax = [DateTime]::Now.AddDays(365)

    $theRandomGen = new-object random
    $theRandomTicks = [Convert]::ToInt64( ($theMax.ticks * 1.0 - $theMin.Ticks * 1.0 ) * $theRandomGen.NextDouble() + $theMin.Ticks * 1.0 )
    $newDate = new-object DateTime($theRandomTicks)

    echo "$count items remaining"
    $count = $count - 1
    $uuid = $match.Line.Substring($pattern.Length)
    $output = & "$kps" -c:EditEntry "$kdbx" -pw:$pass -keyfile:"$keyfile" -refx-UUID:"$uuid" -setx-Expires:"true" "-setx-ExpiryTime:$newDate"
}

$x = Read-Host -Prompt 'Finished - Press Enter to continue'

执行结果:

更多资料可以查看下面链接:

KeePass / Feature Requests / #1318 Change Expiration Date from List (sourceforge.net)

注意事项

1、执行脚本之前,请做好备份!

2、保存 powershell 执行需要管理员权限,别用cmd执行!

3、注意ps1代码编码为GB2312而不是UTF8

4、完事之后, Scripting KeePass 插件就可以删掉了,应该删掉

博客地址:http://blog.yoqi.me/?p=17599
扫我捐助哦
喜欢 0

这篇文章还没有评论

发表评论