如何通过rb-appscript编写Keychain脚本?

时间:2011-04-22 18:25:13

标签: ruby applescript keychain rb-appscript

我按照文档写道:

require 'rubygems'
require 'appscript'

loginKeychain = Appscript::app('Keychain Scripting').keychains['login.keychain']
userName = loginKeychain.keys[its.name.eq(name)].password.get

更新:如果我通过终端运行脚本,它第一次成功,然后返回错误,直到我退出并重新启动终端;并重复......

间歇性地返回错误:

/Library/Ruby/Gems/1.8/gems/rb-appscript-0.5.3/lib/appscript.rb:539:in `_send_command': CommandError (Appscript::CommandError)
        OSERROR: -600
        MESSAGE: Application isn't running.
        COMMAND: app("/System/Library/ScriptingAdditions/Keychain Scripting.app").keychains["login.keychain"].keys[its.name.eq("a name")].password.get()

更新2:由于神秘的错误,以及Keychain Scripting似乎一般都有错误,我决定使用MacRuby。我找到了MacRuby Keychain Wrapper库,它直接调用了Keychain Services,而不是通过Scripting:

require 'keychain-wrapper/keychain'
MRKeychain::GenericItem.item_for_service(service_name).password
  • 易于
  • 效率更高
  • 完美无瑕地工作

完成。

2 个答案:

答案 0 :(得分:0)

我没有使用Ruby,但我使用了Python,我没有遇到任何麻烦。我会尝试使用常规的Applescript,看看它是否可以访问Keychain Scripting。如果没有,请尝试重新启动Mac。但这听起来像是一个比Appscript更多的计算机问题。

答案 1 :(得分:0)

我遇到了同样的错误,但只是需要验证的事情:


kc = app("Keychain Scripting").keychains["login.keychain"]
p kc.keys[its.name.eq("loginwindow")].name.get
# ["loginwindow"]
p kc.keys[its.name.eq("loginwindow")].password.get
# ... Application isn't running ...

tell app "Keychain Scripting" to password of keys of keychain "login.keychain" where name is "loginwindow"效果很好。