PowerShell脚本执行GAM创建G Suite用户报400认证错误如何解决
问题原因
手动执行GAM命令正常、PowerShell脚本内调用报400: invalid password,核心原因有两个:
- 脚本调用GAM时未正确加载已授权的OAuth认证缓存:GAM默认读取当前执行用户目录下
.gam文件夹内的认证凭据,PowerShell脚本运行时如果工作目录异常、环境变量未正确配置,就会触发Google侧认证失败,该错误经常被误判为创建用户的密码参数不符合规则。 - 现有创建用户的GAM命令参数缺失:
sha参数作用是声明后续传入的密码值为SHA哈希格式,当前命令没有跟对应的密码值,GAM会将空值/异常随机值作为密码提交给Google接口,直接触发密码无效报错。
修复方案
- 首先在脚本开头显式配置GAM的路径与认证目录,避免裸调用
gam时找不到配置:
# 请将路径替换为你本机实际的GAM安装目录 $gamInstallPath = "C:\GAM" $env:PATH = "$gamInstallPath;$env:PATH" # 指定GAM认证配置文件的存储目录,和你手动执行GAM时读取的目录保持一致 $env:GAMCFGDIR = "$env:USERPROFILE\.gam" # 先执行认证校验,确认能正常读取域名信息再往下走 gam info domain
- 修正创建用户的命令参数,补全必填的密码项。如果需要给新用户生成随机初始密码,将原创建命令替换为:
# 生成8位随机初始密码,强制用户首次登录时修改密码 gam create user $email firstname $firstname lastname $lastname password random 8 changepassword on recoveryemail $recovery
如果需要指定自定义初始密码,将password random 8替换为password 你的自定义密码值即可;如果要传入SHA哈希格式的密码,再补充sha参数并跟上对应的哈希值,不要留空。
- 执行脚本时注意,运行PowerShell的Windows账号需要和你当初完成GAM授权配置时用的Windows账号一致,否则会读不到对应目录下的认证缓存;如果必须用其他账号跑脚本,把原账号用户目录下
.gam文件夹内的所有认证文件拷贝到当前运行账号的同名目录下即可。 - 修复后完整的参考脚本如下:
# GAM路径配置 $gamInstallPath = "C:\GAM" $env:PATH = "$gamInstallPath;$env:PATH" $env:GAMCFGDIR = "$env:USERPROFILE\.gam" # 认证校验 gam info domain if ($LASTEXITCODE -ne 0) { Write-Error "GAM认证失败,请检查配置目录下的授权文件是否有效" exit 1 } # 收集用户信息 $firstname = Read-Host -Prompt 'Input first name' $lastname = Read-Host -Prompt 'Input last name' $username = $firstname.ToLower()+"."+$lastname.ToLower() $email = $username+'@archiactvr.com' $recovery = Read-Host -Prompt 'What is the recovery email address' # 创建用户 gam create user $email firstname $firstname lastname $lastname password random 8 changepassword on recoveryemail $recovery if ($LASTEXITCODE -ne 0) { Write-Error "用户创建失败,请检查参数是否合规" exit 1 } # 添加到对应群组 gam update group vancouverstudio@archiactvr.com add member user $email
内容的提问来源于stack exchange,提问作者TL_Arwen
相关产品推荐
相关产品推荐

