Overblog Tous les blogs Top blogs Technologie & Science Tous les blogs Technologie & Science
Editer l'article Suivre ce blog Administration + Créer mon blog
MENU

[ps1] exemple deploy zscaler avec servicenow via powershell

Publié le par damcuvelier

# usage: .\Deploy-Zscaler_srvNow.ps1 -ZscalerClientPath "\\srv\zscaler.exe" -ZscalerUri "ServiceNow" -SN_Instance "prod00123" -SN_User "zsc_api" -SN_Password "********"


param(
    [string]$ZscalerUri,
    [string]$SN_Instance = "dev12345",           # Nom de l'instance ServiceNow
    [string]$SN_User = "admin",                  # Utilisateur ServiceNow API
    [string]$SN_Password = "motdepasse!"         # Mot de passe ServiceNow API
)

$ErrorActionPreference = "SilentlyContinue"

if (!$ZscalerUri) {
    $ZscalerUri = "ServiceNow"  # Par défaut, on utilise ServiceNow
}

$zscaler = Get-ItemProperty "HKLM:\Software\Microsoft\Windows\CurrentVersion\Uninstall\*" |
           Where-Object { $_.DisplayName -like "*Zscaler*" }

$RetErr = "Not_Installed"

# ----- Écriture des tokens dans le registre -----
function ConfigZscaller {
    param($TenantToken, $votre_token)

    $regPath = "HKLM:\Software\Zscaler"
    if (-not (Test-Path $regPath)) {
        New-Item -Path "HKLM:\Software" -Name "Zscaler" -Force | Out-Null
    }

    Set-ItemProperty -Path $regPath -Name "TenantToken" -Value $TenantToken
    Set-ItemProperty -Path $regPath -Name "AuthToken" -Value $votre_token
}

# ----- Lecture depuis GPO (registre entreprise) -----
function ConfigZscallerByGPO {
    $TenantToken = Get-ItemPropertyValue -Path "HKLM:\Software\Entreprise\Zscaler" -Name "TenantToken"
    $AuthToken   = Get-ItemPropertyValue -Path "HKLM:\Software\Entreprise\Zscaler" -Name "AuthToken"
    ConfigZscaller -TenantToken $TenantToken -votre_token $AuthToken
}

# ----- Lecture depuis API ServiceNow -----
function ConfigZscallerByServiceNow {
    param($Instance, $User, $Password)

    $uri = "https://$Instance.service-now.com/api/now/table/u_zscaler_tokens?sysparm_limit=1"
    $auth = [Convert]::ToBase64String([Text.Encoding]::ASCII.GetBytes("$User:$Password"))

    $headers = @{
        Authorization = "Basic $auth"
        Accept = "application/json"
    }

    try {
        $response = Invoke-RestMethod -Uri $uri -Headers $headers -Method Get
        $TenantToken = $response.result[0].u_tenant_token
        $token       = $response.result[0].u_auth_token

        if ($TenantToken -and $token) {
            ConfigZscaller -TenantToken $TenantToken -votre_token $token
        } else {
            Write-Warning "Tokens absents dans la réponse ServiceNow."
        }
    } catch {
        Write-Error "Échec de l'appel ServiceNow : $_"
    }
}

# ----- Lecture depuis WebService local générique -----
function ConfigZscallerByWebService {
    param($Uri)

    if (!$Uri) { $Uri = "http://localhost:5000/Api/TokenZscaler" }

    if ($Uri -match "^(http://localhost|http://127\.0\.0\.1|http://intranet|https://intranet)") {
        $response = Invoke-RestMethod -Uri $Uri -Method Get
    } else {
        $response = Invoke-RestMethod -Uri $Uri -Method Get -UseDefaultCredentials
    }

    $TenantToken = $response.TenantToken
    $token       = $response.token
    ConfigZscaller -TenantToken $TenantToken -votre_token $token
}

# ----- Installation Zscaler -----
function installZscaller {
    param($ZscalerClientPath)

    if (-not (Test-Path $ZscalerClientPath)) {
        Write-Warning "Installateur Zscaler introuvable."
        return 999
    }

    $process = Start-Process -FilePath $ZscalerClientPath -ArgumentList "/quiet /norestart" -Wait -PassThru
    return $process.ExitCode
}

# ----- Exécution principale -----
if ($zscaler) {
    $zscalerName = $zscaler.DisplayName
} else {
    $RetInstZscaller = installZscaller -ZscalerClientPath $ZscalerClientPath

    if ($RetInstZscaller -eq 0) {
        if ($ZscalerUri -eq "ServiceNow") {
            ConfigZscallerByServiceNow -Instance $SN_Instance -User $SN_User -Password $SN_Password
        } else {
            ConfigZscallerByWebService -Uri $ZscalerUri
        }

        $zscaler = Get-WmiObject -Class Win32_Product | Where-Object { $_.Name -like "*Zscaler*" }
        $zscalerName = if ($zscaler) { $zscaler.Name } else { $RetErr }
    } else {
        $zscalerName = $RetErr
    }
}

return $zscalerName
 

Commenter cet article