Creación de varios usuarios con contraseñas únicas

Utilice los scripts de PowerShell y Bash Shell de esta sección para usar el comando addUsers de EPM Automate a fin de crear varios usuarios de Oracle Enterprise Performance Management Cloud, cada uno con su propia contraseña.

Si utiliza la versión en PDF de este documento: para evitar saltos de líneas e información de pie de página que inutilizarán estos scripts, cópielos de la Versión HTML de este tema.

Utilice los scripts de esta sección para completar las siguientes tareas:

  • Cargue un archivo CSV que contenga información de usuario en el entorno.

  • Cree usuarios en el dominio de identidad y asigne una contraseña única a cada usuario.

  • Suprima el archivo CSV cargado desde el entorno.

Nota:

Necesita tanto roles de administrador de servicio como de administrador de dominio de identidad para ejecutar este script.

Para crear varios usuarios, cada uno con una contraseña única:

  1. Cree un archivo CSV que contenga información de usuario. El formato del archivo es el siguiente:

    First Name,Last Name,Email,User Login,Password
    Jane,Doe,jane.doe@example.com,jdoe,P@ssword1
    John,Doe,john.doe@example.com,john.doe@example.com,P@ssword2
    

    Guarde el archivo (por ejemplo, como users.csv) y almacénelo en el directorio donde almacena los archivos de script que se crearán en los siguientes pasos.

  2. Copie el script de una de las siguientes secciones en un archivo y guárdelo; por ejemplo, como addusers.ps1 (Windows) o ./epmautomate/bin/addusers.sh (Linux/UNIX).

  3. Solo para Windows: cree un archivo por lotes denominado addusers.bat copiando el siguiente script en un archivo. Guarde el archivo en el directorio donde está almacenado users.CSV.

    @echo off
    set paramRequiredMessage=Syntax: addusers.bat "FILENAME" "[resetPassword=true|false]"
    
    set adminusername="ADMIN_USER_NAME"
    set adminpassword="ADMIN_PASSWORD"
    set url="URL"
    set dirpath=%~dp0
    echo %dirpath:~0,-1%
    cd %dirpath:~0,-1%
    set resetpassword=%~2
    
    if "%~1" == "" (
            echo File Name is missing.
            echo %paramRequiredMessage%
            exit /b 1
      )
    if "%resetpassword%" == "" (
            set resetpassword="resetPassword=true"
      )
    
    PowerShell.exe -File addusers.ps1 %~1 %resetpassword% %adminusername% %adminpassword% %url%
  4. Modifique addusers.bat (Windows) o addusers.sh (Linux/UNIX) para definir los valores de los parámetros de la siguiente tabla.

    Tabla 3-1 Valores de variable que se deben incluir en los scripts

    Variable Descripción
    adminusername Nombre de usuario de un administrador del servicio que también tiene asignado el rol de administrador del dominio de identidad.

    Ejemplos:

    Windows: set adminusername="jDoe"

    Linux/UNIX: adminusername="John.Doe"

    adminpassword Contraseña del administrador de servicio o ubicación del archivo de contraseña cifrado. Consulte el comando encrypt para obtener información sobre la creación de un archivo de contraseñas cifradas. Si la contraseña contiene caracteres especiales, consulte Manejo de caracteres especiales.

    Ejemplos:

    Windows: set adminpassword = "Example"

    Linux/UNIX: adminpassword="Example"

    url URL del entorno de EPM Cloud.

    Ejemplos:

    Windows: set url="https://example.oraclecloud.com"

    Linux/UNIX: url="https://example.oraclecloud.com"

  5. Solo para addusers.sh: asegúrese de que los siguientes valores se han definido correctamente para el sistema:

    • javahome
    • Ubicación de epmautomatescript.sh mediante la actualización del valor de la directiva epmautomatescript
  6. Ejecute addusers.bat (que ejecuta addusers.ps1) o addusers.sh desde el directorio donde están almacenados los scripts. Ejecute el siguiente comando:

    Windows: addusers.bat "fileName.csv" ["resetPassword=true|false"].

    Linux/UNIX: ./addusers.sh "fileName.csv" ["resetPassword=true|false"], donde:

    • fileName.csv es el nombre del archivo CSV que contiene información del usuario.

      Solo para Windows: este parámetro y su valor se deben incluir entre comillas dobles.

    • resetpassword es un parámetro opcional que indica si desea forzar a los usuarios a cambiar sus contraseñas tras el primer inicio de sesión. De forma predeterminada, se recomienda true.

      Solo para Windows: este parámetro y su valor se deben incluir entre comillas dobles.

Ejemplos:

  • Windows: addusers.bat "users.csv" "resetPassword=false"

  • Linux/UNIX: ./addusers.sh users.csv resetPassword=false

Script de PowerShell (adduser.ps1)

# Add users script

$inputfile=$args[0]
$resetpassword=$args[1]
$adminusername=$args[2]
$adminpassword=$args[3]
$url=$args[4]

# Generic variables
$datedefaultformat=$(get-date)
$global:addusersfile="addusers.csv"
$logfile="addusers.log"

function LogMessage
{
    $message=$args[0]
    echo "$message" >> $logfile
}

function EchoAndLogMessage
{
    $message=$args[0]

    echo "$message"
    echo "$message" >> $logfile
}

function Init
{
    $logfileexists=Test-Path $logfile
    if ($logfileexists) {
        rm $logfile 2>&1 | out-null
    }
    
    if ($inputfile -eq $addusersfile) {
        $global:addusersfile="addusers-tmp.csv"
    }
}

function Coda
{
    $addusersfileexists=Test-Path $addusersfile
    if ($addusersfileexists) {
        rm $addusersfile 2>&1 | out-null
    }
}

function ValidateInputFile
{
    $inputfileheader=Get-Content $inputfile | Select -Index 0
    $inputfilefirstrecord=Get-Content $inputfile | Select -Index 1

    if ($inputfileheader -notlike "*First Name,Last Name,Email,User Login,Password*") {
        EchoAndLogMessage "File ${inputfile} does not contain correct header: `"First Name,Last Name,Email,User Login,Password`". Please correct before re-running script. Exiting."
        exit
    }

    $elements=$inputfilefirstrecord -split ","
    $firstname=$elements[0]
    $lastname=$elements[1]
    $email=$elements[2]
    $username=$elements[3]
    $password=$elements[4]

    if ([string]::IsNullOrEmpty($firstname)) {
        EchoAndLogMessage "The first record of file ${inputfile} contains an empty first name. Please correct before re-running script. Exiting."
        exit
        } 
    elseif ([string]::IsNullOrEmpty($lastname)) {
        EchoAndLogMessage "The first record of file ${inputfile} contains an empty last name. Please correct before re-running script. Exiting."
        exit
        } 
    elseif ([string]::IsNullOrEmpty($email)) {
        EchoAndLogMessage "The first record of file ${inputfile} contains an empty email address. Please correct before re-running script. Exiting."
        exit
        } 
    elseif ([string]::IsNullOrEmpty($username)) {
        EchoAndLogMessage "The first record of file ${inputfile} contains an empty user login. Please correct before re-running script. Exiting."
        exit
        } 
    elseif ([string]::IsNullOrEmpty($password)) {
        EchoAndLogMessage "The first record of file ${inputfile} contains an empty password. Please correct before re-running script. Exiting."
        exit
        }
}

function ValidateInput
{
    $inputfileexists=Test-Path $inputfile
    if (!($inputfileexists)) {
        EchoAndLogMessage "Could not locate required file ${inputfile}"
        EchoAndLogMessage "Syntax: addusers.bat FILENAME [resetPassword=true|false]"
        EchoAndLogMessage "Exiting now."
        exit
        }

    ValidateInputFile
    }

function ProcessCommand
{
    $op=$args
    echo "EPM Automate operation: epmautomate.bat $op" >> $logfile
    epmautomate.bat $op >> $logfile 2>&1
    if ($LASTEXITCODE -ne 0) {
        echo "EPM Automate operation failed: epmautomate.bat $op. See $logfile for details."
        }
    }

function processInputFile
{
    $infile=$args[0]
    EchoAndLogMessage "Running: EPMAutomate login ${adminusername} ${adminpassword} ${url}"
    ProcessCommand login ${adminusername} ${adminpassword} ${url} 

    Get-Content $infile | ForEach-Object {
        $fullpath=$_.trim()
        $elements=$fullpath.split(',')
        $firstname=$elements[0]
        $lastname=$elements[1]
        $email=$elements[2]
        $username=$elements[3]
        $password=$elements[4]

        if ($firstname -eq "First Name") {
            return
        } else {
            EchoAndLogMessage "Creating add users file: ${addusersfile}"
            echo "First Name,Last Name,Email,User Login" > ${addusersfile}
            echo "${firstname},${lastname},${email},${username}" >> ${addusersfile}
            $txt = [io.file]::ReadAllText("$addusersfile") -replace "`r`n","`n"
            [io.file]::WriteAllText("$addusersfile", $txt)
        }

        LogMessage "Contents of add users file:"
        cat ${addusersfile} >> ${logfile}
        EchoAndLogMessage "Running: EPMAutomate uploadFile ${addusersfile}"
        ProcessCommand uploadFile ${addusersfile}
        EchoAndLogMessage "Running: EPMAutomate addUsers ${addusersfile} userPassword=${password} $resetPassword"
        ProcessCommand addUsers ${addusersfile} userPassword=${password} ${resetpassword}
        EchoAndLogMessage "Running: EPMAutomate deleteFile ${addusersfile}"
        ProcessCommand deleteFile ${addusersfile}
        }

    EchoAndLogMessage "Running: EPMAutomate logout"
    ProcessCommand logout
}

Init
EchoAndLogMessage "$datedefaultformat"
EchoAndLogMessage "Addusers script started"
ValidateInput
ProcessInputFile "${inputfile}"
Coda
EchoAndLogMessage "Addusers script completed"
EchoAndLogMessage "$datedefaultformat"

Script de shell de Bash (addusers.sh)

#!/bin/sh

inputfile=$1
resetpasswordvalue=$2
addusersfile="addusers.csv"
logfile="addusers.log"

# UPDATE VALUES FOR YOUR ENVIRONMENT
javahome=/home/user1/jdk1.8.0_191
epmautomatescript=/home/user1/epmautomate/bin/epmautomate.sh
adminusername=adminuser1
adminpassword=adminpassword1
url=https://planning-a12345.pbcs.us2.oraclecloud.com
export JAVA_HOME=${javahome}

init()
{
    if [ -f "${logfile}" ]
    then
        rm ${logfile}
    fi

    if [ "${inputfile}" == "${addusersfile}" ]
    then
        addusersfile="addusers-tmp.csv"
    fi
}

coda()
{
    if [ -f "${addusersfile}" ]
    then
        rm ${addusersfile}
    fi
}

validateInputFile()
{
    local inputfileheader=$(head -n 1 ${inputfile})
    local inputfilefirstrecord=$(head -n 2 ${inputfile} | tail -n 1)

    if [[ "${inputfileheader}" != *"First Name,Last Name,Email,User Login,Password"* ]]
    then
        echo "File ${inputfile} does not contain correct header: \"First Name,Last Name,Email,User Login,Password\". Please correct before re-running script. Exiting." | tee -a ${logfile}
        exit
    fi

    local firstname=$(echo "${inputfilefirstrecord}" | cut -d',' -f1)
    local lastname=$(echo "${inputfilefirstrecord}" | cut -d',' -f2)
    local email=$(echo "${inputfilefirstrecord}" | cut -d',' -f3)
    local userlogin=$(echo "${inputfilefirstrecord}" | cut -d',' -f4)
    local password=$(echo "${inputfilefirstrecord}" | cut -d',' -f5)

    if [[ "${firstname}" == "" ]]
    then
        echo "The first record of file ${inputfile} contains an empty first name. Please correct before re-running script. Exiting." | tee -a ${logfile}
        exit
    elif [[ "${lastname}" == "" ]]
    then
        echo "The first record of file ${inputfile} contains an empty last name. Please correct before re-running script. Exiting." | tee -a ${logfile}
        exit
    elif [[ "${email}" == "" ]]
    then
        echo "The first record of file ${inputfile} contains an empty email address. Please correct before re-running script. Exiting." | tee -a ${logfile}
        exit
    elif [[ "${userlogin}" == "" ]]
    then
        echo "The first record of file ${inputfile} contains an empty user login. Please correct before re-running script. Exiting." | tee -a ${logfile}
        exit
    elif [[ "${password}" == "" ]]
    then
        echo "The first record of file ${inputfile} contains an empty password. Please correct before re-running script. Exiting." | tee -a ${logfile}
        exit
    fi
}

validateInput()
{
    if [ ! -f "${inputfile}" ]
    then
        echo "Could not locate required file ${inputfile}" | tee -a ${logfile}
        echo "Syntax: addusers.sh FILENAME [resetPassword=true|false]" | tee -a ${logfile}
        echo "Exiting now." | tee -a ${logfile}
        exit
    fi

    if [ ! -z "$(tail -c 1 "${inputfile}")" ]
    then
        echo "No newline found at end of file ${inputfile}. Adding newline to end of file." >> ${logfile}
        echo "" >> ${inputfile}
    fi

    validateInputFile

    if [[ "${resetpasswordvalue}" != "" ]]
    then
        resetpasswordvalue=$(echo "${resetpasswordvalue}" | cut -d'=' -f2)
    else
        resetpasswordvalue="true"
    fi
}

processInputFile()
{
    echo "Running: EPMAutomate login ${adminusername} ${adminpassword} ${url}" | tee -a ${logfile}
    ${epmautomatescript} login ${adminusername} ${adminpassword} ${url} >> ${logfile}
    while read line
    do
        firstname=$(echo "${line}" | cut -d',' -f1)
        lastname=$(echo "${line}" | cut -d',' -f2)
        email=$(echo "${line}" | cut -d',' -f3)
        username=$(echo "${line}" | cut -d',' -f4)
        password=$(echo "${line}" | cut -d',' -f5)

        if [[ "${firstname}" != "First Name" ]]
        then
            echo "Creating add users file: ${addusersfile}" | tee -a ${logfile}
            echo "First Name,Last Name,Email,User Login" > ${addusersfile}
            echo "${firstname},${lastname},${email},${username}" >> ${addusersfile}
        else
            continue
        fi

        echo "Contents of add users file:" >> ${logfile}
        cat ${addusersfile} >> ${logfile}
        echo "Running: EPMAutomate uploadFile ${addusersfile}" | tee -a ${logfile}
        ${epmautomatescript} uploadFile ${addusersfile} >> ${logfile}
        echo "Running: EPMAutomate addUsers ${addusersfile} userPassword=${password} resetPassword=${resetpasswordvalue}" | tee -a ${logfile}
        ${epmautomatescript} addUsers ${addusersfile} userPassword=${password} resetPassword=${resetpasswordvalue} >> ${logfile}
        echo "Running: EPMAutomate deleteFile ${addusersfile}" | tee -a ${logfile}
        ${epmautomatescript} deleteFile ${addusersfile} >> ${logfile}
    done < ${inputfile}

    echo "Running: EPMAutomate logout" | tee -a ${logfile}
    ${epmautomatescript} logout >> ${logfile}
}

init
date | tee ${logfile}
echo "Addusers script started" | tee -a ${logfile}
validateInput
processInputFile "${inputfile}"
coda
echo "Addusers script completed" | tee -a ${logfile}
date | tee -a ${logfile}