API เดตเดดเดฟ PowerShell-เตฝ เดจเดฟเดจเตเดจเต Google เด‰เดชเดฏเต‹เด•เตเดคเดพเด•เตเด•เดณเต† เดธเตƒเดทเตเดŸเดฟเด•เตเด•เตเดจเตเดจเต

เดนเดฒเต‹!

G Suite เด‰เดชเดฏเต‹เด•เตเดคเดพเด•เตเด•เดณเต† เด•เตˆเด•เดพเดฐเตเดฏเด‚ เดšเต†เดฏเตเดฏเตเดจเตเดจเดคเดฟเดจเดพเดฏเดฟ Google API-เดฏเตเดฎเดพเดฏเตเดณเตเดณ PowerShell เด‡เดŸเดชเต†เดŸเตฝ เดจเดŸเดชเตเดชเดฟเดฒเดพเด•เตเด•เตเดจเตเดจเดคเดฟเดจเต† เดˆ เดฒเต‡เด–เดจเด‚ เดตเดฟเดตเดฐเดฟเด•เตเด•เตเด‚.

เดธเตเดฅเดพเดชเดจเดคเตเดคเดฟเดฒเตเดŸเดจเต€เดณเด‚ เดžเด™เตเด™เตพ เดจเดฟเดฐเดตเดงเดฟ เด‡เดจเตเดฑเต‡เดฃเตฝ, เด•เตเดฒเต—เดกเต เดธเต‡เดตเดจเด™เตเด™เตพ เด‰เดชเดฏเต‹เด—เดฟเด•เตเด•เตเดจเตเดจเต. เดฎเดฟเด•เตเด•เดตเดพเดฑเตเด‚, เด…เดตเดฏเดฟเดฒเต† เด…เด‚เด—เต€เด•เดพเดฐเด‚ เด—เต‚เด—เดฟเดณเดฟเดฒเต‹ เด†เด•เตเดฑเตเดฑเต€เดตเต เดกเดฏเดฑเด•เตโ€ŒเดŸเดฑเดฟเดฏเดฟเดฒเต‹ เดตเดฐเตเดจเตเดจเต, เด…เดคเดฟเดจเดฟเดŸเดฏเดฟเตฝ เดžเด™เตเด™เตพเด•เตเด•เต เด’เดฐเต เดชเด•เตผเดชเตเดชเต เดจเดฟเดฒเดจเดฟเตผเดคเตเดคเดพเตป เด•เดดเดฟเดฏเดฟเดฒเตเดฒ; เด…เดคเดจเตเดธเดฐเดฟเดšเตเดšเต, เด’เดฐเต เดชเตเดคเดฟเดฏ เดœเต€เดตเดจเด•เตเด•เดพเดฐเตป เดชเต‹เด•เตเดฎเตเดชเต‹เตพ, เดˆ เดฐเดฃเตเดŸเต เดธเดฟเดธเตเดฑเตเดฑเด™เตเด™เดณเดฟเดฒเตเด‚ เดจเดฟเด™เตเด™เตพ เด’เดฐเต เด…เด•เตเด•เต—เดฃเตเดŸเต เดธเตƒเดทเตโ€ŒเดŸเดฟเด•เตเด•เต‡เดฃเตเดŸเดคเตเดฃเตเดŸเต/เดชเตเดฐเดตเตผเดคเตเดคเดจเด•เตเดทเดฎเดฎเดพเด•เตเด•เต‡เดฃเตเดŸเดคเตเดฃเตเดŸเต. เดชเตเดฐเด•เตเดฐเดฟเดฏ เด“เดŸเตเดŸเต‹เดฎเต‡เดฑเตเดฑเต เดšเต†เดฏเตเดฏเตเดจเตเดจเดคเดฟเดจเต, เดตเดฟเดตเดฐเด™เตเด™เตพ เดถเต‡เด–เดฐเดฟเดšเตเดšเต เดฐเดฃเตเดŸเต เดธเต‡เดตเดจเด™เตเด™เดณเดฟเดฒเต‡เด•เตเด•เตเด‚ เด…เดฏเดฏเตเด•เตเด•เตเดจเตเดจ เด’เดฐเต เดธเตเด•เตเดฐเดฟเดชเตเดฑเตเดฑเต เดŽเดดเตเดคเดพเตป เดžเด™เตเด™เตพ เดคเต€เดฐเตเดฎเดพเดจเดฟเดšเตเดšเต.

เด…เด‚เด—เต€เด•เดพเดฐเด‚

เด†เดตเดถเตเดฏเด•เดคเด•เตพ เดคเดฏเตเดฏเดพเดฑเดพเด•เตเด•เตเดฎเตเดชเต‹เตพ, เด…เด‚เด—เต€เด•เดพเดฐเดคเตเดคเดฟเดจเดพเดฏเดฟ เดฏเดฅเดพเตผเดคเตเดฅ เดฎเดพเดจเตเดทเดฟเด• เด…เดกเตเดฎเดฟเดจเดฟเดธเตเดŸเตเดฐเต‡เดฑเตเดฑเตผเดฎเดพเดฐเต† เด‰เดชเดฏเต‹เด—เดฟเด•เตเด•เดพเตป เดžเด™เตเด™เตพ เดคเต€เดฐเตเดฎเดพเดจเดฟเดšเตเดšเต; เด†เด•เดธเตเดฎเดฟเด•เดฎเต‹ เดฎเดจเดƒเดชเต‚เตผเดตเดฎเต‹ เด†เดฏ เดตเดฒเดฟเดฏ เดฎเดพเดฑเตเดฑเด™เตเด™เดณเตเดฃเตเดŸเดพเดฏเดพเตฝ เดชเตเดฐเดตเตผเดคเตเดคเดจเด™เตเด™เดณเตเดŸเต† เดตเดฟเดถเด•เดฒเดจเด‚ เด‡เดคเต เดฒเดณเดฟเดคเดฎเดพเด•เตเด•เตเดจเตเดจเต.

เดชเตเดฐเดพเดฎเดพเดฃเต€เด•เดฐเดฃเดคเตเดคเดฟเดจเตเด‚ เด…เด‚เด—เต€เด•เดพเดฐเดคเตเดคเดฟเดจเตเดฎเดพเดฏเดฟ Google API-เด•เตพ OAuth 2.0 เดชเตเดฐเต‹เดŸเตเดŸเต‹เด•เตเด•เต‹เตพ เด‰เดชเดฏเต‹เด—เดฟเด•เตเด•เตเดจเตเดจเต. เด‰เดชเดฏเต‹เด— เด•เต‡เดธเตเด•เดณเตเด‚ เด•เต‚เดŸเตเดคเตฝ เดตเดฟเดถเดฆเดฎเดพเดฏ เดตเดฟเดตเดฐเดฃเด™เตเด™เดณเตเด‚ เด‡เดตเดฟเดŸเต† เด•เดพเดฃเดพเด‚: Google API-เด•เตพ เด†เด•เตโ€Œเดธเดธเต เดšเต†เดฏเตเดฏเดพเตป OAuth 2.0 เด‰เดชเดฏเต‹เด—เดฟเด•เตเด•เตเดจเตเดจเต.

เดกเต†เดธเตเด•เตเดŸเต‹เดชเตเดชเต เด†เดชเตเดฒเดฟเด•เตเด•เต‡เดทเดจเตเด•เดณเดฟเตฝ เด…เด‚เด—เต€เด•เดพเดฐเดคเตเดคเดฟเดจเดพเดฏเดฟ เด‰เดชเดฏเต‹เด—เดฟเด•เตเด•เตเดจเตเดจ เดธเตเด•เตเดฐเดฟเดชเตเดฑเตเดฑเต เดžเดพเตป เดคเดฟเดฐเดžเตเดžเต†เดŸเตเดคเตเดคเต. เด’เดฐเต เดธเต‡เดตเดจ เด…เด•เตเด•เต—เดฃเตเดŸเต เด‰เดชเดฏเต‹เด—เดฟเด•เตเด•เตเดจเตเดจเดคเดฟเดจเตเดณเตเดณ เด’เดฐเต เด“เดชเตเดทเดจเตเด‚ เด‰เดฃเตเดŸเต, เด…เดคเต เด‰เดชเดฏเต‹เด•เตเดคเดพเดตเดฟเตฝ เดจเดฟเดจเตเดจเต เด…เดจเดพเดตเดถเตเดฏ เดšเดฒเดจเด™เตเด™เตพ เด†เดตเดถเตเดฏเดฎเดฟเดฒเตเดฒ.

เดšเตเดตเดŸเต†เดฏเตเดณเตเดณ เดšเดฟเดคเตเดฐเด‚ Google เดชเต‡เดœเดฟเตฝ เดจเดฟเดจเตเดจเต เดคเดฟเดฐเดžเตเดžเต†เดŸเตเดคเตเดค เดธเดพเดนเดšเดฐเตเดฏเดคเตเดคเดฟเดจเตเดฑเต† เดธเตเด•เต€เดฎเดพเดฑเตเดฑเดฟเด•เต เดตเดฟเดตเดฐเดฃเดฎเดพเดฃเต.

API เดตเดดเดฟ PowerShell-เตฝ เดจเดฟเดจเตเดจเต Google เด‰เดชเดฏเต‹เด•เตเดคเดพเด•เตเด•เดณเต† เดธเตƒเดทเตเดŸเดฟเด•เตเด•เตเดจเตเดจเต

  1. เด†เดฆเตเดฏเด‚, GET เดชเดพเดฐเดพเดฎเต€เดฑเตเดฑเดฑเตเด•เตพ เดตเตเดฏเด•เตเดคเดฎเดพเด•เตเด•เดฟเด•เตเด•เตŠเดฃเตเดŸเต เดžเด™เตเด™เตพ เด‰เดชเดฏเต‹เด•เตเดคเดพเดตเดฟเดจเต† Google เด…เด•เตเด•เต—เดฃเตเดŸเต เดชเตเดฐเดพเดฎเดพเดฃเต€เด•เดฐเดฃ เดชเต‡เดœเดฟเดฒเต‡เด•เตเด•เต เด…เดฏเดฏเตเด•เตเด•เตเดจเตเดจเต:
    • เด†เดชเตเดฒเดฟเด•เตเด•เต‡เดทเตป เดเดกเดฟ
    • เด…เดชเตเดฒเดฟเด•เตเด•เต‡เดทเดจเต เด†เด•เตโ€Œเดธเดธเต เด†เดตเดถเตเดฏเดฎเตเดณเตเดณ เดฎเต‡เด–เดฒเด•เตพ
    • เดจเดŸเดชเดŸเดฟเด•เตเดฐเดฎเด‚ เดชเต‚เตผเดคเตเดคเดฟเดฏเดพเด•เตเด•เดฟเดฏ เดถเต‡เดทเด‚ เด‰เดชเดฏเต‹เด•เตเดคเดพเดตเดฟเดจเต† เดฑเต€เดกเดฏเดฑเด•เตโ€ŒเดŸเต เดšเต†เดฏเตเดฏเตเดจเตเดจ เดตเดฟเดฒเดพเดธเด‚
    • เดžเด™เตเด™เตพ เดŸเต‹เด•เตเด•เตบ เด…เดชเตเดกเต‡เดฑเตเดฑเต เดšเต†เดฏเตเดฏเตเดจเตเดจ เดฐเต€เดคเดฟ
    • เดธเตเดฐเด•เตเดทเดพ เด•เต‡เดพเดกเต
    • เดธเตเดฅเดฟเดฐเต€เด•เดฐเดฃ เด•เต‹เดกเต เดŸเตเดฐเดพเตปเดธเตเดฎเดฟเดทเตป เดซเต‹เตผเดฎเดพเดฑเตเดฑเต

  2. เด…เด‚เด—เต€เด•เดพเดฐเด‚ เดชเต‚เตผเดคเตเดคเดฟเดฏเดพเด•เตเด•เดฟเดฏ เดถเต‡เดทเด‚, เด†เดฆเตเดฏ เด…เดญเตเดฏเตผเดคเตเดฅเดจเดฏเดฟเตฝ เดตเตเดฏเด•เตเดคเดฎเดพเด•เตเด•เดฟเดฏ เดชเต‡เดœเดฟเดฒเต‡เด•เตเด•เต เด‰เดชเดฏเต‹เด•เตเดคเดพเดตเดฟเดจเต† เดฑเต€เดกเดฏเดฑเด•เตโ€ŒเดŸเตเดšเต†เดฏเตเดฏเตเด‚, เด’เดฐเต เดชเดฟเดถเด•เต เด…เดฒเตเดฒเต†เด™เตเด•เดฟเตฝ GET เดชเดพเดฐเดพเดฎเต€เดฑเตเดฑเดฑเตเด•เตพ เดชเดพเดธเตเดธเดพเด•เตเด•เดฟเดฏ เด…เด‚เด—เต€เด•เดพเดฐ เด•เต‹เดกเต
  3. เด†เดชเตเดฒเดฟเด•เตเด•เต‡เดทเดจเต (เดธเตเด•เตเดฐเดฟเดชเตเดฑเตเดฑเต) เดˆ เดชเดพเดฐเดพเดฎเต€เดฑเตเดฑเดฑเตเด•เตพ เดฒเดญเดฟเด•เตเด•เต‡เดฃเตเดŸเดคเตเดฃเตเดŸเต, เด•เต‚เดŸเดพเดคเต† เด•เต‹เดกเต เดฒเดญเดฟเด•เตเด•เตเด•เดฏเดพเดฃเต†เด™เตเด•เดฟเตฝ, เดŸเต‹เด•เตเด•เดฃเตเด•เตพ เดฒเดญเดฟเด•เตเด•เตเดจเตเดจเดคเดฟเดจเต เด‡เดจเดฟเดชเตเดชเดฑเดฏเตเดจเตเดจ เด…เดญเตเดฏเตผเดคเตเดฅเดจ เดจเดŸเดคเตเดคเตเด•
  4. เด…เดญเตเดฏเตผเดคเตเดฅเดจ เดถเดฐเดฟเดฏเดพเดฃเต†เด™เตเด•เดฟเตฝ, Google API เดจเตฝเด•เตเดจเตเดจเต:
    • เดžเด™เตเด™เตพเด•เตเด•เต เด…เดญเตเดฏเตผเดคเตเดฅเดจเด•เตพ เดจเดŸเดคเตเดคเดพเตป เด•เดดเดฟเดฏเตเดจเตเดจ เด†เด•เตเดธเดธเต เดŸเต‹เด•เตเด•เตบ
    • เดˆ เดŸเต‹เด•เตเด•เดฃเดฟเดจเตเดฑเต† เดธเดพเดงเตเดค เด•เดพเดฒเดฏเดณเดตเต
    • เด†เด•เตโ€Œเดธเดธเต เดŸเต‹เด•เตเด•เตบ เดชเตเดคเตเด•เตเด•เดพเตป เดŸเต‹เด•เตเด•เตบ เดชเตเดคเตเด•เตเด•เต‡เดฃเตเดŸเดคเตเดฃเตเดŸเต.

เด†เดฆเตเดฏเด‚ เดจเดฟเด™เตเด™เตพ Google API เด•เตบเดธเต‹เดณเดฟเดฒเต‡เด•เตเด•เต เดชเต‹เด•เต‡เดฃเตเดŸเดคเตเดฃเตเดŸเต: เด•เตเดฐเต†เดกเตปเดทเตเดฏเดฒเตเด•เตพ - Google API เด•เตบเดธเต‹เตพ, เด†เดตเดถเตเดฏเดฎเตเดณเตเดณ เด†เดชเตเดฒเดฟเด•เตเด•เต‡เดทเตป เดคเดฟเดฐเดžเตเดžเต†เดŸเตเดคเตเดคเต เด•เตเดฐเต†เดกเตปเดทเตเดฏเตฝ เดตเดฟเดญเดพเด—เดคเตเดคเดฟเตฝ เด’เดฐเต เด•เตเดฒเดฏเดจเตเดฑเต OAuth เดเดกเดจเตเดฑเดฟเดซเดฏเตผ เดธเตƒเดทเตเดŸเดฟเด•เตเด•เตเด•. เด…เดตเดฟเดŸเต† (เด…เดฒเตเดฒเต†เด™เตเด•เดฟเตฝ เดชเดฟเดจเตเดจเต€เดŸเต, เดธเตƒเดทเตเดŸเดฟเดšเตเดš เดเดกเดจเตเดฑเดฟเดซเดฏเดฑเดฟเดจเตเดฑเต† เดธเดตเดฟเดถเต‡เดทเดคเด•เดณเดฟเตฝ) เดฑเต€เดกเดฏเดฑเด•เตเดทเตป เด…เดจเตเดตเดฆเดฟเดšเตเดšเดฟเดฐเดฟเด•เตเด•เตเดจเตเดจ เดตเดฟเดฒเดพเดธเด™เตเด™เตพ เดจเดฟเด™เตเด™เตพ เดตเตเดฏเด•เตเดคเดฎเดพเด•เตเด•เต‡เดฃเตเดŸเดคเตเดฃเตเดŸเต. เดžเด™เตเด™เดณเตเดŸเต† เด•เดพเดฐเตเดฏเดคเตเดคเดฟเตฝ, เด‡เดต เดตเตเดฏเดคเตเดฏเดธเตเดค เดชเต‹เตผเดŸเตเดŸเตเด•เดณเตเดณเตเดณ เดจเดฟเดฐเดตเดงเดฟ เดฒเต‹เด•เตเด•เตฝเดนเต‹เดธเตเดฑเตเดฑเต เดŽเตปเดŸเตเดฐเดฟเด•เดณเดพเดฏเดฟเดฐเดฟเด•เตเด•เตเด‚ (เดšเตเดตเดŸเต† เด•เดพเดฃเตเด•).

เดธเตโ€Œเด•เตเดฐเดฟเดชเตเดฑเตเดฑเต เด…เตฝโ€Œเด—เต‹เดฐเดฟเดคเด‚ เดตเดพเดฏเดฟเด•เตเด•เตเดจเตเดจเดคเต เด•เต‚เดŸเตเดคเตฝ เดธเต—เด•เดฐเตเดฏเดชเตเดฐเดฆเดฎเดพเด•เตเด•เตเดจเตเดจเดคเดฟเดจเต, เดจเดฟเด™เตเด™เตพเด•เตเด•เต เด†เดฆเตเดฏ เด˜เดŸเตเดŸเด™เตเด™เตพ เด’เดฐเต เดชเตเดฐเดคเตเดฏเต‡เด• เดซเด‚เด—เตโ€Œเดทเดจเดฟเตฝ เดชเตเดฐเดฆเตผเดถเดฟเดชเตเดชเดฟเด•เตเด•เดพเตป เด•เดดเดฟเดฏเตเด‚, เด…เดคเต เด†เด•เตโ€Œเดธเดธเต เดจเตฝเด•เตเด•เดฏเตเด‚ เด†เดชเตเดฒเดฟเด•เตเด•เต‡เดทเดจเดพเดฏเดฟ เดŸเต‹เด•เตเด•เดฃเตเด•เตพ เดชเตเดคเตเด•เตเด•เตเด•เดฏเตเด‚ เดšเต†เดฏเตเดฏเตเด‚:

$client_secret = 'Our Client Secret'
$client_id = 'Our Client ID'
function Get-GoogleAuthToken {
  if (-not [System.Net.HttpListener]::IsSupported) {
    "HttpListener is not supported."
    exit 1
  }
  $codeverifier = -join ((65..90) + (97..122) + (48..57) + 45 + 46 + 95 + 126 |Get-Random -Count 60| % {[char]$_})
  $hasher = new-object System.Security.Cryptography.SHA256Managed
  $hashByteArray = $hasher.ComputeHash([System.Text.Encoding]::UTF8.GetBytes($codeverifier))
  $base64 = ((([System.Convert]::ToBase64String($hashByteArray)).replace('=','')).replace('+','-')).replace('/','_')
  $ports = @(10600,15084,39700,42847,65387,32079)
  $port = $ports[(get-random -Minimum 0 -maximum 5)]
  Write-Host "Start browser..."
  Start-Process "https://accounts.google.com/o/oauth2/v2/auth?code_challenge_method=S256&code_challenge=$base64&access_type=offline&client_id=$client_id&redirect_uri=http://localhost:$port&response_type=code&scope=https://www.googleapis.com/auth/admin.directory.user https://www.googleapis.com/auth/admin.directory.group"
  $listener = New-Object System.Net.HttpListener
  $listener.Prefixes.Add("http://localhost:"+$port+'/')
  try {$listener.Start()} catch {
    "Unable to start listener."
    exit 1
  }
  while (($code -eq $null)) {
    $context = $listener.GetContext()
    Write-Host "Connection accepted" -f 'mag'
    $url = $context.Request.RawUrl
    $code = $url.split('?')[1].split('=')[1].split('&')[0]
    if ($url.split('?')[1].split('=')[0] -eq 'error') {
      Write-Host "Error!"$code -f 'red'
      $buffer = [System.Text.Encoding]::UTF8.GetBytes("Error!"+$code)
      $context.Response.ContentLength64 = $buffer.Length
      $context.Response.OutputStream.Write($buffer, 0, $buffer.Length)
      $context.Response.OutputStream.Close()
      $listener.Stop()
      exit 1
    }
    $buffer = [System.Text.Encoding]::UTF8.GetBytes("Now you can close this browser tab.")
    $context.Response.ContentLength64 = $buffer.Length
    $context.Response.OutputStream.Write($buffer, 0, $buffer.Length)
    $context.Response.OutputStream.Close()
    $listener.Stop()
  }
  Return Invoke-RestMethod -Method Post -Uri "https://www.googleapis.com/oauth2/v4/token" -Body @{
    code = $code
    client_id = $client_id
    client_secret = $client_secret
    redirect_uri = 'http://localhost:'+$port
    grant_type = 'authorization_code'
    code_verifier   = $codeverifier
  }
  $code = $null

OAuth เด•เตเดฒเดฏเดจเตเดฑเต เดเดกเดจเตเดฑเดฟเดซเดฏเตผ เดชเตเดฐเต‹เดชเตเดชเตผเดŸเตเดŸเดฟเด•เดณเดฟเตฝ เดจเดฟเดจเตเดจเต เดฒเดญเดฟเดšเตเดš เด•เตเดฒเดฏเดจเตเดฑเต เดเดกเดฟเดฏเตเด‚ เด•เตเดฒเดฏเดจเตเดฑเต เดฐเดนเดธเตเดฏเดตเตเด‚ เดžเด™เตเด™เตพ เดธเดœเตเดœเต€เด•เดฐเดฟเดšเตเดšเต, เด•เต‚เดŸเดพเดคเต† เด•เต‹เดกเต เดตเต†เดฐเดฟเดซเดฏเตผ เดŽเดจเตเดจเดคเต เดฑเดฟเดธเตผเดตเต เดšเต†เดฏเตเดฏเดพเดคเตเดค เดชเตเดฐเดคเต€เด•เด™เตเด™เดณเดฟเตฝ เดจเดฟเดจเตเดจเต เด•เตเดฐเดฎเดฐเดนเดฟเดคเดฎเดพเดฏเดฟ เดœเดจเดฑเต‡เดฑเตเดฑเต เดšเต†เดฏเตเดฏเต‡เดฃเตเดŸ 43 เดฎเตเดคเตฝ 128 เดชเตเดฐเดคเต€เด•เด™เตเด™เดณเตเดŸเต† เด’เดฐเต เดธเตเดŸเตเดฐเดฟเด‚เด—เต เด†เดฃเต: [AZ] / [az] / [0-9 ] / "-" / "." / "_" / "~".

เดˆ เด•เต‹เดกเต เดชเดฟเดจเตเดจเต€เดŸเต เดตเต€เดฃเตเดŸเตเด‚ เด•เตˆเดฎเดพเดฑเตเด‚. เด‰เดชเดฏเต‹เด•เตเดคเตƒ เด…เด‚เด—เต€เด•เดพเดฐเดคเตเดคเดฟเดจเต เดถเต‡เดทเด‚ เด’เดฐเต เดฑเต€เดกเดฏเดฑเด•เตโ€ŒเดŸเดพเดฏเดฟ เดฎเดŸเด™เตเด™เดฟเดฏ เด’เดฐเต เดชเตเดฐเดคเดฟเด•เดฐเดฃเดคเตเดคเต† เด†เด•เตเดฐเดฎเดฃเด•เดพเดฐเดฟเด•เตเด•เต เดคเดŸเดธเตเดธเดชเตเดชเต†เดŸเตเดคเตเดคเดพเตป เด•เดดเดฟเดฏเตเดจเตเดจ เด…เดชเด•เดŸเดธเดพเดงเตเดฏเดค เด‡เดคเต เด‡เดฒเตเดฒเดพเดคเดพเด•เตเด•เตเดจเตเดจเต.
เดจเดฟเดฒเดตเดฟเดฒเต† เด…เดญเตเดฏเตผเดคเตเดฅเดจเดฏเดฟเตฝ เดจเดฟเด™เตเด™เตพเด•เตเด•เต เดตเตเดฏเด•เตเดคเดฎเดพเดฏ เดตเดพเดšเด•เดคเตเดคเดฟเตฝ เด’เดฐเต เด•เต‹เดกเต เดตเต†เดฐเดฟเดซเดฏเตผ เด…เดฏเดฏเตโ€Œเด•เตเด•เดพเตป เด•เดดเดฟเดฏเตเด‚ (เด…เดคเต เด…เตผเดคเตเดฅเดถเต‚เดจเตเดฏเดฎเดพเด•เตเด•เตเดจเตเดจเต - เด‡เดคเต SHA256-เดจเต† เดชเดฟเดจเตเดคเตเดฃเดฏเตโ€Œเด•เตเด•เดพเดคเตเดค เดธเดฟเดธเตเดฑเตเดฑเด™เตเด™เตพเด•เตเด•เต เดฎเดพเดคเตเดฐเดฎเต‡ เด…เดจเตเดฏเต‹เดœเตเดฏเดฎเดพเด•เต‚), เด…เดฒเตเดฒเต†เด™เตเด•เดฟเตฝ SHA256 เด…เตฝเด—เต‹เดฐเดฟเดคเด‚ เด‰เดชเดฏเต‹เด—เดฟเดšเตเดšเต เด’เดฐเต เดนเดพเดทเต เดธเตƒเดทเตโ€ŒเดŸเดฟเด•เตเด•เตเดจเตเดจเดคเดฟเดฒเต‚เดŸเต†, เด…เดคเต BASE64Url-เตฝ เดŽเตปเด•เต‹เดกเต เดšเต†เดฏเตเดฏเดฃเด‚ (เดตเตเดฏเดคเตเดฏเดธเตโ€Œเดคเดฎเดพเดฃเต Base64-เตฝ เดจเดฟเดจเตเดจเต เดฐเดฃเตเดŸเต เดชเดŸเตเดŸเดฟเด• เดชเตเดฐเดคเต€เด•เด™เตเด™เตพ) เด•เต‚เดŸเดพเดคเต† เดชเตเดฐเดคเต€เด• เดตเดฐเดฟ เด…เดตเดธเดพเดจเด™เตเด™เตพ เดจเต€เด•เตเด•เด‚ เดšเต†เดฏเตเดฏเตเดจเตเดจเต: =.

เด…เดŸเตเดคเตเดคเดคเดพเดฏเดฟ, เด…เด‚เด—เต€เด•เดพเดฐเดคเตเดคเดฟเดจเต เดถเต‡เดทเด‚ เด’เดฐเต เดชเตเดฐเดคเดฟเด•เดฐเดฃเด‚ เดฒเดญเดฟเด•เตเด•เตเดจเตเดจเดคเดฟเดจเต เดžเด™เตเด™เตพ เดฒเต‹เด•เตเด•เตฝ เดฎเต†เดทเต€เดจเดฟเตฝ http เด•เต‡เตพเด•เตเด•เตเดจเตเดจเดคเต เด†เดฐเด‚เดญเดฟเด•เตเด•เต‡เดฃเตเดŸเดคเตเดฃเตเดŸเต, เด…เดคเต เดฑเต€เดกเดฏเดฑเด•เตโ€ŒเดŸเดพเดฏเดฟ เดคเดฟเดฐเดฟเด•เต† เดจเตฝเด•เตเด‚.

เด…เดกเตเดฎเดฟเดจเดฟเดธเตเดŸเตเดฐเต‡เดฑเตเดฑเต€เดตเต เดœเต‹เดฒเดฟเด•เตพ เด’เดฐเต เดชเตเดฐเดคเตเดฏเต‡เด• เดธเต†เตผเดตเดฑเดฟเตฝ เดจเดฟเตผเดตเดนเดฟเด•เตเด•เดชเตเดชเต†เดŸเตเดจเตเดจเต, เด’เดฐเต‡ เดธเดฎเดฏเด‚ เดจเดฟเดฐเดตเดงเดฟ เด…เดกเตเดฎเดฟเดจเดฟเดธเตเดŸเตเดฐเต‡เดฑเตเดฑเตผเดฎเดพเตผ เดธเตเด•เตเดฐเดฟเดชเตเดฑเตเดฑเต เดชเตเดฐเดตเตผเดคเตเดคเดฟเดชเตเดชเดฟเด•เตเด•เดพเดจเตเดณเตเดณ เดธเดพเดงเตเดฏเดค เดคเดณเตเดณเดฟเด•เตเด•เดณเดฏเดพเดจเดพเดตเดฟเดฒเตเดฒ, เด…เดคเดฟเดจเดพเตฝ เดจเดฟเดฒเดตเดฟเดฒเต† เด‰เดชเดฏเต‹เด•เตเดคเดพเดตเดฟเดจเดพเดฏเดฟ เด‡เดคเต เด•เตเดฐเดฎเดฐเดนเดฟเดคเดฎเดพเดฏเดฟ เด’เดฐเต เดชเต‹เตผเดŸเตเดŸเต เดคเดฟเดฐเดžเตเดžเต†เดŸเตเด•เตเด•เตเด‚, เดชเด•เตเดทเต‡ เดžเดพเตป เดฎเตเตปเด•เต‚เดŸเตเดŸเดฟ เดจเดฟเดถเตเดšเดฏเดฟเดšเตเดš เดชเต‹เตผเดŸเตเดŸเตเด•เตพ เดตเตเดฏเด•เตเดคเดฎเดพเด•เตเด•เดฟเดฏเดคเดฟเดจเดพเตฝ เด…เดตเดฏเตเด‚ API เด•เตบเดธเต‹เดณเดฟเตฝ เดตเดฟเดถเตเดตเดธเดจเต€เดฏเดฎเดพเดฏเดฟ เดšเต‡เตผเดคเตเดคเดฟเดฐเดฟเด•เตเด•เดฃเด‚.

access_type=เด“เดซเตโ€Œเดฒเตˆเตป เดฌเตเดฐเต—เดธเดฑเตเดฎเดพเดฏเตเดณเตเดณ เด‰เดชเดฏเต‹เด•เตเดคเตƒ เด‡เดŸเดชเต†เดŸเตฝ เด•เต‚เดŸเดพเดคเต† เดคเดจเตเดจเต† เด•เดพเดฒเดนเดฐเดฃเดชเตเดชเต†เดŸเตเดŸ เดŸเต‹เด•เตเด•เตบ เด…เดชเตโ€Œเดกเต‡เดฑเตเดฑเต เดšเต†เดฏเตเดฏเดพเตป เด…เดชเตเดฒเดฟเด•เตเด•เต‡เดทเดจเต เด•เดดเดฟเดฏเตเด‚ เดŽเดจเตเดจเดพเดฃเต เด…เตผเดคเตเดฅเดฎเดพเด•เตเด•เตเดจเตเดจเดคเต,
เดชเตเดฐเดคเดฟเด•เดฐเดฃเด‚_เดคเดฐเด‚=เด•เต‹เดกเต เด•เต‹เดกเต เดŽเด™เตเด™เดจเต† เดคเดฟเดฐเดฟเด•เต† เดจเตฝเด•เตเดฎเต†เดจเตเดจเดคเดฟเดจเตเดฑเต† เดซเต‹เตผเดฎเดพเดฑเตเดฑเต เดธเดœเตเดœเดฎเดพเด•เตเด•เตเดจเตเดจเต (เดชเดดเดฏ เด…เด‚เด—เต€เด•เดพเดฐ เดฐเต€เดคเดฟเดฏเต†เด•เตเด•เตเดฑเดฟเดšเตเดšเตเดณเตเดณ เด’เดฐเต เดฑเดซเดฑเตปเดธเต, เดฌเตเดฐเต—เดธเดฑเดฟเตฝ เดจเดฟเดจเตเดจเต เด•เต‹เดกเต เดธเตเด•เตเดฐเดฟเดชเตเดฑเตเดฑเดฟเดฒเต‡เด•เตเด•เต เด‰เดชเดฏเต‹เด•เตเดคเดพเดตเต เดชเด•เตผเดคเตเดคเดฟเดฏเดชเตเดชเต‹เตพ),
เดธเตเด•เต‹เดชเตเดชเต เดชเตเดฐเดตเต‡เดถเดจเดคเตเดคเดฟเดจเตเดฑเต† เดตเตเดฏเดพเดชเตเดคเดฟเดฏเตเด‚ เดคเดฐเดตเตเด‚ เดธเต‚เดšเดฟเดชเตเดชเดฟเด•เตเด•เตเดจเตเดจเต. เด…เดต เดธเตโ€Œเดชเต†เดฏเตโ€Œเดธเตเด•เดณเดพเตฝ เดตเต‡เตผเดคเดฟเดฐเดฟเด•เตเด•เต‡เดฃเตเดŸเดคเดพเดฃเต เด…เดฒเตเดฒเต†เด™เตเด•เดฟเตฝ% 20 (URL เดŽเตปเด•เต‹เดกเดฟเด‚เด—เต เด…เดจเตเดธเดฐเดฟเดšเตเดšเต). เดคเดฐเด™เตเด™เดณเตเดณเตเดณ เด†เด•เตเดธเดธเต เดเดฐเดฟเดฏเด•เดณเตเดŸเต† เด’เดฐเต เดฒเดฟเดธเตเดฑเตเดฑเต เด‡เดตเดฟเดŸเต† เด•เดพเดฃเดพเด‚: Google API-เด•เตพเด•เตเด•เตเดณเตเดณ OAuth 2.0 เดธเตเด•เต‹เดชเตเดชเตเด•เตพ.

เด…เด‚เด—เต€เด•เดพเดฐ เด•เต‹เดกเต เดฒเดญเดฟเดšเตเดšเดคเดฟเดจเต เดถเต‡เดทเด‚, เด†เดชเตเดฒเดฟเด•เตเด•เต‡เดทเตป เดฌเตเดฐเต—เดธเดฑเดฟเดฒเต‡เด•เตเด•เต เด’เดฐเต เด…เดŸเตเดคเตเดค เดธเดจเตเดฆเต‡เดถเด‚ เดจเตฝเด•เตเด‚, เดชเต‹เตผเดŸเตเดŸเดฟเตฝ เด•เต‡เตพเด•เตเด•เตเดจเตเดจเดคเต เดจเดฟเตผเดคเตเดคเตเด•เดฏเตเด‚ เดŸเต‹เด•เตเด•เตบ เดฒเดญเดฟเด•เตเด•เตเดจเตเดจเดคเดฟเดจเต เด’เดฐเต POST เด…เดญเตเดฏเตผเดคเตเดฅเดจ เด…เดฏเดฏเตเด•เตเด•เตเด•เดฏเตเด‚ เดšเต†เดฏเตเดฏเตเด‚. เด•เตบเดธเต‹เตพ API-เดฏเดฟเตฝ เดจเดฟเดจเตเดจเต เดฎเตเดฎเตเดชเต เดตเตเดฏเด•เตเดคเดฎเดพเด•เตเด•เดฟเดฏ เดเดกเดฟเดฏเตเด‚ เดฐเดนเดธเตเดฏเดตเตเด‚ เดžเด™เตเด™เตพ เด…เดคเดฟเตฝ เดธเต‚เดšเดฟเดชเตเดชเดฟเด•เตเด•เตเดจเตเดจเต, เด‰เดชเดฏเต‹เด•เตเดคเดพเดตเดฟเดจเต† เดฑเต€เดกเดฏเดฑเด•เตโ€ŒเดŸเตเดšเต†เดฏเตเดฏเตเดจเตเดจ เดตเดฟเดฒเดพเดธเดตเตเด‚ เดชเตเดฐเต‹เดŸเตเดŸเต‹เด•เตเด•เต‹เตพ เดธเตเดชเต†เดธเดฟเดซเดฟเด•เตเด•เต‡เดทเตป เด…เดจเตเดธเดฐเดฟเดšเตเดšเต เด—เตเดฐเดพเตปเดฑเต_เดŸเตˆเดชเตเดชเตเด‚ เดจเตฝเด•เตเดจเตเดจเต.

เดชเตเดฐเดคเดฟเด•เดฐเดฃเดฎเดพเดฏเดฟ, เดžเด™เตเด™เตพเด•เตเด•เต เด’เดฐเต เด†เด•เตโ€Œเดธเดธเต เดŸเต‹เด•เตเด•เดฃเตเด‚ เด…เดคเดฟเดจเตเดฑเต† เดธเดพเดงเตเดค เดธเต†เด•เตเด•เตปเดกเดฟเดจเตเดณเตเดณ เด•เดพเดฒเดฏเดณเดตเตเด‚ เด’เดฐเต เดชเตเดคเตเด•เตเด•เดฟเดฏ เดŸเต‹เด•เตเด•เดฃเตเด‚ เดฒเดญเดฟเด•เตเด•เตเด‚, เด…เดคเดฟเดฒเต‚เดŸเต† เดจเดฎเตเด•เตเด•เต เด†เด•เตโ€Œเดธเดธเต เดŸเต‹เด•เตเด•เตบ เด…เดชเตโ€Œเดกเต‡เดฑเตเดฑเต เดšเต†เดฏเตเดฏเดพเตป เด•เดดเดฟเดฏเตเด‚.

เด†เดชเตเดฒเดฟเด•เตเด•เต‡เดทเตป เดฆเต€เตผเด˜เดพเดฏเตเดธเตเดธเตเดณเตเดณ เด’เดฐเต เดธเตเดฐเด•เตเดทเดฟเดค เดธเตเดฅเดฒเดคเตเดคเต เดŸเต‹เด•เตเด•เดฃเตเด•เตพ เดธเด‚เดญเดฐเดฟเดšเตเดšเดฟเดฐเดฟเด•เตเด•เดฃเด‚, เด…เดคเดฟเดจเดพเตฝ เดžเด™เตเด™เตพ เดธเตเดตเต€เด•เดฐเดฟเดšเตเดš เด†เด•เตเดธเดธเต เด…เดธเดพเดงเตเดตเดพเด•เตเด•เตเดจเตเดจเดคเต เดตเดฐเต†, เด†เดชเตเดฒเดฟเด•เตเด•เต‡เดทเตป เดชเตเดคเตเด•เตเด•เดฟเดฏ เดŸเต‹เด•เตเด•เตบ เดคเดฟเดฐเดฟเด•เต† เดจเตฝเด•เดฟเดฒเตเดฒ. เด…เดตเดธเดพเดจเด‚, เดŸเต‹เด•เตเด•เตบ เด…เดธเดพเดงเตเดตเดพเด•เตเด•เดพเดจเตเดณเตเดณ เด’เดฐเต เด…เดญเตเดฏเตผเดคเตเดฅเดจ เดžเดพเตป เดšเต‡เตผเดคเตเดคเต; เด†เดชเตเดฒเดฟเด•เตเด•เต‡เดทเตป เดตเดฟเดœเดฏเด•เดฐเดฎเดพเดฏเดฟ เดชเต‚เตผเดคเตเดคเดฟเดฏเดพเด•เตเด•เดฟเดฏเดฟเดฒเตเดฒเต†เด™เตเด•เดฟเตฝ, เดชเตเดคเตเด•เตเด•เดฟเดฏ เดŸเต‹เด•เตเด•เตบ เดคเดฟเดฐเดฟเด•เต† เดฒเดญเดฟเดšเตเดšเดฟเดฒเตเดฒเต†เด™เตเด•เดฟเตฝ, เด…เดคเต เดตเต€เดฃเตเดŸเตเด‚ เดจเดŸเดชเดŸเดฟเด•เตเดฐเดฎเด‚ เด†เดฐเด‚เดญเดฟเด•เตเด•เตเด‚ (เดŸเต†เตผเดฎเดฟเดจเดฒเดฟเตฝ เดชเตเดฐเดพเดฆเต‡เดถเดฟเด•เดฎเดพเดฏเดฟ เดŸเต‹เด•เตเด•เดฃเตเด•เตพ เดธเด‚เดญเดฐเดฟเด•เตเด•เตเดจเตเดจเดคเต เดธเตเดฐเด•เตเดทเดฟเดคเดฎเดฒเตเดฒเต†เดจเตเดจเต เดžเด™เตเด™เตพ เด•เดฐเตเดคเดฟ. เด•เตเดฐเดฟเดชเตเดฑเตเดฑเต‹เด—เตเดฐเดซเดฟ เด‰เดชเดฏเต‹เด—เดฟเดšเตเดšเต เด•เดพเดฐเตเดฏเด™เตเด™เตพ เดธเด™เตเด•เต€เตผเดฃเตเดฃเดฎเดพเด•เตเด•เดพเดจเต‹ เดฌเตเดฐเต—เดธเตผ เด‡เดŸเดฏเตเด•เตเด•เดฟเดŸเต† เดคเตเดฑเด•เตเด•เดพเดจเต‹ เด†เด—เตเดฐเดนเดฟเด•เตเด•เตเดจเตเดจเดฟเดฒเตเดฒ).

do {
  $token_result = Get-GoogleAuthToken
  $token = $token_result.access_token
  if ($token_result.refresh_token -eq $null) {
    Write-Host ("Session is not destroyed. Revoking token...")
    Invoke-WebRequest -Uri ("https://accounts.google.com/o/oauth2/revoke?token="+$token)
  }
} while ($token_result.refresh_token -eq $null)
$refresh_token = $token_result.refresh_token
$minute = ([int]("{0:mm}" -f ([timespan]::fromseconds($token_result.expires_in))))+((Get-date).Minute)-2
if ($minute -lt 0) {$minute += 60}
elseif ($minute -gt 59) {$minute -=60}
$token_expire = @{
  hour = ([int]("{0:hh}" -f ([timespan]::fromseconds($token_result.expires_in))))+((Get-date).Hour)
  minute = $minute
}

เดจเดฟเด™เตเด™เตพ เด‡เดคเดฟเดจเด•เด‚ เดถเตเดฐเดฆเตเดงเดฟเดšเตเดšเดคเตเดชเต‹เดฒเต†, เด’เดฐเต เดŸเต‹เด•เตเด•เตบ เด…เดธเดพเดงเตเดตเดพเด•เตเด•เตเดฎเตเดชเต‹เตพ, Invoke-WebRequest เด‰เดชเดฏเต‹เด—เดฟเด•เตเด•เตเดจเตเดจเต. Invoke-RestMethod เดชเต‹เดฒเต†เดฏเดฒเตเดฒ, เด‡เดคเต เดธเตเดตเต€เด•เดฐเดฟเดšเตเดš เดกเดพเดฑเตเดฑ เด‰เดชเดฏเต‹เด—เดฏเต‹เด—เตเดฏเดฎเดพเดฏ เดซเต‹เตผเดฎเดพเดฑเตเดฑเดฟเตฝ เดคเดฟเดฐเดฟเด•เต† เดจเตฝเด•เตเดจเตเดจเดฟเดฒเตเดฒ เด•เต‚เดŸเดพเดคเต† เด…เดญเตเดฏเตผเดคเตเดฅเดจเดฏเตเดŸเต† เดจเดฟเดฒ เด•เดพเดฃเดฟเด•เตเด•เตเดจเตเดจเต.

เด…เดŸเตเดคเตเดคเดคเดพเดฏเดฟ, เด’เดฐเต เดฒเต‹เด—เดฟเตป + เด‡เดฎเต†เดฏเดฟเตฝ เดธเตƒเดทเตเดŸเดฟเดšเตเดšเตเด•เตŠเดฃเตเดŸเต เด‰เดชเดฏเต‹เด•เตเดคเดพเดตเดฟเดจเตเดฑเต† เดชเต‡เดฐเดฟเดจเตเดฑเต† เด†เดฆเตเดฏเดญเดพเด—เดตเตเด‚ เด…เดตเดธเดพเดจ เดจเดพเดฎเดตเตเด‚ เดจเตฝเด•เดพเตป เดธเตเด•เตเดฐเดฟเดชเตเดฑเตเดฑเต เดจเดฟเด™เตเด™เดณเต‹เดŸเต เด†เดตเดถเตเดฏเดชเตเดชเต†เดŸเตเดจเตเดจเต.

เด…เดญเตเดฏเตผเดคเตเดฅเดจเด•เตพ

เด…เดŸเตเดคเตเดค เด…เดญเตเดฏเตผเดคเตเดฅเดจเด•เตพ เด‡เดคเดพเดฏเดฟเดฐเดฟเด•เตเด•เตเด‚ - เด’เดจเตเดจเดพเดฎเดคเดพเดฏเดฟ, เดชเตเดคเดฟเดฏเตŠเดฐเต†เดฃเตเดฃเด‚ เดธเตƒเดทเตเดŸเดฟเด•เตเด•เตเดจเตเดจเดคเดฟเดจเต‹ เดจเดฟเดฒเดตเดฟเดฒเตเดณเตเดณเดคเต เดชเตเดฐเดตเตผเดคเตเดคเดจเด•เตเดทเดฎเดฎเดพเด•เตเด•เตเดจเตเดจเดคเดฟเดจเต‹ เด’เดฐเต เดคเต€เดฐเตเดฎเดพเดจเด‚ เดฒเดญเดฟเด•เตเด•เตเดจเตเดจเดคเดฟเดจเต, เด…เดคเต‡ เดฒเต‹เด—เดฟเตป เด‰เดณเตเดณ เด’เดฐเต เด‰เดชเดฏเต‹เด•เตเดคเดพเดตเต เด‡เดคเดฟเดจเด•เด‚ เดจเดฟเดฒเดตเดฟเดฒเตเดฃเตเดŸเต‹ เดŽเดจเตเดจเต เดจเดฟเด™เตเด™เตพ เดชเดฐเดฟเดถเต‹เดงเดฟเด•เตเด•เต‡เดฃเตเดŸเดคเตเดฃเตเดŸเต.

เดธเตเดตเดฟเดšเตเดšเต เด‰เดชเดฏเต‹เด—เดฟเดšเตเดšเต เดŽเดฒเตเดฒเดพ เด…เดญเตเดฏเตผเดคเตเดฅเดจเด•เดณเตเด‚ เด’เดฐเต เดซเด‚เด—เตโ€Œเดทเดจเตเดฑเต† เดซเต‹เตผเดฎเดพเดฑเตเดฑเดฟเตฝ เด’เดฐเต เดคเดฟเดฐเดžเตเดžเต†เดŸเตเดชเตเดชเต เด‰เดชเดฏเต‹เด—เดฟเดšเตเดšเต เดจเดŸเดชเตเดชเดฟเดฒเดพเด•เตเด•เดพเตป เดžเดพเตป เดคเต€เดฐเตเดฎเดพเดจเดฟเดšเตเดšเต:

function GoogleQuery {
  param (
    $type,
    $query
  )
  switch ($type) {
    "SearchAccount" {
      Return Invoke-RestMethod -Method Get -Uri "https://www.googleapis.com/admin/directory/v1/users" -Headers @{Authorization = "Bearer "+(Get-GoogleToken)} -Body @{
        domain = 'rocketguys.com'
        query  = "email:$query"
      }
    }
    "UpdateAccount" {
      $body = @{
        name  = @{
          givenName = $query['givenName']
          familyName = $query['familyName']
        }
        suspended = 'false'
        password = $query['password']
        changePasswordAtNextLogin = 'true'
        phones = @(@{
          primary = 'true'
          value = $query['phone']
          type = "mobile"
        })
        orgUnitPath = $query['orgunit']
      }
      Return Invoke-RestMethod -Method Put -Uri ("https://www.googleapis.com/admin/directory/v1/users/"+$query['email']) -Headers @{Authorization = "Bearer "+(Get-GoogleToken)} -Body (ConvertTo-Json $body) -ContentType 'application/json; charset=utf-8'
    }
    
    "CreateAccount" {
      $body = @{
        primaryEmail = $query['email']
        name  = @{
          givenName = $query['givenName']
          familyName = $query['familyName']
        }
        suspended = 'false'
        password = $query['password']
        changePasswordAtNextLogin = 'true'
        phones = @(@{
          primary = 'true'
          value = $query['phone']
          type = "mobile"
        })
        orgUnitPath = $query['orgunit']
      }
      Return Invoke-RestMethod -Method Post -Uri "https://www.googleapis.com/admin/directory/v1/users" -Headers @{Authorization = "Bearer "+(Get-GoogleToken)} -Body (ConvertTo-Json $body) -ContentType 'application/json; charset=utf-8'
    }
    "AddMember" {
      $body = @{
        userKey = $query['email']
      }
      $ifrequest = Invoke-RestMethod -Method Get -Uri "https://www.googleapis.com/admin/directory/v1/groups" -Headers @{Authorization = "Bearer "+(Get-GoogleToken)} -Body $body
      $array = @()
      foreach ($group in $ifrequest.groups) {$array += $group.email}
      if ($array -notcontains $query['groupkey']) {
        $body = @{
          email = $query['email']
          role = "MEMBER"
        }
        Return Invoke-RestMethod -Method Post -Uri ("https://www.googleapis.com/admin/directory/v1/groups/"+$query['groupkey']+"/members") -Headers @{Authorization = "Bearer "+(Get-GoogleToken)} -Body (ConvertTo-Json $body) -ContentType 'application/json; charset=utf-8'
      } else {
        Return ($query['email']+" now is a member of "+$query['groupkey'])
      }
    }
  }
}

เด“เดฐเต‹ เด…เดญเตเดฏเตผเดคเตเดฅเดจเดฏเดฟเดฒเตเด‚, เดŸเต‹เด•เตเด•เตบ เดคเดฐเดตเตเด‚ เด†เด•เตโ€Œเดธเดธเต เดŸเต‹เด•เตเด•เดฃเตเด‚ เด…เดŸเด™เตเด™เตเดจเตเดจ เด’เดฐเต เด“เดคเดฑเตˆเดธเต‡เดทเตป เดนเต†เดกเตผ เดจเดฟเด™เตเด™เตพ เด…เดฏเดฏเตโ€Œเด•เตเด•เต‡เดฃเตเดŸเดคเตเดฃเตเดŸเต. เดจเดฟเดฒเดตเดฟเตฝ, เดŸเต‹เด•เตเด•เตบ เดคเดฐเด‚ เดŽเดชเตเดชเต‹เดดเตเด‚ เดฌเต†เดฏเดฑเดฑเดพเดฃเต. เด•เดพเดฐเดฃเด‚ เดŸเต‹เด•เตเด•เตบ เด•เดพเดฒเดนเดฐเดฃเดชเตเดชเต†เดŸเตเดŸเดฟเดŸเตเดŸเดฟเดฒเตเดฒเต†เดจเตเดจเต เดžเด™เตเด™เตพ เดชเดฐเดฟเดถเต‹เดงเดฟเด•เตเด•เต‡เดฃเตเดŸเดคเตเดฃเตเดŸเต, เด…เดคเต เด‡เดทเตเดฏเต‚ เดšเต†เดฏเตเดค เดจเดฟเดฎเดฟเดทเด‚ เดฎเตเดคเตฝ เด’เดฐเต เดฎเดฃเดฟเด•เตเด•เต‚เดฑเดฟเดจเต เดถเต‡เดทเด‚ เด…เดคเต เด…เดชเตโ€Œเดกเต‡เดฑเตเดฑเต เดšเต†เดฏเตเดฏเดฃเด‚, เด’เดฐเต เด†เด•เตโ€Œเดธเดธเต เดŸเต‹เด•เตเด•เตบ เดคเดฟเดฐเดฟเด•เต† เดจเตฝเด•เตเดจเตเดจ เดฎเดฑเตเดฑเตŠเดฐเต เดซเด‚เด—เตโ€Œเดทเดจเตเดณเตเดณ เด’เดฐเต เด…เดญเตเดฏเตผเดคเตเดฅเดจ เดžเดพเตป เดตเตเดฏเด•เตเดคเดฎเดพเด•เตเด•เดฟ. เด†เดฆเตเดฏ เด†เด•เตเดธเดธเต เดŸเต‹เด•เตเด•เตบ เดฒเดญเดฟเด•เตเด•เตเดฎเตเดชเต‹เตพ เด…เดคเต‡ เด•เต‹เดกเต เดธเตเด•เตเดฐเดฟเดชเตเดฑเตเดฑเดฟเดจเตเดฑเต† เดคเตเดŸเด•เตเด•เดคเตเดคเดฟเดฒเดพเดฃเต:

function Get-GoogleToken {
  if (((Get-date).Hour -gt $token_expire.hour) -or (((Get-date).Hour -ge $token_expire.hour) -and ((Get-date).Minute -gt $token_expire.minute))) {
  Write-Host "Token Expired. Refreshing..."
    $request = (Invoke-RestMethod -Method Post -Uri "https://www.googleapis.com/oauth2/v4/token" -ContentType 'application/x-www-form-urlencoded' -Body @{
      client_id = $client_id
      client_secret = $client_secret
      refresh_token = $refresh_token
      grant_type = 'refresh_token'
    })
    $token = $request.access_token
    $minute = ([int]("{0:mm}" -f ([timespan]::fromseconds($request.expires_in))))+((Get-date).Minute)-2
    if ($minute -lt 0) {$minute += 60}
    elseif ($minute -gt 59) {$minute -=60}
    $script:token_expire = @{
      hour = ([int]("{0:hh}" -f ([timespan]::fromseconds($request.expires_in))))+((Get-date).Hour)
      minute = $minute
    }
  }
  return $token
}

เด…เดธเตเดคเดฟเดคเตเดตเดคเตเดคเดฟเดจเดพเดฏเดฟ เดฒเต‹เด—เดฟเตป เดชเดฐเดฟเดถเต‹เดงเดฟเด•เตเด•เตเดจเตเดจเต:

function Check_Google {
  $query = (GoogleQuery 'SearchAccount' $username)
  if ($query.users -ne $null) {
    $user = $query.users[0]
    Write-Host $user.name.fullName' - '$user.PrimaryEmail' - suspended: '$user.Suspended
    $GAresult = $user
  }
  if ($GAresult) {
      $return = $GAresult
  } else {$return = 'gg'}
  return $return
}

เด‡เดฎเต†เดฏเดฟเตฝ:$query เด…เดญเตเดฏเตผเดคเตเดฅเดจ, เด…เดชเดฐเดจเดพเดฎเด™เตเด™เตพ เด‰เตพเดชเตเดชเต†เดŸเต†, เด•เตƒเดคเตเดฏเดฎเดพเดฏเดฟ เด† เด‡เดฎเต†เดฏเดฟเตฝ เด‰เดณเตเดณ เด’เดฐเต เด‰เดชเดฏเต‹เด•เตเดคเดพเดตเดฟเดจเต† เดคเดฟเดฐเดฏเดพเตป API-เดฏเต‹เดŸเต เด†เดตเดถเตเดฏเดชเตเดชเต†เดŸเตเด‚. เดจเดฟเด™เตเด™เตพเด•เตเด•เต เดตเตˆเตฝเดกเตเด•เดพเตผเดกเตเด‚ เด‰เดชเดฏเต‹เด—เดฟเด•เตเด•เดพเด‚: =, :, :{PREFIX}*.

เดกเดพเดฑเตเดฑ เดจเต‡เดŸเตเดจเตเดจเดคเดฟเดจเต, GET เด…เดญเตเดฏเตผเดคเตเดฅเดจ เดฐเต€เดคเดฟ เด‰เดชเดฏเต‹เด—เดฟเด•เตเด•เตเด•, เดกเดพเดฑเตเดฑ เดคเดฟเดฐเตเด•เดพเตป (เด’เดฐเต เด…เด•เตเด•เต—เดฃเตเดŸเต เดธเตƒเดทเตโ€ŒเดŸเดฟเด•เตเด•เตเด• เด…เดฒเตเดฒเต†เด™เตเด•เดฟเตฝ เด’เดฐเต เด—เตเดฐเต‚เดชเตเดชเดฟเดฒเต‡เด•เตเด•เต เด’เดฐเต เด…เด‚เด—เดคเตเดคเต† เดšเต‡เตผเด•เตเด•เตเด•) - POST, เดจเดฟเดฒเดตเดฟเดฒเตเดณเตเดณ เดกเดพเดฑเตเดฑ เด…เดชเตโ€Œเดกเต‡เดฑเตเดฑเต เดšเต†เดฏเตเดฏเดพเตป - PUT, เด’เดฐเต เดฑเต†เด•เตเด•เต‹เตผเดกเต เด‡เดฒเตเดฒเดพเดคเดพเด•เตเด•เดพเตป (เด‰เดฆเดพเดนเดฐเดฃเดคเตเดคเดฟเดจเต, เด’เดฐเต เด—เตเดฐเต‚เดชเตเดชเดฟเตฝ เดจเดฟเดจเตเดจเตเดณเตเดณ เด’เดฐเต เด…เด‚เด—เด‚) - เด‡เดฒเตเดฒเดพเดคเดพเด•เตเด•เตเด•.

เดธเตเด•เตเดฐเดฟเดชเตเดฑเตเดฑเต เด’เดฐเต เดซเต‹เตบ เดจเดฎเตเดชเดฑเดฟเดจเตเด‚ (เดธเดพเดงเตเดคเดฏเดฟเดฒเตเดฒเดพเดคเตเดค เด’เดฐเต เดธเตเดŸเตเดฐเดฟเด‚เด—เต) เด’เดฐเต เดชเตเดฐเดพเดฆเต‡เดถเดฟเด• เดตเดฟเดคเดฐเดฃ เด—เตเดฐเต‚เดชเตเดชเดฟเตฝ เด‰เตพเดชเตเดชเต†เดŸเตเดคเตเดคเดพเดจเตเด‚ เด†เดตเดถเตเดฏเดชเตเดชเต†เดŸเตเด‚. เดคเดฟเดฐเดžเตเดžเต†เดŸเตเดคเตเดค เด†เด•เตเดฑเตเดฑเต€เดตเต เดกเดฏเดฑเด•เตโ€ŒเดŸเดฑเดฟ OU เด…เดŸเดฟเดธเตเดฅเดพเดจเดฎเดพเด•เตเด•เดฟ เด‰เดชเดฏเต‹เด•เตเดคเดพเดตเดฟเดจเต เดเดคเต เดธเด‚เด˜เดŸเดจเดพ เดฏเต‚เดฃเดฟเดฑเตเดฑเต เด‰เดฃเตเดŸเดพเดฏเดฟเดฐเดฟเด•เตเด•เดฃเดฎเต†เดจเตเดจเต เด‡เดคเต เดคเต€เดฐเตเดฎเดพเดจเดฟเด•เตเด•เตเด•เดฏเตเด‚ เด’เดฐเต เดชเดพเดธเตโ€Œเดตเต‡เดกเตเดฎเดพเดฏเดฟ เดตเดฐเดฟเด•เดฏเตเด‚ เดšเต†เดฏเตเดฏเตเดจเตเดจเต:

do {
  $phone = Read-Host "ะขะตะปะตั„ะพะฝ ะฒ ั„ะพั€ะผะฐั‚ะต +7ั…ั…ั…ั…ั…ั…ั…ั…"
} while (-not $phone)
do {
    $moscow = Read-Host "ะ’ ะœะพัะบะพะฒัะบะธะน ะพั„ะธั? (y/n) "
} while (-not (($moscow -eq 'y') -or ($moscow -eq 'n')))
$orgunit = '/'
if ($OU -like "*OU=Delivery,OU=Users,OU=ROOT,DC=rocket,DC=local") {
    Write-host "ะ‘ัƒะดะตั‚ ัะพะทะดะฐะฝะฐ ะฒ /Team delivery"
    $orgunit = "/Team delivery"
}
$Password =  -join ( 48..57 + 65..90 + 97..122 | Get-Random -Count 12 | % {[char]$_})+"*Ba"

เดคเตเดŸเตผเดจเตเดจเต เด…เดตเตป เด…เด•เตเด•เต—เดฃเตเดŸเต เด•เตˆเด•เดพเดฐเตเดฏเด‚ เดšเต†เดฏเตเดฏเดพเตป เดคเตเดŸเด™เตเด™เตเดจเตเดจเต:

$query = @{
  email = $email
  givenName = $firstname
  familyName = $lastname
  password = $password
  phone = $phone
  orgunit = $orgunit
}
if ($GMailExist) {
  Write-Host "ะ—ะฐะฟัƒัะบะฐะตะผ ะธะทะผะตะฝะตะฝะธะต ะฐะบะบะฐัƒะฝั‚ะฐ" -f mag
  (GoogleQuery 'UpdateAccount' $query) | fl
  write-host "ะะต ะทะฐะฑัƒะดัŒ ะฟั€ะพะฒะตั€ะธั‚ัŒ ะณั€ัƒะฟะฟั‹ ัƒ ะฒะบะปัŽั‡ะตะฝะฝะพะณะพ $Username ะฒ Google."
} else {
  Write-Host "ะ—ะฐะฟัƒัะบะฐะตะผ ัะพะทะดะฐะฝะธะต ะฐะบะบะฐัƒะฝั‚ะฐ" -f mag
  (GoogleQuery 'CreateAccount' $query) | fl
}
if ($moscow -eq "y"){
  write-host "ะ”ะพะฑะฐะฒะปัะตะผ ะฒ ะณั€ัƒะฟะฟัƒ moscowoffice"
  $query = @{
    groupkey = '[email protected]'
    email = $email
  }
  (GoogleQuery 'AddMember' $query) | fl
}

เด’เดฐเต เด…เด•เตเด•เต—เดฃเตเดŸเต เด…เดชเตโ€Œเดกเต‡เดฑเตเดฑเต เดšเต†เดฏเตเดฏเตเดจเตเดจเดคเดฟเดจเตเด‚ เดธเตƒเดทเตเดŸเดฟเด•เตเด•เตเดจเตเดจเดคเดฟเดจเตเดฎเตเดณเตเดณ เดชเตเดฐเดตเตผเดคเตเดคเดจเด™เตเด™เตพเด•เตเด•เต เดธเดฎเดพเดจเดฎเดพเดฏ เดตเดพเด•เตเดฏเด˜เดŸเดจเดฏเตเดฃเตเดŸเต; เดŽเดฒเตเดฒเดพ เด…เดงเดฟเด• เดซเต€เตฝเดกเตเด•เดณเตเด‚ เด†เดตเดถเตเดฏเดฎเดฟเดฒเตเดฒ; เดซเต‹เตบ เดจเดฎเตเดชเดฑเตเด•เดณเตเดณเตเดณ เดตเดฟเดญเดพเด—เดคเตเดคเดฟเตฝ, เดจเดฎเตเดชเดฑเตเด‚ เด…เดคเดฟเดจเตเดฑเต† เดคเดฐเดตเตเด‚ เด‰เดณเตเดณ เด’เดฐเต เดฑเต†เด•เตเด•เต‹เตผเดกเต เดตเดฐเต† เด‰เตพเด•เตเด•เตŠเดณเตเดณเดพเตป เด•เดดเดฟเดฏเตเดจเตเดจ เด’เดฐเต เด…เดฑเต‡ เดจเดฟเด™เตเด™เตพ เดตเตเดฏเด•เตเดคเดฎเดพเด•เตเด•เต‡เดฃเตเดŸเดคเตเดฃเตเดŸเต.

เด’เดฐเต เด—เตเดฐเต‚เดชเตเดชเดฟเดฒเต‡เด•เตเด•เต เด’เดฐเต เด‰เดชเดฏเต‹เด•เตเดคเดพเดตเดฟเดจเต† เดšเต‡เตผเด•เตเด•เตเดฎเตเดชเต‹เตพ เด’เดฐเต เดชเดฟเดถเด•เต เดตเดฐเดพเดคเดฟเดฐเดฟเด•เตเด•เดพเตป, เด‰เดชเดฏเต‹เด•เตเดคเดพเดตเดฟเตฝ เดจเดฟเดจเตเดจเต เดคเดจเตเดจเต† เด—เตเดฐเต‚เดชเตเดชเต เด…เด‚เด—เด™เตเด™เดณเตเดŸเต† เด…เดฒเตเดฒเต†เด™เตเด•เดฟเตฝ เด•เต‹เดฎเตเดชเต‹เดธเดฟเดทเดจเตเด•เดณเตเดŸเต† เด’เดฐเต เดฒเดฟเดธเตโ€Œเดฑเตเดฑเต เดฒเดญเตเดฏเดฎเดพเด•เตเด•เดฟ, เด…เดฏเดพเตพ เด‡เดคเดฟเดจเด•เด‚ เดˆ เด—เตเดฐเต‚เดชเตเดชเดฟเตฝ เด…เด‚เด—เดฎเดพเดฃเต‹ เดŽเดจเตเดจเต เดจเดฎเตเด•เตเด•เต เด†เดฆเตเดฏเด‚ เดชเดฐเดฟเดถเต‹เดงเดฟเด•เตเด•เดพเด‚.

เด’เดฐเต เดจเดฟเตผเดฆเตเดฆเดฟเดทเตโ€ŒเดŸ เด‰เดชเดฏเต‹เด•เตเดคเดพเดตเดฟเดจเตเดฑเต† เด—เตเดฐเต‚เดชเตเดชเต เด…เด‚เด—เดคเตเดตเด‚ เด…เดจเตเดตเต‡เดทเดฟเด•เตเด•เตเดจเตเดจเดคเต เด†เดตเตผเดคเตเดคเดจเดชเดฐเดฎเดพเด•เดฟเดฒเตเดฒ เด•เต‚เดŸเดพเดคเต† เดจเต‡เดฐเดฟเดŸเตเดŸเตเดณเตเดณ เด…เด‚เด—เดคเตเดตเด‚ เดฎเดพเดคเตเดฐเดฎเต‡ เด•เดพเดฃเดฟเด•เตเด•เต‚. เด‰เดชเดฏเต‹เด•เตเดคเดพเดตเต เด…เด‚เด—เดฎเดพเดฏ เด’เดฐเต เดšเตˆเตฝเดกเต เด—เตเดฐเต‚เดชเตเดชเต เด‡เดคเดฟเดจเด•เด‚ เด‰เดณเตเดณ เด’เดฐเต เดชเดพเดฐเดจเตเดฑเต เด—เตเดฐเต‚เดชเตเดชเดฟเดฒเต† เด’เดฐเต เด‰เดชเดฏเต‹เด•เตเดคเดพเดตเดฟเดจเต† เด‰เตพเดชเตเดชเต†เดŸเตเดคเตเดคเตเดจเตเดจเดคเต เดตเดฟเดœเดฏเดฟเด•เตเด•เตเด‚.

เดคเต€เดฐเตเดฎเดพเดจเด‚

เดชเตเดคเดฟเดฏ เด…เด•เตเด•เต—เดฃเตเดŸเดฟเดจเดพเดฏเตเดณเตเดณ เดชเดพเดธเตโ€Œเดตเต‡เดกเต เด‰เดชเดฏเต‹เด•เตเดคเดพเดตเดฟเดจเต เด…เดฏเดฏเตเด•เตเด•เตเด• เดฎเดพเดคเตเดฐเดฎเดพเดฃเต เด…เดตเดถเต‡เดทเดฟเด•เตเด•เตเดจเตเดจเดคเต. เดžเด™เตเด™เตพ เด‡เดคเต SMS เดฎเตเด–เต‡เดจ เดšเต†เดฏเตเดฏเตเดจเตเดจเต, เด•เต‚เดŸเดพเดคเต† เดจเดฟเตผเดฆเตเดฆเต‡เดถเด™เตเด™เตพเด•เตเด•เตŠเดชเตเดชเด‚ เดชเตŠเดคเตเดตเดพเดฏ เดตเดฟเดตเดฐเด™เตเด™เตพ เด…เดฏเดฏเตโ€Œเด•เตเด•เตเด•เดฏเตเด‚ เด’เดฐเต เดตเตเดฏเด•เตเดคเดฟเด—เดค เด‡เดฎเต†เดฏเดฟเดฒเดฟเดฒเต‡เด•เตเด•เต เดฒเต‹เด—เดฟเตป เดšเต†เดฏเตเดฏเตเด•เดฏเตเด‚ เดšเต†เดฏเตเดฏเตเด•, เด…เดคเต เด’เดฐเต เดซเต‹เตบ เดจเดฎเตเดชเดฑเดฟเดจเตŠเดชเตเดชเด‚ เดฑเดฟเด•เตเดฐเต‚เดŸเตเดŸเตโ€Œเดฎเต†เดจเตเดฑเต เดตเด•เตเดชเตเดชเต เดจเตฝเด•เดฟเดฏเดฟเดŸเตเดŸเตเดฃเตเดŸเต. เด’เดฐเต เดฌเดฆเดฒเดพเดฏเดฟ, เดจเดฟเด™เตเด™เตพเด•เตเด•เต เดชเดฃเด‚ เดฒเดพเดญเดฟเด•เตเด•เดพเดจเตเด‚ เดจเดฟเด™เตเด™เดณเตเดŸเต† เดฐเดนเดธเตเดฏเดตเดพเด•เตเด•เต เด’เดฐเต เดฐเดนเดธเตเดฏ เดŸเต†เดฒเดฟเด—เตเดฐเดพเด‚ เดšเดพเดฑเตเดฑเดฟเดฒเต‡เด•เตเด•เต เด…เดฏเดฏเตเด•เตเด•เดพเดจเตเด‚ เด•เดดเดฟเดฏเตเด‚, เด…เดคเต เดฐเดฃเตเดŸเดพเดฎเดคเตเดคเต† เด˜เดŸเด•เดฎเดพเดฏเดฟ เด•เดฃเด•เตเด•เดพเด•เตเด•เดพเด‚ (เดฎเดพเด•เตเดฌเตเด•เตเด•เตเด•เตพ เด’เดฐเต เด…เดชเดตเดพเดฆเดฎเดพเดฏเดฟเดฐเดฟเด•เตเด•เตเด‚).

เด…เดตเดธเดพเดจเด‚ เดตเดฐเต† เดตเดพเดฏเดฟเดšเตเดšเดคเดฟเดจเต เดจเดจเตเดฆเดฟ. เดฒเต‡เด–เดจเด™เตเด™เตพ เดŽเดดเตเดคเตเดจเตเดจ เดถเตˆเดฒเดฟ เดฎเต†เดšเตเดšเดชเตเดชเต†เดŸเตเดคเตเดคเตเดจเตเดจเดคเดฟเดจเตเดณเตเดณ เดจเดฟเตผเดฆเตเดฆเต‡เดถเด™เตเด™เตพ เด•เดพเดฃเตเดจเตเดจเดคเดฟเตฝ เดŽเดจเดฟเด•เตเด•เต เดธเดจเตเดคเต‹เดทเดฎเตเดฃเตเดŸเต, เด•เต‚เดŸเดพเดคเต† เดธเตเด•เตเดฐเดฟเดชเตเดฑเตเดฑเตเด•เตพ เดŽเดดเตเดคเตเดฎเตเดชเต‹เตพ เด•เตเดฑเดšเตเดšเต เดชเดฟเดถเด•เตเด•เตพ เด•เดฃเตเดŸเต†เดคเตเดคเดพเดจเตเด‚ เดžเดพเตป เด†เด—เตเดฐเดนเดฟเด•เตเด•เตเดจเตเดจเต =)

เดตเดฟเดทเดฏเดชเดฐเดฎเดพเดฏเดฟ เด‰เดชเดฏเต‹เด—เดชเตเดฐเดฆเดฎเดพเดฏ เด…เดฒเตเดฒเต†เด™เตเด•เดฟเตฝ เดšเต‹เดฆเตเดฏเด™เตเด™เตพเด•เตเด•เต เดฒเดณเดฟเดคเดฎเดพเดฏเดฟ เด‰เดคเตเดคเดฐเด‚ เดจเตฝเด•เตเดจเตเดจ เดฒเดฟเด™เตเด•เตเด•เดณเตเดŸเต† เดฒเดฟเดธเตเดฑเตเดฑเต:

เด…เดตเดฒเด‚เดฌเด‚: www.habr.com

เด’เดฐเต เด…เดญเดฟเดชเตเดฐเดพเดฏเด‚ เดšเต‡เตผเด•เตเด•เตเด•