使用 AppleScript 的隐私选项卡

Privacy tab using AppleScript

我正在尝试使用 Applescript 访问 Privacy -> Accessibility 选项卡。谁能帮帮我?

我需要显示部分中所有程序的列表:

请求本身和终端中的输出使用osascript -e

有必要排除与 GUI 的交互。这是我设法找到的

osascript -e 'tell application "System Events" to get the name of every login item'

我需要为辅助功能找到相同的解决方案吗?并得到与下面截图相同的结果。

主要目标是

  1. 本地获取安全与隐私中包含的信息 2) 通过 SSH 连接到 mac OS 并获取 安全和隐私 中包含的信息。如果这不可能,那么如何使用单个 Apple 脚本显示信息。

您应该按照以下方式转义嵌套引号。并且,激活系统偏好设置。

osascript -e "
tell application id \"com.apple.systempreferences\"
activate
reveal anchor named \"Privacy_Accessibility\" in pane id \"com.apple.preference.security\"
end tell
tell application id \"sevs\" to tell process \"System Preferences\"
repeat until window \"Security & Privacy\" exists
delay 0.02
end repeat
tell scroll area 1 of group 1 of tab group 1 of window \"Security & Privacy\"
get value of static text 1 of UI element 1 of rows of table 1
end tell
end tell"

或者,如果需要 table 所需项目(左侧)的视图(右侧)已经打开,您可以在 Catalina 上使用以下 osascript:

osascript -e "
tell application id \"sevs\" to tell process \"System Preferences\"
set frontmost to true
tell scroll area 1 of group 1 of tab group 1 of window \"Security & Privacy\" to get value of static text 1 of UI element 1 of rows of table 1
end tell"

It is necessary to exclude interaction with the GUI (on the remote system).

使用 远程系统 进行测试 macOS Big Sur 11.6 并选中 [√] 允许完整磁盘访问系统偏好设置 > 共享 > 远程登录 中的远程用户 远程系统,然后是示例shell脚本代码 本地系统 终端 中执行 ssh 会话 远程系统 将为您提供原始 转储系统偏好设置辅助功能下列出的内容[= =88=] > 安全与隐私 > 隐私 无需 UI 脚本使用 AppleScript.

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,您可以说您需要 output 才能更漂亮。换句话说,使用 AppleScript script 保存为 shell script 使用 #!/usr/bin/osascript shebang 在同一个 远程系统 上的 输出 例如:

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

备注:

我创建、保存并使 example AppleScript code 可执行,如上所示,在本地系统上,然后使用[=]将它从本地系统复制到远程系统 16=].



注意:示例 AppleScript code 就是这样,没有包含任何 错误处理 不包含任何额外的 错误处理 可能是适当的。用户有责任根据需要或需要添加任何 错误处理 。查看 try statement and error statement in the AppleScript Language Guide. See also, Working with Errors. Additionally, the use of the delay 命令 在适当的事件之间可能是必要的,例如delay 0.5,适当设置延迟