API рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ Google рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЛ PowerShell рд╕реЗ рдмрдирд╛рдПрдВ

рдирдорд╕реНрддреЗ!

рдпрд╣ рдЖрд▓реЗрдЦ рд╡рд░реНрдгрди рдХрд░реЗрдЧрд╛ рдХрд┐ рдкрд╛рд╡рд░ рд╕реВрдЯ Google рд╕реБрдЗрдЯ рдХреЗ рд╕рд╛рде рдЬреА рд╕реВрдЯ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЛ рд╣реЗрд░рдлреЗрд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреИрд╕реЗ рд╕рд╣рднрд╛рдЧрд┐рддрд╛ рдХрд░рддрд╛ рд╣реИред

рд╕рдВрдЧрдарди рдореЗрдВ, рд╣рдо рдХрдИ рдЖрдВрддрд░рд┐рдХ рдФрд░ рдХреНрд▓рд╛рдЙрдб рд╕реЗрд╡рд╛рдУрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВред рдЕрдзрд┐рдХрд╛рдВрд╢ рднрд╛рдЧ рдХреЗ рд▓рд┐рдП, рдЙрдирдореЗрдВ рдкреНрд░рд╛рдзрд┐рдХрд░рдг Google рдпрд╛ рд╕рдХреНрд░рд┐рдп рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдореЗрдВ рдЖрддрд╛ рд╣реИ, рдЬрд┐рд╕рдХреЗ рдмреАрдЪ рд╣рдо рдХреНрд░рдорд╢рдГ рдПрдХ рдкреНрд░рддрд┐рдХреГрддрд┐ рдирд╣реАрдВ рд░рдЦ рд╕рдХрддреЗ рд╣реИрдВ, рдЬрдм рдПрдХ рдирдпрд╛ рдХрд░реНрдордЪрд╛рд░реА рдЬрд╛рд░реА рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдЖрдкрдХреЛ рдЗрди рджреЛ рдкреНрд░рдгрд╛рд▓рд┐рдпреЛрдВ рдореЗрдВ рдПрдХ рдЦрд╛рддрд╛ рдмрдирд╛рдиреЗ / рд╕рдХреНрд╖рдо рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЛ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдордиреЗ рдПрдХ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рд▓рд┐рдЦрдиреЗ рдХрд╛ рдлреИрд╕рд▓рд╛ рдХрд┐рдпрд╛ рдЬреЛ рдЬрд╛рдирдХрд╛рд░реА рдПрдХрддреНрд░ рдХрд░рддрд╛ рд╣реИ рдФрд░ рдЗрд╕реЗ рджреЛрдиреЛрдВ рд╕реЗрд╡рд╛рдУрдВ рдореЗрдВ рднреЗрдЬрддрд╛ рд╣реИред

рдкреНрд░рд╛рдзрд┐рдХрд░рдг


рдЖрд╡рд╢реНрдпрдХрддрд╛рдУрдВ рдХреА рд░рдЪрдирд╛ рдХрд░рддреЗ рд╣реБрдП, рд╣рдордиреЗ рдкреНрд░рд╛рдзрд┐рдХрд░рдг рдХреЗ рд▓рд┐рдП рд╡рд╛рд╕реНрддрд╡рд┐рдХ рд▓реЛрдЧреЛрдВ рдХреЛ рдкреНрд░рд╢рд╛рд╕рдХ рдХреЗ рд░реВрдк рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХрд╛ рдирд┐рд░реНрдгрдп рд▓рд┐рдпрд╛, рдпрд╣ рдЖрдХрд╕реНрдорд┐рдХ рдпрд╛ рдЬрд╛рдирдмреВрдЭрдХрд░ рдмрдбрд╝реЗ рдмрджрд▓рд╛рд╡ рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ рдХрд╛рд░реНрд░рд╡рд╛рдИ рдХреЗ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХреЛ рд╕рд░рд▓ рдХрд░рддрд╛ рд╣реИред

Google API рдкреНрд░рдорд╛рдгреАрдХрд░рдг рдФрд░ рдкреНрд░рд╛рдзрд┐рдХрд░рдг рдХреЗ рд▓рд┐рдП OAuth 2.0 рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВред рдорд╛рдорд▓реЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ рдФрд░ рдЕрдзрд┐рдХ рд╡рд┐рд╕реНрддреГрдд рд╡рд┐рд╡рд░рдг рдпрд╣рд╛рдВ рдкрд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ: Google API рддрдХ рдкрд╣реБрдВрдЪрдиреЗ рдХреЗ рд▓рд┐рдП OAuth 2.0 рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ ред

рдореИрдВрдиреЗ рд╡рд╣ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдЪреБрдиреА рдЬреЛ рдбреЗрд╕реНрдХрдЯреЙрдк рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдореЗрдВ рдкреНрд░рд╛рдзрд┐рдХрд░рдг рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХреА рдЬрд╛рддреА рд╣реИред рдПрдХ рд╕реЗрд╡рд╛ рдЦрд╛рддреЗ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХрд╛ рд╡рд┐рдХрд▓реНрдк рднреА рд╣реИ рдЬрд┐рд╕рдореЗрдВ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рд╕реЗ рдЕрдирд╛рд╡рд╢реНрдпрдХ рдЖрдВрджреЛрд▓рдиреЛрдВ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реЛрддреА рд╣реИред

рдиреАрдЪреЗ рджреА рдЧрдИ рдЫрд╡рд┐ Google рдкреГрд╖реНрда рд╕реЗ рдЪрдпрдирд┐рдд рдкрд░рд┐рджреГрд╢реНрдп рдХрд╛ рдПрдХ рдпреЛрдЬрдирд╛рдмрджреНрдз рд╡рд┐рд╡рд░рдг рд╣реИред



  1. рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рд╣рдо рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЛ Google рдЦрд╛рддреЗ рдореЗрдВ рдкреНрд░рдорд╛рдгреАрдХрд░рдг рдкреГрд╖реНрда рдкрд░ рднреЗрдЬрддреЗ рд╣реИрдВ, рдЬреЛ GET рдорд╛рдкрджрдВрдбреЛрдВ рдХреЛ рджрд░реНрд╢рд╛рддрд╛ рд╣реИ:
    • рдЖрд╡реЗрджрди рдЖрдИрдбреА
    • рдЙрди рдХреНрд╖реЗрддреНрд░реЛрдВ рдореЗрдВ рдЬрд╣рд╛рдВ рдЖрд╡реЗрджрди рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ
    • рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдкреВрд░реА рд╣реЛрдиреЗ рдХреЗ рдмрд╛рдж рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЛ рдкрддрд╛ рджрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛
    • рдЬрд┐рд╕ рддрд░рд╣ рд╕реЗ рд╣рдо рдЯреЛрдХрди рдХреЛ рдЕрдкрдбреЗрдЯ рдХрд░реЗрдВрдЧреЗ
    • рд╕рддреНрдпрд╛рдкрди рдХреЛрдб
    • рд╕рддреНрдпрд╛рдкрди рдХреЛрдб рд╕рдВрдЪрд░рдг рдкреНрд░рд╛рд░реВрдк

  2. рдкреНрд░рд╛рдзрд┐рдХрд░рдг рдкреВрд░рд╛ рд╣реЛрдиреЗ рдХреЗ рдмрд╛рдж, рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЛ рдкрд╣рд▓реЗ рдЕрдиреБрд░реЛрдз рдореЗрдВ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдкреГрд╖реНрда рдкрд░ рдкреБрдирдГ рдирд┐рд░реНрджреЗрд╢рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛, рдЬрд┐рд╕рдореЗрдВ рдЬреАрдИрдЯреА рдорд╛рдкрджрдВрдбреЛрдВ рдХреЗ рд▓рд┐рдП рддреНрд░реБрдЯрд┐ рдпрд╛ рдкреНрд░рд╛рдзрд┐рдХрд░рдг рдХреЛрдб рдкреНрд░реЗрд╖рд┐рдд рд╣реЛрдЧрд╛ред
  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 рд╣реИрд╢ рдмрдирд╛рдХрд░ BASEUUrl рдореЗрдВ рдЗрдирдХреЛрдб рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП (рддрд╛рд▓рд┐рдХрд╛ рдХреЗ рджреЛ рд╡рд░реНрдгреЛрдВ рдореЗрдВ Base64 рд╕реЗ рднрд┐рдиреНрди) рдФрд░ рдЪрд░рд┐рддреНрд░ рдХреЛ рд╣рдЯрд╛ рджреЗрдВред рдкрдВрдХреНрддрд┐ рдХрд╛ рдЕрдВрдд: =ред

рдЕрдЧрд▓рд╛, рд╣рдореЗрдВ рдкреНрд░рд╛рдзрд┐рдХрд░рдг рдХреЗ рдмрд╛рдж рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕реНрдерд╛рдиреАрдп рдорд╢реАрди рдкрд░ http рд╕реБрдирдирд╛ рд╢реБрд░реВ рдХрд░рдирд╛ рд╣реЛрдЧрд╛, рдЬреЛ рдПрдХ рдЕрдиреБрдкреНрд░реЗрд╖рд┐рдд рдХреЗ рд░реВрдк рдореЗрдВ рд╡рд╛рдкрд╕ рдЖ рдЬрд╛рдПрдЧрд╛ред

рдкреНрд░рд╢рд╛рд╕рдирд┐рдХ рдХрд╛рд░реНрдп рдПрдХ рд╡рд┐рд╢реЗрд╖ рд╕рд░реНрд╡рд░ рдкрд░ рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВ, рд╣рдо рдЗрд╕ рд╕рдВрднрд╛рд╡рдирд╛ рдХреЛ рдмрд╛рд╣рд░ рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдХрдИ рдкреНрд░рд╢рд╛рд╕рдХ рдПрдХ рд╣реА рд╕рдордп рдореЗрдВ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдЪрд▓рд╛рдПрдВрдЧреЗ, рдЗрд╕рд▓рд┐рдП рд╡рд╣ рдмреЗрддрд░рддреАрдм рдврдВрдЧ рд╕реЗ рд╡рд░реНрддрдорд╛рди рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЗ рд▓рд┐рдП рдПрдХ рдкреЛрд░реНрдЯ рдХрд╛ рдЪрдпрди рдХрд░реЗрдЧрд╛, рд▓реЗрдХрд┐рди рдореИрдВрдиреЗ рдкреВрд░реНрд╡рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдмрдВрджрд░рдЧрд╛рд╣реЛрдВ рдХреЛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд┐рдпрд╛, рдХреНрдпреЛрдВрдХрд┐ рдЙрдиреНрд╣реЗрдВ рдПрдкреАрдЖрдИ рдХрдВрд╕реЛрд▓ рдореЗрдВ рднрд░реЛрд╕реЗрдордВрдж рд░реВрдк рд╕реЗ рдЬреЛрдбрд╝рд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред

access_type = рдСрдлрд╝рд▓рд╛рдЗрди рдХрд╛ рдЕрд░реНрде рд╣реИ рдХрд┐ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдХреЗ рд╕рд╛рде рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреА рдмрд╛рддрдЪреАрдд рдХреЗ рдмрд┐рдирд╛ рд╕реНрд╡рддрдВрддреНрд░ рд░реВрдк рд╕реЗ рд╕рдорд╛рдкреНрдд рдЯреЛрдХрди рдХреЛ рдЕрдкрдбреЗрдЯ рдХрд░ рд╕рдХрддрд╛ рд╣реИ,
response_type = рдХреЛрдб рдЗрд╕ рдмрд╛рдд рдХреЗ рд▓рд┐рдП рдкреНрд░рд╛рд░реВрдк рд╕реЗрдЯ рдХрд░рддрд╛ рд╣реИ рдХрд┐ рдХреЛрдб рдХреИрд╕реЗ рд╡рд╛рдкрд╕ рдЖрдПрдЧрд╛ (рдкреБрд░рд╛рдиреЗ рдкреНрд░рд╛рдзрд┐рдХрд░рдг рдкрджреНрдзрддрд┐ рдХрд╛ рд╕рдВрджрд░реНрдн рджреЗрддреЗ рд╣реБрдП рдЬрдм рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдиреЗ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рд╕реЗ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдкрд░ рдХреЛрдб рдХреЙрдкреА рдХрд┐рдпрд╛),
рдЧреБрдВрдЬрд╛рдЗрд╢ рдЧреБрдВрдЬрд╛рдЗрд╢ рдФрд░ рдкрд╣реБрдБрдЪ рдХреЗ рдкреНрд░рдХрд╛рд░ рдХреЛ рдЗрдВрдЧрд┐рдд рдХрд░рддрд╛ рд╣реИред рдЙрдиреНрд╣реЗрдВ рд░рд┐рдХреНрдд рд╕реНрдерд╛рди рдпрд╛% 20 (URL рдПрдиреНрдХреЛрдбрд┐рдВрдЧ рдХреЗ рдЕрдиреБрд╕рд╛рд░) рджреНрд╡рд╛рд░рд╛ рдЕрд▓рдЧ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред рдкреНрд░рдХрд╛рд░реЛрдВ рдХреЗ рд╕рд╛рде рдкрд╣реБрдВрдЪ рдХреНрд╖реЗрддреНрд░реЛрдВ рдХреА рдПрдХ рд╕реВрдЪреА рдпрд╣рд╛рдВ рджреЗрдЦреА рдЬрд╛ рд╕рдХрддреА рд╣реИ: Google рдПрдкреАрдЖрдИ рдХреЗ рд▓рд┐рдП OAuth 2.0 рд╕реНрдХреЛрдк ред

рдкреНрд░рд╛рдзрд┐рдХрд░рдг рдХреЛрдб рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдХреЛ рдПрдХ рд╕рдорд╛рдкрди рд╕рдВрджреЗрд╢ рд▓реМрдЯрд╛рдПрдЧрд╛, рдкреЛрд░реНрдЯ рдХреЛ рд╕реБрдирдирд╛ рдмрдВрдж рдХрд░ рджреЗрдЧрд╛ рдФрд░ рдЯреЛрдХрди рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП POST рдЕрдиреБрд░реЛрдз рднреЗрдЬреЗрдЧрд╛ред рд╣рдо рдЗрд╕реЗ рд╕рд╛рдВрдХреЗрддрд┐рдХ рдПрдкреАрдЖрдИ рд╕реЗ рдкрд╣рд▓реЗ рд╕реЗ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдЖрдИрдбреА рдФрд░ рд░рд╣рд╕реНрдп рдХреЛ рдЗрдВрдЧрд┐рдд рдХрд░рддреЗ рд╣реИрдВ, рдЬрд┐рд╕ рдкрддреЗ рдкрд░ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЛ рд░реАрдбрд╛рдпрд░реЗрдХреНрдЯ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛, рдФрд░ рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рд╡рд┐рдирд┐рд░реНрджреЗрд╢ рдХреЗ рдЕрдиреБрд╕рд╛рд░ allow_typeред

рдЬрд╡рд╛рдм рдореЗрдВ, рд╣рдореЗрдВ рдПрдХ рдПрдХреНрд╕реЗрд╕ рдЯреЛрдХрди рдорд┐рд▓реЗрдЧрд╛, рд╕реЗрдХрдВрдб рдореЗрдВ рдЗрд╕рдХреА рдЕрд╡рдзрд┐ рдФрд░ рдПрдХ рддрд╛рдЬрд╝рд╛ рдЯреЛрдХрди, рдЬрд┐рд╕рдХреЗ рд╕рд╛рде рд╣рдо рдПрдХреНрд╕реЗрд╕ рдЯреЛрдХрди рдХреЛ рдЕрдкрдбреЗрдЯ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛ рдПрдХ рд▓рдВрдмреА рд╢реЗрд▓реНрдл рд▓рд╛рдЗрдл рдХреЗ рд╕рд╛рде рдПрдХ рд╕реБрд░рдХреНрд╖рд┐рдд рд╕реНрдерд╛рди рдкрд░ рдЯреЛрдХрди рд╕реНрдЯреЛрд░ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП, рдЗрд╕рд▓рд┐рдП рдЬрдм рддрдХ рд╣рдо рдкреНрд░рд╛рдкреНрдд рдкрд╣реБрдВрдЪ рдХреЛ рд░рджреНрдж рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВ, рддрдм рддрдХ рддрд╛рдЬрд╝рд╛ рдЯреЛрдХрди рдЖрд╡реЗрджрди рдкрд░ рд╡рд╛рдкрд╕ рдирд╣реАрдВ рдЖрдПрдЧрд╛ред рдЕрдВрдд рдореЗрдВ, рдореИрдВрдиреЗ рдЯреЛрдХрди рдХреЛ рд░рджреНрдж рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдЕрдиреБрд░реЛрдз рдЬреЛрдбрд╝рд╛, рдЕрдЧрд░ рдЖрд╡реЗрджрди рд╕рдлрд▓рддрд╛рдкреВрд░реНрд╡рдХ рдкреВрд░рд╛ рдирд╣реАрдВ рд╣реБрдЖ рдФрд░ рддрд╛рдЬрд╝рд╛ рдЯреЛрдХрди рд╡рд╛рдкрд╕ рдирд╣реАрдВ рдЖрдпрд╛, рддреЛ рд╡рд╣ рдлрд┐рд░ рд╕реЗ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рд╢реБрд░реВ рдХрд░ рджреЗрдЧрд╛ (рд╣рдордиреЗ рдЯрд░реНрдорд┐рдирд▓ рдкрд░ рд╕реНрдерд╛рдиреАрдп рд░реВрдк рд╕реЗ рдЯреЛрдХрди рд╕реНрдЯреЛрд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрд╕реБрд░рдХреНрд╖рд┐рдд рдорд╛рдирд╛, рд▓реЗрдХрд┐рди рд╣рдо рдЗрд╕реЗ рдХреНрд░рд┐рдкреНрдЯреЛрдЧреНрд░рд╛рдлреА рдХреЛ рдЬрдЯрд┐рд▓ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ рдпрд╛ рдЕрдХреНрд╕рд░ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдЦреЛрд▓рдирд╛ рдирд╣реАрдВ рдЪрд╛рд╣рддреЗ рд╣реИрдВ)ред

 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 рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдЗрдирд╡реЛрдХ-рд░реЗрд╕реНрдЯрдореЗрдереЛрдб рдХреЗ рд╡рд┐рдкрд░реАрдд, рдпрд╣ рдкреНрд░рд╛рдкреНрдд рдбреЗрдЯрд╛ рдХреЛ рдЙрдкрдпреЛрдЧ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рдкреНрд░рд╛рд░реВрдк рдореЗрдВ рд╡рд╛рдкрд╕ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ рдФрд░ рдЕрдиреБрд░реЛрдз рдХреА рд╕реНрдерд┐рддрд┐ рджрд┐рдЦрд╛рддрд╛ рд╣реИред

рдЗрд╕рдХреЗ рдмрд╛рдж, рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдЖрдкрдХреЛ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдирд╛рдо рдФрд░ рдИрдореЗрд▓ рдХреЗ рдкрд╣рд▓реЗ рдФрд░ рдЕрдВрддрд┐рдо рдирд╛рдо рдХреЛ рджрд░реНрдЬ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд╣реЗрдЧреА, рдЬрд┐рд╕рд╕реЗ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдирд╛рдо + рдИрдореЗрд▓ рдмрди рдЬрд╛рдПрдЧрд╛ред

рдЕрдиреБрд░реЛрдз


рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдЕрдиреБрд░реЛрдз рд╣реЛрдВрдЧреЗ - рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рдЖрдкрдХреЛ рдпрд╣ рдЬрд╛рдВрдЪрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдХрд┐ рдХреНрдпрд╛ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдЗрд╕ рддрд░рд╣ рдХреЗ рд▓реЙрдЧрд┐рди рдХреЗ рд╕рд╛рде рдореМрдЬреВрдж рд╣реИ рддрд╛рдХрд┐ рдПрдХ рдирдпрд╛ рдмрдирд╛рдиреЗ рдпрд╛ рд╡рд░реНрддрдорд╛рди рдХреЛ рдЪрд╛рд▓реВ рдХрд░рдиреЗ рдкрд░ рдирд┐рд░реНрдгрдп рд▓рд┐рдпрд╛ рдЬрд╛ рд╕рдХреЗред

рдореИрдВрдиреЗ рд╕реНрд╡рд┐рдЪ рдХреЗ рдЙрдкрдпреЛрдЧ рд╕реЗ рдЪрдпрди рдХреЗ рд╕рд╛рде рдПрдХрд▓ рдлрд╝рдВрдХреНрд╢рди рдХреЗ рдкреНрд░рд╛рд░реВрдк рдореЗрдВ рд╕рднреА рдЕрдиреБрд░реЛрдзреЛрдВ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХрд╛ рдирд┐рд░реНрдгрдп рд▓рд┐рдпрд╛:

 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 } 

рдИрдореЗрд▓ рдЕрдиреБрд░реЛрдз: $ рдХреНрд╡реЗрд░реА рдПрдкреАрдЖрдИ рдХреЛ рдЙрд╕ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЗ рд▓рд┐рдП рдЦреЛрдЬ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд╣реЗрдЧреА, рдЬрд┐рд╕рдореЗрдВ рдИрдореЗрд▓ рд╕рд╣рд┐рдд рдЙрдкрдирд╛рдо рдкрд╛рдП рдЬрд╛рдПрдВрдЧреЗред рдЖрдк рд╡рд╛рдЗрд▓реНрдбрдХрд╛рд░реНрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рднреА рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ: =,:,: {PREFIX} * ред

рдбреЗрдЯрд╛ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, GET рдЕрдиреБрд░реЛрдз рд╡рд┐рдзрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдбреЗрдЯрд╛ рдбрд╛рд▓рдиреЗ рдХреЗ рд▓рд┐рдП (рдПрдХ рдЦрд╛рддрд╛ рдмрдирд╛рдПрдВ рдпрд╛ рдХрд┐рд╕реА рд╕рдореВрд╣ рдореЗрдВ рдПрдХ рд╕рджрд╕реНрдп рдЬреЛрдбрд╝реЗрдВ) - POST, рдореМрдЬреВрджрд╛ рдбреЗрдЯрд╛ рдХреЛ рдЕрдкрдбреЗрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП - PUT, рдПрдХ рдкреНрд░рд╡рд┐рд╖реНрдЯрд┐ рдХреЛ рд╣рдЯрд╛рдиреЗ рдХреЗ рд▓рд┐рдП (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдПрдХ рд╕рдореВрд╣ рд╕реЗ рдПрдХ рдкреНрд░рддрд┐рднрд╛рдЧреА) - DELEEред

рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдПрдХ рдлреЛрди рдирдВрдмрд░ (рдПрдХ рдЕрдорд╛рдиреНрдп рд╕реНрдЯреНрд░рд┐рдВрдЧ) рдФрд░ рдПрдХ рдХреНрд╖реЗрддреНрд░реАрдп рд╡рд┐рддрд░рдг рд╕рдореВрд╣ рдореЗрдВ рд╢рд╛рдорд┐рд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рднреА рдХрд╣реЗрдЧреАред рдпрд╣ рддрдп рдХрд░рддрд╛ рд╣реИ рдХрд┐ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЛ рдХрд┐рд╕ рд╕рдВрдЧрдарди рдХреА рдЗрдХрд╛рдИ рдХреЛ рдЪрдпрдирд┐рдд рд╕рдХреНрд░рд┐рдп рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ 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 = 'moscowoffice@rocketguys.com' email = $email } (GoogleQuery 'AddMember' $query) | fl } 

рдХрд┐рд╕реА рдЦрд╛рддреЗ рдХреЛ рдЕрдкрдбреЗрдЯ рдХрд░рдиреЗ рдФрд░ рдмрдирд╛рдиреЗ рдХрд╛ рдХрд╛рд░реНрдп рдПрдХ рд╣реА рд╡рд╛рдХреНрдпрд╡рд┐рдиреНрдпрд╛рд╕ рд╣реИ, рд╕рднреА рдЕрддрд┐рд░рд┐рдХреНрдд рдХреНрд╖реЗрддреНрд░реЛрдВ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ, рдлреЛрди рдирдВрдмрд░ рд╡рд╛рд▓реЗ рдЕрдиреБрднрд╛рдЧ рдореЗрдВ рдЖрдкрдХреЛ рдПрдХ рд╕рд░рдгреА рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ рдЬрд┐рд╕рдореЗрдВ рдПрдХ рд╕рдВрдЦреНрдпрд╛ рдФрд░ рдЙрд╕рдХреЗ рдкреНрд░рдХрд╛рд░ рдХреЗ рд╕рд╛рде рдПрдХ рд░рд┐рдХреЙрд░реНрдб рд╣реЛ рд╕рдХрддрд╛ рд╣реИред

рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЛ рд╕рдореВрд╣ рдореЗрдВ рдЬреЛрдбрд╝рддреЗ рд╕рдордп рддреНрд░реБрдЯрд┐ рдкреНрд░рд╛рдкреНрдд рди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдо рдкрд╣рд▓реЗ рдпрд╣ рдЬрд╛рдБрдЪ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдХреНрдпрд╛ рд╡рд╣ рдЗрд╕ рд╕рдореВрд╣ рдореЗрдВ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рд╕реЗ рд╕рдореВрд╣ рдХреЗ рд╕рджрд╕реНрдпреЛрдВ рдпрд╛ рд░рдЪрдирд╛ рдХреА рд╕реВрдЪреА рдкреНрд░рд╛рдкреНрдд рдХрд░ рд░рд╣рд╛ рд╣реИ рдпрд╛ рдирд╣реАрдВред

рдПрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЗ рд╕рдореВрд╣реЛрдВ рдХреА рд░рдЪрдирд╛ рдХреЗ рд▓рд┐рдП рдПрдХ рдЕрдиреБрд░реЛрдз рдкреБрдирд░рд╛рд╡рд░реНрддреА рдирд╣реАрдВ рд╣реЛрдЧрд╛ рдФрд░ рдХреЗрд╡рд▓ рдкреНрд░рддреНрдпрдХреНрд╖ рд╕рджрд╕реНрдпрддрд╛ рджрд┐рдЦрд╛рдПрдЧрд╛ред рдореВрд▓ рд╕рдореВрд╣ рдореЗрдВ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХрд╛ рд╕рдорд╛рд╡реЗрд╢, рдЬрд┐рд╕рдореЗрдВ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдЬрд┐рд╕ рд╕рд╣рд╛рдпрдХ рд╕рдореВрд╣ рдХрд╛ рд╕рджрд╕реНрдп рд╣реИ, рд╡рд╣ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рд╕рдлрд▓ рд╣реИред

рдирд┐рд╖реНрдХрд░реНрд╖


рдпрд╣ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЛ рдирдП рдЦрд╛рддреЗ рдХреЗ рд▓рд┐рдП рдкрд╛рд╕рд╡рд░реНрдб рднреЗрдЬрдиреЗ рдХреЗ рд▓рд┐рдП рдмрдирд╛ рд╣реБрдЖ рд╣реИред рд╣рдо рдПрд╕рдПрдордПрд╕ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдРрд╕рд╛ рдХрд░рддреЗ рд╣реИрдВ, рдФрд░ рдирд┐рд░реНрджреЗрд╢реЛрдВ рдХреЗ рд╕рд╛рде рд╕рд╛рдорд╛рдиреНрдп рдЬрд╛рдирдХрд╛рд░реА рднреЗрдЬрддреЗ рд╣реИрдВ рдФрд░ рд╡реНрдпрдХреНрддрд┐рдЧрдд рдореЗрд▓ рдкрд░ рд▓реЙрдЧрд┐рди рдХрд░рддреЗ рд╣реИрдВ, рдЬреЛ рдлреЛрди рдирдВрдмрд░ рдХреЗ рд╕рд╛рде, рдХрд░реНрдорд┐рдпреЛрдВ рдХреЗ рдЪрдпрди рд╡рд┐рднрд╛рдЧ рджреНрд╡рд╛рд░рд╛ рдкреНрд░рджрд╛рди рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред рдПрдХ рд╡рд┐рдХрд▓реНрдк рдХреЗ рд░реВрдк рдореЗрдВ, рдЖрдк рдкреИрд╕реЗ рдмрдЪрд╛ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдПрдХ рдЧреБрдкреНрдд рдЯреЗрд▓реАрдЧреНрд░рд╛рдо рдЪреИрдЯ рдкрд░ рдкрд╛рд╕рд╡рд░реНрдб рднреЗрдЬ рд╕рдХрддреЗ рд╣реИрдВ, рдЬрд┐рд╕реЗ рджреВрд╕рд░рд╛ рдХрд╛рд░рдХ рднреА рдорд╛рдирд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ (рдореИрдХрдмреБрдХ рдПрдХ рдЕрдкрд╡рд╛рдж рд╣реЛрдЧрд╛)ред

рдЕрдВрдд рддрдХ рдкрдврд╝рдиреЗ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рджред рд▓реЗрдЦреЛрдВ рдХреА рд▓реЗрдЦрди рд╢реИрд▓реА рдореЗрдВ рд╕реБрдзрд╛рд░ рдХреЗ рд▓рд┐рдП рд╕реБрдЭрд╛рд╡ рджреЗрдЦрдХрд░ рдореБрдЭреЗ рдЦреБрд╢реА рд╣реЛрдЧреА рдФрд░ рдореИрдВ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ рдХрд┐ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рд▓рд┐рдЦрддреЗ рд╕рдордп рдЖрдк рдХрдо рдЧрд▓рддрд┐рдпрд╛рдБ рдкрдХрдбрд╝реЗрдВред)

рдЙрди рд▓рд┐рдВрдХреНрд╕ рдХреА рд╕реВрдЪреА рдЬреЛ рдЖрдкрдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧреА рд╣реЛ рд╕рдХрддреА рд╣реИрдВ рдпрд╛ рдЖрдкрдХреЗ рдкреНрд░рд╢реНрдиреЛрдВ рдХрд╛ рдЙрддреНрддрд░ рджреЗ рд╕рдХрддреА рд╣реИрдВ:

Source: https://habr.com/ru/post/hi468969/


All Articles