如何在PowerShell脚本中通过1Password CLIv2实现无交互自动登录?
1Password CLIv2 PowerShell自动登录解决方案
核心解决思路
1Password CLIv2的op signin命令本身支持非交互式参数,不用依赖手动输入或管道传值,用官方提供的参数就能跳过输入提示实现自动登录。
方法1:通过--password参数传入密码
直接指定密码参数即可跳过交互式输入,但绝对不能硬编码密码,推荐用安全方式存储和读取:
步骤1:用PowerShell安全模块存储密码
先安装官方的密钥管理模块:
Install-Module -Name Microsoft.PowerShell.SecretManagement, Microsoft.PowerShell.SecretStore -Force
注册本地密钥存储容器:
Register-SecretVault -Name Local1PStore -ModuleName Microsoft.PowerShell.SecretStore -DefaultVault
存入你的1Password账户密码:
Set-Secret -Name 1PAccountPassword -Secret "你的1Password密码"
步骤2:脚本中实现自动登录
从安全存储中读取密码,再传入op signin:
$password = Get-Secret -Name 1PAccountPassword -AsPlainText op signin domain.1password.com my@email.com --password $password
方法2:使用会话令牌(更高效,适合长期运行脚本)
登录一次生成会话令牌,之后通过环境变量复用令牌,无需重复输入密码:
生成会话令牌(仅需执行一次)
# 生成原始会话令牌 $sessionToken = op signin domain.1password.com my@email.com --raw # 设置当前进程的环境变量 [Environment]::SetEnvironmentVariable("OP_SESSION_domain.1password.com", $sessionToken, "Process")
脚本中直接复用令牌
设置好环境变量后,后续所有op命令都会自动使用会话令牌,无需再执行op signin:
# 示例:直接获取项目列表,无需重复登录 op item list
重要注意事项
- 不要使用
Invoke-Expression $(op signin),直接调用op命令更安全,Invoke-Expression存在命令注入风险。 - 会话令牌有有效期,过期后需要重新生成。
- 绝对禁止在脚本中硬编码密码,避免账户信息泄露。
内容的提问来源于stack exchange,提问作者Timothy Waters
相关产品推荐
相关产品推荐

