有必要排除与 GUI 的交互(在远程系统上)。
使用macOS Big Sur 11.6远程系统进行测试,并在System Preferences > Sharing > Remote Login on the remote system中选中[√] Allow full disk access for remote users,然后在本地系统的终端中执行示例shell 脚本代码与远程系统的会话将为您提供系统偏好设置>安全和隐私>中的可访问性下列出的内容的原始转储 ssh
无需使用AppleScript编写 UI 脚本的隐私。
sqlite3 '/Library/Application Support/com.apple.TCC/TCC.db' 'SELECT client FROM access WHERE service="kTCCServiceAccessibility";'
在测试系统上,它的输出是:
/System/Library/Frameworks/CoreServices.framework/Versions/A/Frameworks/AE.framework/Versions/A/Support/AEServer
com.apple.AccessibilityInspector
com.apple.Automator
com.apple.ScriptEditor2
com.apple.Terminal
com.latenightsw.ScriptDebugger8
但是,如果您确实需要使用AppleScript,则可以说您需要输出漂亮。换句话说,使用使用shebang保存为shell 脚本的AppleScript 脚本,同一远程系统上的输出将是例如:#!/usr/bin/osascript
AEServer, Accessibility Inspector, Automator, Script Editor, Terminal, Script Debugger
示例 AppleScript 代码:
#!/usr/bin/osascript
set theAccessibilityList to paragraphs of (do shell script "sqlite3 '/Library/Application Support/com.apple.TCC/TCC.db' 'SELECT client FROM access WHERE service=\"kTCCServiceAccessibility\";'")
set theAccessibilityApplicationNamesList to {}
repeat with thisItem in theAccessibilityList
if thisItem starts with "/" then
set shellCommand to (do shell script "f=" & quoted form of thisItem & "; echo ${f##*/}")
set end of theAccessibilityApplicationNamesList to shellCommand
else
try
set end of theAccessibilityApplicationNamesList to the name of application id thisItem
end try
end if
end repeat
return theAccessibilityApplicationNamesList
笔记:
我在本地系统上创建、保存并使其可执行示例 AppleScript 代码,如上所示,然后使用.scp
注意:示例 AppleScript 代码就是这样,并且没有任何包含的错误处理,不包含任何可能适当的额外错误处理。用户有责任根据需要或需要添加任何错误处理。查看AppleScript 语言指南中的try 语句和错误 语句。另请参阅处理错误。此外,在适当的情况下,可能需要在事件之间使用延迟命令,例如,使用延迟的值 delay 0.5
适当设置。