āĻā§āĻ°āĻŋāĻāĻŋāĻāĻ¸!
āĻāĻ āĻ¨āĻŋāĻŦāĻ¨ā§āĻ§āĻāĻŋ G Suite āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ°āĻāĻžāĻ°ā§āĻĻā§āĻ° āĻŽā§āĻ¯āĻžāĻ¨āĻŋāĻĒā§āĻ˛ā§āĻ āĻāĻ°āĻžāĻ° āĻāĻ¨ā§āĻ¯ Google API-āĻāĻ° āĻ¸āĻžāĻĨā§ PowerShell āĻāĻ¨ā§āĻāĻžāĻ°āĻ ā§āĻ¯āĻžāĻāĻļāĻ¨ā§āĻ° āĻŦāĻžāĻ¸ā§āĻ¤āĻŦāĻžāĻ¯āĻŧāĻ¨ āĻŦāĻ°ā§āĻŖāĻ¨āĻž āĻāĻ°āĻŦā§āĨ¤
āĻāĻŽāĻ°āĻž āĻĒā§āĻ°āĻ¤āĻŋāĻˇā§āĻ āĻžāĻ¨ āĻā§āĻĄāĻŧā§ āĻŦā§āĻļ āĻāĻŋāĻā§ āĻ
āĻā§āĻ¯āĻ¨ā§āĻ¤āĻ°ā§āĻŖ āĻāĻŦāĻ āĻā§āĻ˛āĻžāĻāĻĄ āĻĒāĻ°āĻŋāĻˇā§āĻŦāĻž āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻāĻ°āĻŋāĨ¤ āĻŦā§āĻļāĻŋāĻ°āĻāĻžāĻ āĻā§āĻˇā§āĻ¤ā§āĻ°ā§, āĻ¤āĻžāĻĻā§āĻ° āĻŽāĻ§ā§āĻ¯ā§ āĻ
āĻ¨ā§āĻŽā§āĻĻāĻ¨ Google āĻŦāĻž āĻ
ā§āĻ¯āĻžāĻā§āĻāĻŋāĻ āĻĄāĻŋāĻ°ā§āĻā§āĻāĻ°āĻŋāĻ¤ā§ āĻ¨ā§āĻŽā§ āĻāĻ¸ā§, āĻ¯āĻžāĻ° āĻŽāĻ§ā§āĻ¯ā§ āĻāĻŽāĻ°āĻž āĻāĻāĻāĻŋ āĻĒā§āĻ°āĻ¤āĻŋāĻ°ā§āĻĒ āĻŦāĻāĻžāĻ¯āĻŧ āĻ°āĻžāĻāĻ¤ā§ āĻĒāĻžāĻ°āĻŋ āĻ¨āĻž; āĻ¸ā§āĻ āĻ
āĻ¨ā§āĻ¯āĻžāĻ¯āĻŧā§, āĻ¯āĻāĻ¨ āĻāĻāĻāĻ¨ āĻ¨āĻ¤ā§āĻ¨ āĻāĻ°ā§āĻŽāĻāĻžāĻ°ā§ āĻāĻ˛ā§ āĻ¯āĻžāĻ¨, āĻāĻĒāĻ¨āĻžāĻā§ āĻāĻ āĻĻā§āĻāĻŋ āĻ¸āĻŋāĻ¸ā§āĻā§āĻŽā§ āĻāĻāĻāĻŋ āĻ
ā§āĻ¯āĻžāĻāĻžāĻāĻ¨ā§āĻ āĻ¤ā§āĻ°āĻŋ/āĻ¸āĻā§āĻ°āĻŋāĻ¯āĻŧ āĻāĻ°āĻ¤ā§ āĻšāĻŦā§āĨ¤ āĻĒā§āĻ°āĻā§āĻ°āĻŋāĻ¯āĻŧāĻžāĻāĻŋ āĻ¸ā§āĻŦāĻ¯āĻŧāĻāĻā§āĻ°āĻŋāĻ¯āĻŧ āĻāĻ°āĻ¤ā§, āĻāĻŽāĻ°āĻž āĻāĻāĻāĻŋ āĻ¸ā§āĻā§āĻ°āĻŋāĻĒā§āĻ āĻ˛ā§āĻāĻžāĻ° āĻ¸āĻŋāĻĻā§āĻ§āĻžāĻ¨ā§āĻ¤ āĻ¨āĻŋāĻ¯āĻŧā§āĻāĻŋ āĻ¯āĻž āĻ¤āĻĨā§āĻ¯ āĻ¸āĻāĻā§āĻ°āĻš āĻāĻ°ā§ āĻāĻŦāĻ āĻāĻāĻ¯āĻŧ āĻĒāĻ°āĻŋāĻˇā§āĻŦāĻžāĻ¤ā§ āĻĒāĻžāĻ āĻžāĻ¯āĻŧāĨ¤
āĻ āĻ¨ā§āĻŽā§āĻĻāĻ¨
āĻĒā§āĻ°āĻ¯āĻŧā§āĻāĻ¨ā§āĻ¯āĻŧāĻ¤āĻžāĻā§āĻ˛āĻŋ āĻāĻāĻāĻžāĻ° āĻ¸āĻŽāĻ¯āĻŧ, āĻāĻŽāĻ°āĻž āĻ āĻ¨ā§āĻŽā§āĻĻāĻ¨ā§āĻ° āĻāĻ¨ā§āĻ¯ āĻĒā§āĻ°āĻā§āĻ¤ āĻŽāĻžāĻ¨āĻŦ āĻĒā§āĻ°āĻļāĻžāĻ¸āĻāĻĻā§āĻ° āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻāĻ°āĻžāĻ° āĻ¸āĻŋāĻĻā§āĻ§āĻžāĻ¨ā§āĻ¤ āĻ¨āĻŋāĻ¯āĻŧā§āĻāĻŋ; āĻāĻāĻŋ āĻĻā§āĻ°ā§āĻāĻāĻ¨āĻžāĻāĻ¨āĻŋāĻ¤ āĻŦāĻž āĻāĻā§āĻāĻžāĻā§āĻ¤āĻāĻžāĻŦā§ āĻŦā§āĻ¯āĻžāĻĒāĻ āĻĒāĻ°āĻŋāĻŦāĻ°ā§āĻ¤āĻ¨ā§āĻ° āĻā§āĻˇā§āĻ¤ā§āĻ°ā§ āĻā§āĻ°āĻŋāĻ¯āĻŧāĻžāĻā§āĻ˛āĻŋāĻ° āĻŦāĻŋāĻļā§āĻ˛ā§āĻˇāĻŖāĻā§ āĻ¸āĻšāĻ āĻāĻ°ā§ āĻ¤ā§āĻ˛ā§āĨ¤
Google APIāĻā§āĻ˛āĻŋ āĻĒā§āĻ°āĻŽāĻžāĻŖā§āĻāĻ°āĻŖ āĻāĻŦāĻ āĻ
āĻ¨ā§āĻŽā§āĻĻāĻ¨ā§āĻ° āĻāĻ¨ā§āĻ¯ OAuth 2.0 āĻĒā§āĻ°ā§āĻā§āĻāĻ˛ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻāĻ°ā§ā§ˇ āĻā§āĻ¸ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻāĻ°ā§āĻ¨ āĻāĻŦāĻ āĻāĻ°ā§ āĻŦāĻŋāĻ¸ā§āĻ¤āĻžāĻ°āĻŋāĻ¤ āĻŦāĻŋāĻŦāĻ°āĻŖ āĻāĻāĻžāĻ¨ā§ āĻĒāĻžāĻāĻ¯āĻŧāĻž āĻ¯āĻžāĻŦā§:
āĻāĻŽāĻŋ āĻ¸ā§āĻā§āĻ°āĻŋāĻĒā§āĻāĻāĻŋ āĻŦā§āĻā§ āĻ¨āĻŋāĻ¯āĻŧā§āĻāĻŋ āĻ¯āĻž āĻĄā§āĻ¸ā§āĻāĻāĻĒ āĻ ā§āĻ¯āĻžāĻĒā§āĻ˛āĻŋāĻā§āĻļāĻ¨āĻā§āĻ˛āĻŋāĻ¤ā§ āĻ āĻ¨ā§āĻŽā§āĻĻāĻ¨ā§āĻ° āĻāĻ¨ā§āĻ¯ āĻŦā§āĻ¯āĻŦāĻšā§āĻ¤ āĻšāĻ¯āĻŧāĨ¤ āĻāĻāĻāĻŋ āĻĒāĻ°āĻŋāĻˇā§āĻŦāĻž āĻ ā§āĻ¯āĻžāĻāĻžāĻāĻ¨ā§āĻ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻāĻ°āĻžāĻ° āĻŦāĻŋāĻāĻ˛ā§āĻĒāĻ āĻ°āĻ¯āĻŧā§āĻā§, āĻ¯āĻžāĻ° āĻāĻ¨ā§āĻ¯ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ°āĻāĻžāĻ°ā§āĻ° āĻāĻžāĻ āĻĨā§āĻā§ āĻ āĻĒā§āĻ°āĻ¯āĻŧā§āĻāĻ¨ā§āĻ¯āĻŧ āĻāĻ¨ā§āĻĻā§āĻ˛āĻ¨ā§āĻ° āĻĒā§āĻ°āĻ¯āĻŧā§āĻāĻ¨ āĻšāĻ¯āĻŧ āĻ¨āĻžāĨ¤
āĻ¨ā§āĻā§āĻ° āĻāĻŦāĻŋāĻāĻŋ Google āĻĒā§āĻˇā§āĻ āĻž āĻĨā§āĻā§ āĻ¨āĻŋāĻ°ā§āĻŦāĻžāĻāĻŋāĻ¤ āĻĻā§āĻļā§āĻ¯ā§āĻ° āĻāĻāĻāĻŋ āĻĒāĻ°āĻŋāĻāĻ˛ā§āĻĒāĻŋāĻ¤ āĻŦāĻŋāĻŦāĻ°āĻŖāĨ¤
- āĻĒā§āĻ°āĻĨāĻŽā§, āĻāĻŽāĻ°āĻž āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ°āĻāĻžāĻ°ā§āĻā§ Google āĻ
ā§āĻ¯āĻžāĻāĻžāĻāĻ¨ā§āĻ āĻĒā§āĻ°āĻŽāĻžāĻŖā§āĻāĻ°āĻŖ āĻĒā§āĻˇā§āĻ āĻžāĻ¯āĻŧ āĻĒāĻžāĻ āĻžāĻ, GET āĻĒā§āĻ¯āĻžāĻ°āĻžāĻŽāĻŋāĻāĻžāĻ°āĻā§āĻ˛āĻŋ āĻ¨āĻŋāĻ°ā§āĻĻāĻŋāĻˇā§āĻ āĻāĻ°ā§:
- āĻāĻŦā§āĻĻāĻ¨ āĻāĻāĻĄāĻŋ
- āĻ¯ā§ āĻāĻ˛āĻžāĻāĻžāĻ¯āĻŧ āĻ ā§āĻ¯āĻžāĻĒā§āĻ˛āĻŋāĻā§āĻļāĻ¨ āĻ ā§āĻ¯āĻžāĻā§āĻ¸ā§āĻ¸ āĻĒā§āĻ°āĻ¯āĻŧā§āĻāĻ¨
- āĻĒāĻĻā§āĻ§āĻ¤āĻŋāĻāĻŋ āĻ¸āĻŽā§āĻĒā§āĻ°ā§āĻŖ āĻāĻ°āĻžāĻ° āĻĒāĻ°ā§ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ°āĻāĻžāĻ°ā§āĻā§ āĻ¯ā§ āĻ āĻŋāĻāĻžāĻ¨āĻžāĻ¯āĻŧ āĻĒā§āĻ¨āĻāĻ¨āĻŋāĻ°ā§āĻĻā§āĻļāĻŋāĻ¤ āĻāĻ°āĻž āĻšāĻŦā§
- āĻ¯ā§āĻāĻžāĻŦā§ āĻāĻŽāĻ°āĻž āĻā§āĻā§āĻ¨ āĻāĻĒāĻĄā§āĻ āĻāĻ°āĻŦ
- āĻ¨āĻŋāĻ°āĻžāĻĒāĻ¤ā§āĻ¤āĻž āĻā§āĻĄ
- āĻ¯āĻžāĻāĻžāĻāĻāĻ°āĻŖ āĻā§āĻĄ āĻā§āĻ°āĻžāĻ¨ā§āĻ¸āĻŽāĻŋāĻļāĻ¨ āĻŦāĻŋāĻ¨ā§āĻ¯āĻžāĻ¸
- āĻ āĻ¨ā§āĻŽā§āĻĻāĻ¨ āĻ¸āĻŽā§āĻĒāĻ¨ā§āĻ¨ āĻšāĻāĻ¯āĻŧāĻžāĻ° āĻĒāĻ°ā§, āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ°āĻāĻžāĻ°ā§āĻā§ GET āĻĒā§āĻ¯āĻžāĻ°āĻžāĻŽāĻŋāĻāĻžāĻ° āĻĻā§āĻŦāĻžāĻ°āĻž āĻĒāĻžāĻ¸ āĻāĻ°āĻž āĻ¤ā§āĻ°ā§āĻāĻŋ āĻŦāĻž āĻ āĻ¨ā§āĻŽā§āĻĻāĻ¨ā§āĻ° āĻā§āĻĄ āĻ¸āĻš āĻĒā§āĻ°āĻĨāĻŽ āĻ āĻ¨ā§āĻ°ā§āĻ§ā§ āĻ¨āĻŋāĻ°ā§āĻĻāĻŋāĻˇā§āĻ āĻĒā§āĻˇā§āĻ āĻžāĻ¯āĻŧ āĻĒā§āĻ¨āĻāĻ¨āĻŋāĻ°ā§āĻĻā§āĻļāĻŋāĻ¤ āĻāĻ°āĻž āĻšāĻŦā§
- āĻ ā§āĻ¯āĻžāĻĒā§āĻ˛āĻŋāĻā§āĻļāĻ¨ (āĻ¸ā§āĻā§āĻ°āĻŋāĻĒā§āĻ) āĻāĻ āĻĒā§āĻ¯āĻžāĻ°āĻžāĻŽāĻŋāĻāĻžāĻ°āĻā§āĻ˛āĻŋ āĻā§āĻ°āĻšāĻŖ āĻāĻ°āĻ¤ā§ āĻšāĻŦā§ āĻāĻŦāĻ, āĻ¯āĻĻāĻŋ āĻā§āĻĄāĻāĻŋ āĻĒā§āĻ°āĻžāĻĒā§āĻ¤ āĻšāĻ¯āĻŧ, āĻā§āĻā§āĻ¨āĻā§āĻ˛āĻŋ āĻĒāĻžāĻāĻ¯āĻŧāĻžāĻ° āĻāĻ¨ā§āĻ¯ āĻ¨āĻŋāĻŽā§āĻ¨āĻ˛āĻŋāĻāĻŋāĻ¤ āĻ āĻ¨ā§āĻ°ā§āĻ§ āĻāĻ°ā§āĻ¨
- āĻ
āĻ¨ā§āĻ°ā§āĻ§āĻāĻŋ āĻ¸āĻ āĻŋāĻ āĻšāĻ˛ā§, Google API āĻĢā§āĻ°āĻ¤ āĻĻā§āĻ¯āĻŧ:
- āĻ ā§āĻ¯āĻžāĻā§āĻ¸ā§āĻ¸ āĻā§āĻā§āĻ¨ āĻ¯āĻž āĻĻāĻŋāĻ¯āĻŧā§ āĻāĻŽāĻ°āĻž āĻ āĻ¨ā§āĻ°ā§āĻ§ āĻāĻ°āĻ¤ā§ āĻĒāĻžāĻ°āĻŋ
- āĻāĻ āĻā§āĻā§āĻ¨ā§āĻ° āĻŦā§āĻ§āĻ¤āĻžāĻ° āĻ¸āĻŽāĻ¯āĻŧāĻāĻžāĻ˛
- āĻ ā§āĻ¯āĻžāĻā§āĻ¸ā§āĻ¸ āĻā§āĻā§āĻ¨ āĻ°āĻŋāĻĢā§āĻ°ā§āĻļ āĻāĻ°āĻ¤ā§ āĻ°āĻŋāĻĢā§āĻ°ā§āĻļ āĻā§āĻā§āĻ¨ āĻĒā§āĻ°āĻ¯āĻŧā§āĻāĻ¨āĨ¤
āĻĒā§āĻ°āĻĨāĻŽā§ āĻāĻĒāĻ¨āĻžāĻā§ Google API āĻāĻ¨āĻ¸ā§āĻ˛ā§ āĻ¯ā§āĻ¤ā§ āĻšāĻŦā§:
āĻ¸ā§āĻā§āĻ°āĻŋāĻĒā§āĻ āĻ ā§āĻ¯āĻžāĻ˛āĻāĻ°āĻŋāĻĻāĻŽ āĻĒāĻĄāĻŧāĻž āĻāĻ°āĻ āĻ¸ā§āĻŦāĻŋāĻ§āĻžāĻāĻ¨āĻ āĻāĻ°āĻ¤ā§, āĻāĻĒāĻ¨āĻŋ āĻāĻāĻāĻŋ āĻĒā§āĻĨāĻ āĻĢāĻžāĻāĻļāĻ¨ā§ āĻĒā§āĻ°āĻĨāĻŽ āĻĒāĻĻāĻā§āĻˇā§āĻĒāĻā§āĻ˛āĻŋ āĻĒā§āĻ°āĻĻāĻ°ā§āĻļāĻ¨ āĻāĻ°āĻ¤ā§ āĻĒāĻžāĻ°ā§āĻ¨ āĻ¯āĻž āĻ ā§āĻ¯āĻžāĻĒā§āĻ˛āĻŋāĻā§āĻļāĻ¨ā§āĻ° āĻāĻ¨ā§āĻ¯ āĻ ā§āĻ¯āĻžāĻā§āĻ¸ā§āĻ¸ āĻāĻŦāĻ āĻ°āĻŋāĻĢā§āĻ°ā§āĻļ āĻā§āĻā§āĻ¨āĻā§āĻ˛āĻŋ āĻĢāĻŋāĻ°āĻŋāĻ¯āĻŧā§ āĻĻā§āĻŦā§:
$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-āĻ āĻāĻ¨āĻā§āĻĄ āĻāĻ°āĻž āĻāĻŦāĻļā§āĻ¯āĻ (āĻāĻŋāĻ¨ā§āĻ¨ āĻŦā§āĻ¸ 64 āĻĨā§āĻā§ āĻĻā§āĻāĻŋ āĻā§āĻŦāĻŋāĻ˛ āĻ
āĻā§āĻˇāĻ° āĻĻā§āĻŦāĻžāĻ°āĻž) āĻāĻŦāĻ āĻ
āĻā§āĻˇāĻ° āĻ˛āĻžāĻāĻ¨ā§āĻ° āĻļā§āĻˇāĻā§āĻ˛āĻŋ āĻ¸āĻ°āĻžāĻ¨ā§ āĻšāĻā§āĻā§: =āĨ¤
āĻāĻ° āĻĒāĻ°ā§, āĻ āĻ¨ā§āĻŽā§āĻĻāĻ¨ā§āĻ° āĻĒāĻ°ā§ āĻāĻāĻāĻŋ āĻĒā§āĻ°āĻ¤āĻŋāĻā§āĻ°āĻŋāĻ¯āĻŧāĻž āĻĒāĻžāĻāĻ¯āĻŧāĻžāĻ° āĻāĻ¨ā§āĻ¯ āĻāĻŽāĻžāĻĻā§āĻ° āĻ¸ā§āĻĨāĻžāĻ¨ā§āĻ¯āĻŧ āĻŽā§āĻļāĻŋāĻ¨ā§ http āĻļā§āĻ¨āĻž āĻļā§āĻ°ā§ āĻāĻ°āĻ¤ā§ āĻšāĻŦā§, āĻ¯āĻž āĻāĻāĻāĻŋ āĻĒā§āĻ¨āĻāĻ¨āĻŋāĻ°ā§āĻĻā§āĻļ āĻšāĻŋāĻ¸āĻžāĻŦā§ āĻĢāĻŋāĻ°ā§ āĻāĻ¸āĻŦā§āĨ¤
āĻĒā§āĻ°āĻļāĻžāĻ¸āĻ¨āĻŋāĻ āĻāĻžāĻāĻā§āĻ˛āĻŋ āĻāĻāĻāĻŋ āĻŦāĻŋāĻļā§āĻˇ āĻ¸āĻžāĻ°ā§āĻāĻžāĻ°ā§ āĻ¸āĻā§āĻāĻžāĻ˛āĻŋāĻ¤ āĻšāĻ¯āĻŧ, āĻāĻŽāĻ°āĻž āĻ¸āĻŽā§āĻāĻžāĻŦāĻ¨āĻžāĻā§ āĻāĻĄāĻŧāĻŋāĻ¯āĻŧā§ āĻĻāĻŋāĻ¤ā§ āĻĒāĻžāĻ°āĻŋ āĻ¨āĻž āĻ¯ā§ āĻāĻāĻžāĻ§āĻŋāĻ āĻĒā§āĻ°āĻļāĻžāĻ¸āĻ āĻāĻāĻ āĻ¸āĻŽāĻ¯āĻŧā§ āĻ¸ā§āĻā§āĻ°āĻŋāĻĒā§āĻāĻāĻŋ āĻāĻžāĻ˛āĻžāĻŦā§āĻ¨, āĻ¤āĻžāĻ āĻāĻāĻŋ āĻŦāĻ°ā§āĻ¤āĻŽāĻžāĻ¨ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ°āĻāĻžāĻ°ā§āĻ° āĻāĻ¨ā§āĻ¯ āĻāĻ˛ā§āĻŽā§āĻ˛ā§āĻāĻžāĻŦā§ āĻāĻāĻāĻŋ āĻĒā§āĻ°ā§āĻ āĻ¨āĻŋāĻ°ā§āĻŦāĻžāĻāĻ¨ āĻāĻ°āĻŦā§, āĻ¤āĻŦā§ āĻāĻŽāĻŋ āĻĒā§āĻ°ā§āĻŦāĻ¨āĻŋāĻ°ā§āĻ§āĻžāĻ°āĻŋāĻ¤ āĻĒā§āĻ°ā§āĻāĻā§āĻ˛āĻŋ āĻ¨āĻŋāĻ°ā§āĻĻāĻŋāĻˇā§āĻ āĻāĻ°ā§āĻāĻŋ āĻāĻžāĻ°āĻŖ āĻāĻā§āĻ˛āĻŋāĻā§ āĻ āĻŦāĻļā§āĻ¯āĻ API āĻāĻ¨āĻ¸ā§āĻ˛ā§ āĻŦāĻŋāĻļā§āĻŦāĻ¸ā§āĻ¤ āĻšāĻŋāĻ¸āĻžāĻŦā§ āĻ¯ā§āĻā§āĻ¤ āĻāĻ°āĻ¤ā§ āĻšāĻŦā§āĨ¤
āĻ
ā§āĻ¯āĻžāĻā§āĻ¸ā§āĻ¸_āĻāĻžāĻāĻĒ=āĻ
āĻĢāĻ˛āĻžāĻāĻ¨ āĻāĻ° āĻŽāĻžāĻ¨ā§ āĻšāĻ˛ āĻ¯ā§ āĻ
ā§āĻ¯āĻžāĻĒā§āĻ˛āĻŋāĻā§āĻļāĻ¨āĻāĻŋ āĻŦā§āĻ°āĻžāĻāĻāĻžāĻ°ā§āĻ° āĻ¸āĻžāĻĨā§ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ°āĻāĻžāĻ°ā§āĻ° āĻŽāĻŋāĻĨāĻ¸ā§āĻā§āĻ°āĻŋāĻ¯āĻŧāĻž āĻāĻžāĻĄāĻŧāĻžāĻ āĻāĻāĻāĻŋ āĻŽā§āĻ¯āĻŧāĻžāĻĻā§āĻ¤ā§āĻ¤ā§āĻ°ā§āĻŖ āĻā§āĻā§āĻ¨ āĻāĻĒāĻĄā§āĻ āĻāĻ°āĻ¤ā§ āĻĒāĻžāĻ°ā§,
āĻĒā§āĻ°āĻ¤āĻŋāĻā§āĻ°āĻŋāĻ¯āĻŧāĻž_āĻĒā§āĻ°āĻāĻžāĻ° = āĻā§āĻĄ āĻā§āĻĄāĻāĻŋ āĻā§āĻāĻžāĻŦā§ āĻĢā§āĻ°āĻ¤ āĻĻā§āĻāĻ¯āĻŧāĻž āĻšāĻŦā§ āĻ¤āĻžāĻ° āĻŦāĻŋāĻ¨ā§āĻ¯āĻžāĻ¸ āĻ¸ā§āĻ āĻāĻ°ā§ (āĻĒā§āĻ°āĻžāĻ¨ā§ āĻ
āĻ¨ā§āĻŽā§āĻĻāĻ¨ āĻĒāĻĻā§āĻ§āĻ¤āĻŋāĻ° āĻāĻāĻāĻŋ āĻ°ā§āĻĢāĻžāĻ°ā§āĻ¨ā§āĻ¸, āĻ¯āĻāĻ¨ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ°āĻāĻžāĻ°ā§ āĻŦā§āĻ°āĻžāĻāĻāĻžāĻ° āĻĨā§āĻā§ āĻā§āĻĄāĻāĻŋ āĻ¸ā§āĻā§āĻ°āĻŋāĻĒā§āĻā§ āĻ
āĻ¨ā§āĻ˛āĻŋāĻĒāĻŋ āĻāĻ°ā§),
āĻ¸ā§āĻ¯ā§āĻ āĻ¸ā§āĻ¯ā§āĻ āĻāĻŦāĻ āĻ
ā§āĻ¯āĻžāĻā§āĻ¸ā§āĻ¸ā§āĻ° āĻ§āĻ°āĻ¨ āĻ¨āĻŋāĻ°ā§āĻĻā§āĻļ āĻāĻ°ā§āĨ¤ āĻāĻā§āĻ˛āĻŋ āĻ
āĻŦāĻļā§āĻ¯āĻ āĻ¸ā§āĻĒā§āĻ¸ āĻŦāĻž %20 (āĻāĻāĻāĻ°āĻāĻ˛ āĻāĻ¨āĻā§āĻĄāĻŋāĻ āĻ
āĻ¨ā§āĻ¯āĻžāĻ¯āĻŧā§) āĻĻā§āĻŦāĻžāĻ°āĻž āĻĒā§āĻĨāĻ āĻāĻ°āĻž āĻāĻāĻŋāĻ¤āĨ¤ āĻĒā§āĻ°āĻāĻžāĻ° āĻ¸āĻš āĻ
ā§āĻ¯āĻžāĻā§āĻ¸ā§āĻ¸ āĻāĻ˛āĻžāĻāĻžāĻ° āĻāĻāĻāĻŋ āĻ¤āĻžāĻ˛āĻŋāĻāĻž āĻāĻāĻžāĻ¨ā§ āĻĻā§āĻāĻž āĻ¯ā§āĻ¤ā§ āĻĒāĻžāĻ°ā§:
āĻ āĻ¨ā§āĻŽā§āĻĻāĻ¨ āĻā§āĻĄ āĻĒāĻžāĻāĻ¯āĻŧāĻžāĻ° āĻĒāĻ°ā§, āĻ ā§āĻ¯āĻžāĻĒā§āĻ˛āĻŋāĻā§āĻļāĻ¨āĻāĻŋ āĻŦā§āĻ°āĻžāĻāĻāĻžāĻ°ā§ āĻāĻāĻāĻŋ āĻāĻ¨āĻŋāĻˇā§āĻ āĻŦāĻžāĻ°ā§āĻ¤āĻž āĻĢā§āĻ°āĻ¤ āĻĻā§āĻŦā§, āĻĒā§āĻ°ā§āĻā§ āĻļā§āĻ¨āĻž āĻŦāĻ¨ā§āĻ§ āĻāĻ°āĻŦā§ āĻāĻŦāĻ āĻā§āĻā§āĻ¨ āĻĒāĻžāĻāĻ¯āĻŧāĻžāĻ° āĻāĻ¨ā§āĻ¯ āĻāĻāĻāĻŋ POST āĻ āĻ¨ā§āĻ°ā§āĻ§ āĻĒāĻžāĻ āĻžāĻŦā§āĨ¤ āĻāĻŽāĻ°āĻž āĻāĻ¤ā§ āĻĒā§āĻ°ā§āĻŦā§ āĻ¨āĻŋāĻ°ā§āĻĻāĻŋāĻˇā§āĻ āĻāĻ°āĻž āĻāĻāĻĄāĻŋ āĻāĻŦāĻ āĻāĻ¨āĻ¸ā§āĻ˛ API āĻĨā§āĻā§ āĻā§āĻĒāĻ¨ā§āĻ¯āĻŧāĻ¤āĻž āĻ¨āĻŋāĻ°ā§āĻĻā§āĻļ āĻāĻ°āĻŋ, āĻ¯ā§ āĻ āĻŋāĻāĻžāĻ¨āĻžāĻ¯āĻŧ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ°āĻāĻžāĻ°ā§āĻā§ āĻĒā§āĻ¨āĻāĻ¨āĻŋāĻ°ā§āĻĻā§āĻļāĻŋāĻ¤ āĻāĻ°āĻž āĻšāĻŦā§ āĻāĻŦāĻ āĻĒā§āĻ°ā§āĻā§āĻāĻ˛ āĻ¸ā§āĻĒā§āĻ¸āĻŋāĻĢāĻŋāĻā§āĻļāĻ¨ āĻ āĻ¨ā§āĻ¯āĻžāĻ¯āĻŧā§ grant_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 āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻāĻ°āĻž āĻšāĻ¯āĻŧāĨ¤ 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'])
}
}
}
}
āĻĒā§āĻ°āĻ¤āĻŋāĻāĻŋ āĻ āĻ¨ā§āĻ°ā§āĻ§ā§, āĻāĻĒāĻ¨āĻžāĻā§ āĻāĻāĻāĻŋ āĻ āĻ¨ā§āĻŽā§āĻĻāĻ¨ āĻļāĻŋāĻ°ā§āĻ¨āĻžāĻŽ āĻĒāĻžāĻ āĻžāĻ¤ā§ āĻšāĻŦā§ āĻ¯āĻžāĻ¤ā§ āĻā§āĻā§āĻ¨ā§āĻ° āĻ§āĻ°āĻ¨ āĻāĻŦāĻ āĻ ā§āĻ¯āĻžāĻā§āĻ¸ā§āĻ¸ āĻā§āĻā§āĻ¨ āĻĨāĻžāĻā§āĨ¤ āĻŦāĻ°ā§āĻ¤āĻŽāĻžāĻ¨ā§, āĻā§āĻā§āĻ¨ āĻāĻžāĻāĻĒ āĻ¸āĻŦāĻ¸āĻŽāĻ¯āĻŧ Bearer āĻšāĻ¯āĻŧāĨ¤ āĻāĻžāĻ°āĻŖ āĻāĻŽāĻžāĻĻā§āĻ° āĻā§āĻ āĻāĻ°āĻ¤ā§ āĻšāĻŦā§ āĻ¯ā§ āĻā§āĻā§āĻ¨ā§āĻ° āĻŽā§āĻ¯āĻŧāĻžāĻĻ āĻļā§āĻˇ āĻšāĻ¯āĻŧāĻ¨āĻŋ āĻāĻŦāĻ āĻāĻāĻŋ āĻāĻžāĻ°āĻŋ āĻāĻ°āĻžāĻ° āĻŽā§āĻšā§āĻ°ā§āĻ¤ āĻĨā§āĻā§ āĻāĻ āĻāĻ¨ā§āĻāĻž āĻĒāĻ°ā§ āĻāĻĒāĻĄā§āĻ āĻāĻ°ā§āĻ¨, āĻāĻŽāĻŋ āĻ āĻ¨ā§āĻ¯ āĻāĻāĻāĻŋ āĻĢāĻžāĻāĻļāĻ¨ā§āĻ° āĻāĻ¨ā§āĻ¯ āĻāĻāĻāĻŋ āĻ āĻ¨ā§āĻ°ā§āĻ§ āĻāĻ˛ā§āĻ˛ā§āĻ āĻāĻ°ā§āĻāĻŋ āĻ¯āĻž āĻāĻāĻāĻŋ āĻ ā§āĻ¯āĻžāĻā§āĻ¸ā§āĻ¸ āĻā§āĻā§āĻ¨ āĻĢā§āĻ°āĻ¤ āĻĻā§āĻ¯āĻŧāĨ¤ āĻĒā§āĻ°āĻĨāĻŽ āĻ ā§āĻ¯āĻžāĻā§āĻ¸ā§āĻ¸ āĻā§āĻā§āĻ¨ āĻĒāĻžāĻāĻ¯āĻŧāĻžāĻ° āĻ¸āĻŽāĻ¯āĻŧ āĻā§āĻĄā§āĻ° āĻāĻāĻ āĻ āĻāĻļ āĻ¸ā§āĻā§āĻ°āĻŋāĻĒā§āĻā§āĻ° āĻļā§āĻ°ā§āĻ¤ā§ āĻĨāĻžāĻā§:
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 āĻ āĻ¨ā§āĻ°ā§āĻ§āĻāĻŋ āĻāĻĒāĻŋāĻāĻāĻā§ āĻāĻĒāĻ¨āĻžāĻŽ āĻ¸āĻš āĻ āĻŋāĻ āĻ¸ā§āĻ āĻāĻŽā§āĻ˛ āĻ¸āĻš āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ°āĻāĻžāĻ°ā§āĻ° āĻ¸āĻ¨ā§āĻ§āĻžāĻ¨ āĻāĻ°āĻ¤ā§ āĻŦāĻ˛āĻŦā§āĨ¤ āĻāĻĒāĻ¨āĻŋ āĻāĻ¯āĻŧāĻžāĻāĻ˛ā§āĻĄāĻāĻžāĻ°ā§āĻĄāĻ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻāĻ°āĻ¤ā§ āĻĒāĻžāĻ°ā§āĻ¨: =, :, :{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
}
āĻāĻāĻāĻŋ āĻ ā§āĻ¯āĻžāĻāĻžāĻāĻ¨ā§āĻ āĻāĻĒāĻĄā§āĻ āĻāĻ°āĻžāĻ° āĻāĻŦāĻ āĻ¤ā§āĻ°āĻŋ āĻāĻ°āĻžāĻ° āĻĢāĻžāĻāĻļāĻ¨āĻā§āĻ˛āĻŋāĻ° āĻāĻāĻāĻŋ āĻ āĻ¨ā§āĻ°ā§āĻĒ āĻ¸āĻŋāĻ¨āĻā§āĻ¯āĻžāĻā§āĻ¸ āĻ°āĻ¯āĻŧā§āĻā§; āĻ¸āĻŽāĻ¸ā§āĻ¤ āĻ āĻ¤āĻŋāĻ°āĻŋāĻā§āĻ¤ āĻā§āĻˇā§āĻ¤ā§āĻ° āĻĒā§āĻ°āĻ¯āĻŧā§āĻāĻ¨ āĻšāĻ¯āĻŧ āĻ¨āĻž; āĻĢā§āĻ¨ āĻ¨āĻŽā§āĻŦāĻ° āĻ¸āĻš āĻŦāĻŋāĻāĻžāĻā§, āĻāĻĒāĻ¨āĻžāĻā§ āĻāĻāĻāĻŋ āĻ ā§āĻ¯āĻžāĻ°ā§ āĻ¨āĻŋāĻ°ā§āĻĻāĻŋāĻˇā§āĻ āĻāĻ°āĻ¤ā§ āĻšāĻŦā§ āĻ¯āĻžāĻ¤ā§ āĻ¨āĻŽā§āĻŦāĻ° āĻāĻŦāĻ āĻāĻ° āĻĒā§āĻ°āĻāĻžāĻ° āĻ¸āĻš āĻāĻāĻāĻŋ āĻĒāĻ°ā§āĻ¯āĻ¨ā§āĻ¤ āĻ°ā§āĻāĻ°ā§āĻĄ āĻĨāĻžāĻāĻ¤ā§ āĻĒāĻžāĻ°ā§āĨ¤
āĻāĻāĻāĻŋ āĻā§āĻˇā§āĻ ā§āĻ¤ā§ āĻā§āĻ¨āĻ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ°āĻāĻžāĻ°ā§āĻā§ āĻ¯ā§āĻā§āĻ¤ āĻāĻ°āĻžāĻ° āĻ¸āĻŽāĻ¯āĻŧ āĻā§āĻ¨āĻ āĻ¤ā§āĻ°ā§āĻāĻŋ āĻ¨āĻž āĻĒāĻžāĻāĻ¯āĻŧāĻžāĻ° āĻāĻ¨ā§āĻ¯, āĻāĻŽāĻ°āĻž āĻĒā§āĻ°āĻĨāĻŽā§ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ°āĻāĻžāĻ°ā§āĻ° āĻāĻžāĻ āĻĨā§āĻā§ āĻā§āĻˇā§āĻ ā§āĻ° āĻ¸āĻĻāĻ¸ā§āĻ¯ āĻŦāĻž āĻāĻŽā§āĻĒā§āĻāĻŋāĻļāĻ¨ā§āĻ° āĻāĻāĻāĻŋ āĻ¤āĻžāĻ˛āĻŋāĻāĻž āĻĒā§āĻ¯āĻŧā§ āĻ¤āĻŋāĻ¨āĻŋ āĻāĻ¤āĻŋāĻŽāĻ§ā§āĻ¯ā§ āĻāĻ āĻā§āĻˇā§āĻ ā§āĻ° āĻ¸āĻĻāĻ¸ā§āĻ¯ āĻāĻŋāĻ¨āĻž āĻ¤āĻž āĻĒāĻ°ā§āĻā§āĻˇāĻž āĻāĻ°āĻ¤ā§ āĻĒāĻžāĻ°āĻŋāĨ¤
āĻāĻāĻāĻŋ āĻ¨āĻŋāĻ°ā§āĻĻāĻŋāĻˇā§āĻ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ°āĻāĻžāĻ°ā§āĻ° āĻā§āĻ°ā§āĻĒ āĻ¸āĻĻāĻ¸ā§āĻ¯āĻĒāĻĻ āĻāĻŋāĻā§āĻāĻžāĻ¸āĻž āĻĒā§āĻ¨āĻ°āĻžāĻŦā§āĻ¤ā§āĻ¤āĻŋāĻŽā§āĻ˛āĻ āĻšāĻŦā§ āĻ¨āĻž āĻāĻŦāĻ āĻļā§āĻ§ā§āĻŽāĻžāĻ¤ā§āĻ° āĻ¸āĻ°āĻžāĻ¸āĻ°āĻŋ āĻ¸āĻĻāĻ¸ā§āĻ¯āĻ¤āĻž āĻĻā§āĻāĻžāĻŦā§. āĻāĻāĻāĻŋ āĻ āĻāĻŋāĻāĻžāĻŦāĻ āĻā§āĻˇā§āĻ ā§āĻ¤ā§ āĻāĻāĻāĻ¨ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ°āĻāĻžāĻ°ā§āĻā§ āĻ āĻ¨ā§āĻ¤āĻ°ā§āĻā§āĻā§āĻ¤ āĻāĻ°āĻž āĻ¯āĻžāĻ° āĻŽāĻ§ā§āĻ¯ā§ āĻāĻ¤āĻŋāĻŽāĻ§ā§āĻ¯ā§āĻ āĻāĻāĻāĻŋ āĻāĻžāĻāĻ˛ā§āĻĄ āĻā§āĻ°ā§āĻĒ āĻ°āĻ¯āĻŧā§āĻā§ āĻ¯ā§ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ°āĻāĻžāĻ°ā§āĻ° āĻāĻāĻāĻ¨ āĻ¸āĻĻāĻ¸ā§āĻ¯ āĻ¸āĻĢāĻ˛ āĻšāĻŦā§ā§ˇ
āĻāĻĒāĻ¸āĻāĻšāĻžāĻ°
āĻ¯āĻž āĻ āĻŦāĻļāĻŋāĻˇā§āĻ āĻĨāĻžāĻā§ āĻ¤āĻž āĻšāĻ˛ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ°āĻāĻžāĻ°ā§āĻā§ āĻ¨āĻ¤ā§āĻ¨ āĻ ā§āĻ¯āĻžāĻāĻžāĻāĻ¨ā§āĻā§āĻ° āĻāĻ¨ā§āĻ¯ āĻĒāĻžāĻ¸āĻāĻ¯āĻŧāĻžāĻ°ā§āĻĄ āĻĒāĻžāĻ āĻžāĻ¤ā§āĨ¤ āĻāĻŽāĻ°āĻž āĻāĻ¸āĻāĻŽāĻāĻ¸ā§āĻ° āĻŽāĻžāĻ§ā§āĻ¯āĻŽā§ āĻāĻāĻŋ āĻāĻ°āĻŋ, āĻāĻŦāĻ āĻ¨āĻŋāĻ°ā§āĻĻā§āĻļāĻžāĻŦāĻ˛ā§ āĻ¸āĻš āĻ¸āĻžāĻ§āĻžāĻ°āĻŖ āĻ¤āĻĨā§āĻ¯ āĻĒāĻžāĻ āĻžāĻ āĻāĻŦāĻ āĻāĻāĻāĻŋ āĻŦā§āĻ¯āĻā§āĻ¤āĻŋāĻāĻ¤ āĻāĻŽā§āĻ˛ā§ āĻ˛āĻāĻāĻ¨ āĻāĻ°āĻŋ, āĻ¯āĻž āĻāĻāĻāĻŋ āĻĢā§āĻ¨ āĻ¨āĻŽā§āĻŦāĻ° āĻ¸āĻš, āĻ¨āĻŋāĻ¯āĻŧā§āĻ āĻŦāĻŋāĻāĻžāĻ āĻĻā§āĻŦāĻžāĻ°āĻž āĻ¸āĻ°āĻŦāĻ°āĻžāĻš āĻāĻ°āĻž āĻšāĻ¯āĻŧā§āĻāĻŋāĻ˛āĨ¤ āĻāĻāĻāĻŋ āĻŦāĻŋāĻāĻ˛ā§āĻĒ āĻšāĻŋāĻ¸āĻžāĻŦā§, āĻāĻĒāĻ¨āĻŋ āĻ āĻ°ā§āĻĨ āĻ¸āĻā§āĻāĻ¯āĻŧ āĻāĻ°āĻ¤ā§ āĻĒāĻžāĻ°ā§āĻ¨ āĻāĻŦāĻ āĻāĻāĻāĻŋ āĻā§āĻĒāĻ¨ āĻā§āĻ˛āĻŋāĻā§āĻ°āĻžāĻŽ āĻā§āĻ¯āĻžāĻā§ āĻāĻĒāĻ¨āĻžāĻ° āĻĒāĻžāĻ¸āĻāĻ¯āĻŧāĻžāĻ°ā§āĻĄ āĻĒāĻžāĻ āĻžāĻ¤ā§ āĻĒāĻžāĻ°ā§āĻ¨, āĻ¯āĻž āĻĻā§āĻŦāĻŋāĻ¤ā§āĻ¯āĻŧ āĻĢā§āĻ¯āĻžāĻā§āĻāĻ° āĻšāĻŋāĻ¸āĻžāĻŦā§ āĻŦāĻŋāĻŦā§āĻāĻŋāĻ¤ āĻšāĻ¤ā§ āĻĒāĻžāĻ°ā§ (āĻŽā§āĻ¯āĻžāĻāĻŦā§āĻāĻā§āĻ˛āĻŋ āĻāĻāĻāĻŋ āĻŦā§āĻ¯āĻ¤āĻŋāĻā§āĻ°āĻŽ āĻšāĻŦā§)āĨ¤
āĻļā§āĻˇ āĻĒāĻ°ā§āĻ¯āĻ¨ā§āĻ¤ āĻĒāĻĄāĻŧāĻžāĻ° āĻāĻ¨ā§āĻ¯ āĻāĻĒāĻ¨āĻžāĻā§ āĻ§āĻ¨ā§āĻ¯āĻŦāĻžāĻĻ. āĻāĻŽāĻŋ āĻ¨āĻŋāĻŦāĻ¨ā§āĻ§ āĻ˛ā§āĻāĻžāĻ° āĻļā§āĻ˛ā§ āĻāĻ¨ā§āĻ¨āĻ¤ āĻāĻ°āĻžāĻ° āĻāĻ¨ā§āĻ¯ āĻĒāĻ°āĻžāĻŽāĻ°ā§āĻļāĻā§āĻ˛āĻŋ āĻĻā§āĻā§ āĻā§āĻļāĻŋ āĻšāĻŦ āĻāĻŦāĻ āĻ¸ā§āĻā§āĻ°āĻŋāĻĒā§āĻ āĻ˛ā§āĻāĻžāĻ° āĻ¸āĻŽāĻ¯āĻŧ āĻāĻĒāĻ¨āĻŋ āĻāĻŽ āĻ¤ā§āĻ°ā§āĻāĻŋ āĻ§āĻ°āĻ¤ā§ āĻāĻžāĻ¨ =)
āĻ˛āĻŋāĻā§āĻāĻā§āĻ˛āĻŋāĻ° āĻ¤āĻžāĻ˛āĻŋāĻāĻž āĻ¯āĻž āĻŦāĻŋāĻˇāĻ¯āĻŧāĻāĻ¤āĻāĻžāĻŦā§ āĻāĻĒāĻ¯ā§āĻā§ āĻšāĻ¤ā§ āĻĒāĻžāĻ°ā§ āĻŦāĻž āĻ¸āĻšāĻāĻāĻžāĻŦā§ āĻĒā§āĻ°āĻļā§āĻ¨ā§āĻ° āĻāĻ¤ā§āĻ¤āĻ° āĻĻāĻŋāĻ¤ā§ āĻĒāĻžāĻ°ā§:
āĻŽā§āĻŦāĻžāĻāĻ˛ āĻāĻŦāĻ āĻĄā§āĻ¸ā§āĻāĻāĻĒ āĻ ā§āĻ¯āĻžāĻĒā§āĻ° āĻāĻ¨ā§āĻ¯ OAuth 2.0 āĻāĻ¯āĻŧā§āĻŦ āĻ¸āĻžāĻ°ā§āĻāĻžāĻ° āĻ ā§āĻ¯āĻžāĻĒā§āĻ˛āĻŋāĻā§āĻļāĻ¨ā§āĻ° āĻāĻ¨ā§āĻ¯ OAuth 2.0 āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻāĻ°āĻž OAuth āĻĒāĻžāĻŦāĻ˛āĻŋāĻ āĻā§āĻ˛āĻžāĻ¯āĻŧā§āĻ¨ā§āĻāĻĻā§āĻ° āĻĻā§āĻŦāĻžāĻ°āĻž āĻā§āĻĄ āĻāĻā§āĻ¸āĻā§āĻā§āĻā§āĻ° āĻāĻ¨ā§āĻ¯ āĻĒā§āĻ°āĻŽāĻžāĻŖ āĻā§ PowerShell āĻĻāĻŋāĻ¯āĻŧā§ āĻāĻ˛ā§āĻŽā§āĻ˛ā§ āĻāĻŋāĻ āĻŋ āĻ¤ā§āĻ°āĻŋ āĻāĻ°ā§āĻ¨ ASCII āĻā§āĻŦāĻŋāĻ˛ āĻāĻŦāĻ āĻŦāĻ°ā§āĻŖāĻ¨āĻž PowerShell: āĻāĻāĻāĻŋ āĻ¸ā§āĻā§āĻ°āĻŋāĻāĻ¯āĻŧā§āĻ° āĻāĻ¨ā§āĻ¯ āĻšā§āĻ¯āĻžāĻļ āĻŽāĻžāĻ¨ āĻĒāĻžāĻāĻ¯āĻŧāĻž āĻāĻ¨āĻā§āĻĄ/āĻĄāĻŋāĻā§āĻĄ āĻŦā§āĻ¸64āĻāĻāĻāĻ°āĻāĻ˛ Base64 āĻāĻ¨āĻā§āĻĄāĻŋāĻ āĻŦāĻ¨āĻžāĻŽ Base64url āĻāĻ¨āĻā§āĻĄāĻŋāĻ PowerShell 5.1-āĻ āĻāĻ¨āĻā§āĻ-āĻ°ā§āĻ¸ā§āĻ āĻŽā§āĻĨāĻĄ āĻ§āĻžāĻĒ 1 āĻ āĻ ā§āĻ¯āĻžāĻā§āĻ¸ā§āĻ¸_āĻāĻžāĻāĻĒ āĻ āĻĢāĻ˛āĻžāĻāĻ¨ āĻĨāĻžāĻāĻž āĻ¸āĻ¤ā§āĻ¤ā§āĻŦā§āĻ āĻ°āĻŋāĻĢā§āĻ°ā§āĻļ āĻā§āĻā§āĻ¨ āĻĒāĻžāĻā§āĻā§āĻ¨ āĻ¨āĻž āĻ¤ā§āĻ˛āĻ¨āĻž āĻ āĻĒāĻžāĻ°ā§āĻāĻ° āĻ¸āĻŽā§āĻĒāĻ°ā§āĻā§ āĻĄāĻŋāĻ°ā§āĻā§āĻāĻ°āĻŋ API: āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ°āĻāĻžāĻ°ā§ āĻ ā§āĻ¯āĻžāĻāĻžāĻāĻ¨ā§āĻ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ°āĻāĻžāĻ°ā§āĻĻā§āĻ° āĻāĻ¨ā§āĻ¯ āĻ āĻ¨ā§āĻ¸āĻ¨ā§āĻ§āĻžāĻ¨ āĻāĻ°ā§āĻ¨ āĻĄāĻŋāĻ°ā§āĻā§āĻāĻ°āĻŋ API: āĻā§āĻ°ā§āĻĒ āĻāĻ¨āĻā§āĻ-āĻ°ā§āĻ¸ā§āĻ āĻŽā§āĻĨāĻĄ - āĻĒāĻžāĻāĻ¯āĻŧāĻžāĻ°āĻļā§āĻ˛ā§āĻ° āĻāĻ¨ā§āĻ¯ āĻ¤ā§āĻ°ā§āĻāĻŋ āĻšā§āĻ¯āĻžāĻ¨ā§āĻĄāĻ˛āĻŋāĻ
āĻāĻ¤ā§āĻ¸: www.habr.com