Scripting en Sistemas Operativos
Scripting en Sistemas Operativos
Caso práctico
En un avance en el conocimiento de los administradores de equipos, el departamento de informática afronta cómo
formar a los componentes del departamento para capacitarles en la creación de guiones o scripts en los distintos
equipos, y con distintos sistemas operativos que tenemos en la empresa.
Vindio y Laro han demostrado altos conocimientos en administración de servidores. Sobre todo Vindio en
administración de servidores de libre distribución GNU/Linux, y Laro en servidores de la factoría Microsoft (Windows
Server).
Todos están de acuerdo en que son las personas más adecuadas para formar al departamento en el diseño, e
implementación según necesidades de programas scripts o guiones a implantar y según las necesidades en equipos
Windows o GNU/Linux.
Alain Bachellier (CC BY-NC-SA)
Laro y Vindio deciden reunirse para recopilar toda la información disponible y seguir unas pautas para realizar las
ponencias.
En esta unidad de trabajo aprenderás conceptos importantes, como integrar programas de scripting en sistemas operativos de distinta factoría.
Con esta unidad se pretende que conozcas los conceptos propios sobre integración de comandos y variables de entorno en su variante de programas de
scripting en sistemas operativos tanto propietarios, por ejemplo Windows, como libres, por ejemplo GNU/Linux.
Caso práctico
Vindio y Laro se ponen manos a la obra. ¿Cómo? Actualizando sus conocimientos empezando por los nuevos entornos
shell que existen.
Lo primero que afrontarán es cómo entender el entorno de trabajo de los distintos scripts o guiones, tanto en Windows
como en GNU/Linux.
Shell , es el término usado en informática para referirse a un intérprete de comandos, el cuál consiste en la interfaz de usuario
tradicional a través de consola o llamado también "terminal". Normalmente utilizará órdenes o comandos propios del sistema así
como instrucciones de un lenguaje de programación en modo intérprete. Mediante las instrucciones que aporta el intérprete, el
usuario puede comunicarse con el núcleo y por extensión, ejecutar dichas órdenes, así como herramientas que le permiten
controlar el funcionamiento del ordenador. Los comandos que aportan los intérpretes, pueden usarse a modo de guión si se
escriben en ficheros ejecutables denominados shell-scripts en GNU/Linux o batch en Windows, de este modo, cuando el
usuario necesita hacer uso de varios comandos o combinados de comandos con herramientas, escribe en un fichero de texto
marcado como ejecutable, las operaciones que posteriormente, línea por línea, el intérprete traducirá al núcleo para que las lleve a
cabo.
Para acceder a realizar tareas de shell, como comandos u órdenes, debemos habilitar un terminal.
¿Cómo se hace? Bien, depende del sistema operativo que utilicemos. En Windows podremos utilizar la orden powershell en la
opción de ejecutar programa, y obtendremos una imagen similar a la que tenemos un poco más abajo.
Kahlil88 (GNU/GPL)
En el caso de distribuciones GNU/Linux accedemos a la terminal a través del menú o bien cambiando de terminal. ¿Cómo?
Mediante la combinación de teclas <ctrl><alt><Fn> (sustituyendo Fn por la terminal a la que queramos acceder; por ejemplo: F1
terminal 1, F2 terminal 2, etc.).
Actualmente Microsoft trabaja con Powershell. Un sistema shell más potente con su propio lenguaje de programación y
entorno gráfico de desarrollo.
También tenemos que tener presente que Microsoft está potenciando mucho la integración del subsistema WSL dentro de
Windows, tanto en servidores como en clientes; y una herramienta clave en ese sentido es Windows Terminal, que integra
en pestañas los distintos shell que haya instalados en el sistema: símbolo del sistema, Powershell, bash de WSL, etc.
GNU/Linux:
Tenemos diversos intérpretes (sólo los más utilizados en GNU/Linux): sh (Bourne shell), bash (Bourne-Again shell), ksh
(Korn shell) y zsh (Z shell).
Windows:
Cmd es el más conocido y puede interpretar scripts o guiones realizados en ficheros Batch (extensión BAT), o Visual Basic Scripts (extensión VBS).
En el siguiente enlace tenemos todos los comandos que se pueden ejecutar utilizando la línea de comando de Windows.
A día de hoy, Powershell está siendo adoptado como intérprete de comandos principal en todos los sistemas Windows.
Mucho más potente y con herramienta de edición y depurador incluidos.
En la imagen de la derecha se muestra el editor que incorpora y que tiene como ventaja la depuración o prueba de un
comando para su inserción en el script, Powershell ISE.
Powershell en la Wikipedia
Caso práctico
Siguiendo con la dinámica de preparación de documentación por parte de Laro y Vindio, estos revisan la sintaxis y
estructura de las distintas instrucciones de los lenguajes de scripts que se utilizarán en las distintas ponencias.
El intérprete de comandos o "shell" es también un lenguaje de programación completo. La programación de shell se usa mucho para realizar tareas repetidas
con frecuencia y que no requieren programas complejos. Los administradores de sistemas suelen escribir programas o aplicaciones en el lenguaje de base del
sistema operativo por razones de rapidez y eficiencia.
Como todo lenguaje, debe cumplir con unos requisitos tales como emplear la sintaxis correcta, que no tenga errores, no sólo sintácticos sino también lógicos.
Ese tipo de lenguaje de programación consta de órdenes. Órdenes que, generalmente, podremos usar directamente en un entorno tipo terminal. Y aparte de
estas órdenes, disponemos de instrucciones con una estructura que nos permite jugar con las órdenes del sistema.
Estructuras del lenguaje script para los distintos tipos de shell en GNU/Linux
Otro recurso interesante que introduce en la estructura shell en Windows (cmd) y en GNU/Linux.
Autoevaluación
¿Qué entendemos por "shell"?
Sí fenomenal, es cierto.
Solución
1. Opción correcta
2. Incorrecto
3. Incorrecto
4. Incorrecto
Sabemos que todo lenguaje de programación tiene distintas maneras de guardar información o datos a medida que se va
generando. Los datos en memoria se almacenan en variables. Bien, estas variables pueden generarse en el propio programa o
bien pueden pasarse como parámetros al programa o bien, en el caso de scripting, puede utilizar las variables de entorno que
usa el sistema operativo.
¿Qué son las variables? Es el nombre interno que le damos a una porción de memoria donde almacenamos un dato.
Y, ¿una variable de entorno? Una variable de entorno es un objeto designado para contener información usada por una o más Windows 10 (Elaboración propia)
aplicaciones. Algunos usuarios encuentran esto un poco extraño o inmanejable. Sin embargo esto no es cierto: usando
variables de entorno hace que cualquiera pueda cambiar una opción de configuración para una o más aplicaciones fácilmente.
En Windows, podremos observar las variables de entorno por defecto en las claves de registro
HKEY_CURRENT_USER\Environment y del sistema en HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Environment. No obstante, igual
que en GNU/Linux, podemos leer todas las variables de entorno de nuestro equipo ejecutando, mediante Powershell, el cmdlet Get-ChildItem Env:, o
manejando directamente la variable $env.
En GNU/Linux
Si ejecutamos set obtendremos todas las variables de entorno del sistema.
Federico Martínez Pérez (Elaboración propia)
Debes conocer
Manejo de variables en los sistemas Windows y GNU/Linux.
Autoevaluación
¿Los scripts pueden utilizar y manipular las variables de entorno?
Sí, pero deben asignársela a una variable propia del programa.
No, sólo se utilizan como información al usuario.
Sí, si lo pasamos como parámetro al programa de script.
Sí, se pueden utilizar y manipular.
Respuesta incorrecta, los scripts actúan como instrucciones del sistema operativo, no lo olvidemos.
Solución
1. Incorrecto
2. Incorrecto
3. Incorrecto
4. Opción correcta
Autoevaluación
¿En GNU/Linux podemos usar variables de entorno?
Sí.
Sí, pero solo el usuario root.
No, solo en sistemas operativos de Microsoft se pueden utilizar este tipo de variables.
Solución
1. Opción correcta
2. Incorrecto
3. Incorrecto
4. Incorrecto
Hemos visto cómo trabajar con las variables del sistema, pero no es la única forma que tenemos de intercambiar datos con nuestros
scripts. En muchas ocasiones, sabemos que los comandos del sistema reciben parámetros que modifican su ejecución: bien ficheros
desde los que reciben datos, ficheros para almacenar resultados, u opciones que modifican la ejecución del comando. Esto, por
supuesto, se aplica también a los scripts que nosotros mismos creamos.
Debes conocer
Puedes aprender todo acerca de los parámetros en scripts de Bash en el siguiente enlace:
En este otro enlace, tienes una introducción resumida a Powershell y al uso de parámetros en sus scripts:
Scripting en Powershell
Aunque no suele usarse dentro de los scripts, sino para complementar su funcionamiento, la redirección y
las llamadas tuberias o "pipelining" , así como los filtros de formato y contenido son tremendamente
necesarios para trabajar con la shell.
El primero, awk, es una herramienta muy poderosa: tiene todo un lenguaje de programación para procesar texto. Suele usarse para extraer información de
la salida de datos, pero sirve para procesar datos de formas muy diversas.
El segundo, sed, es un editor de texto no interactivo. Es perfecto para modificar ficheros de configuración sobre la marcha, por ejemplo, o buscar y
reemplazar caracteres sobre un fichero.
Debes conocer
En los siguientes enlaces, tenemos información abundante sobre lo que hemos visto en este punto sobre Bash.
Canalización en Powershell
Bucles y estructuras repetitivas: Nos permiten repetir un número determinado de veces operaciones: recorrer matrices o ficheros, realizar funciones
matemáticas iterativas...
Estructuras condicionales: nos permiten establecer condiciones a la hora de ejecutar partes del código: hacer una cosa u otra según una operación
resulte, por ejemplo, positiva o negativa, etc.
Debes conocer
En el siguiente enlace tenemos información sobre estructuras repetitivas en Bash:
Ciclos en Bash
Caso práctico
Uno de los inconvenientes con los que se encontrarán los desarrolladores de scripts o guiones, comentan Vindio y Laro,
será saber cómo pueden depurar los distintos lenguajes de scripts que deberán utilizar.
Deciden, de común acuerdo, revisar su documentación e intentar actualizarla mediante visitas virtuales a los
desarrolladores de las herramientas a través de Internet.
¿Cómo crearemos un programa de scripting en GNU/Linux o en Windows? Bien, para realizar un programa interpretado no necesita grandes herramientas de
diseño. En Windows podremos utilizar el bloc de notas (notepad) y en GNU/Linux podemos usar herramientas de procesador de textos como nano, vi o
herramientas gráficas como gedit, aunque por supuesto es posible usar algún otro editor con elementos de ayuda adicionales.
En el caso de Windows los archivos de script de la antigua línea de comando utilizarán una extensión, .bat, o.cmd. Es decir, un programa que llamamos
"direccionar" lo guardaríamos como "direccionar.bat". Simplemente con colocar la extensión, el programa adquiere la categoría de ejecutable.
Con Powershell , utilizaremos su propio entorno de desarrollo, Powershell ISE, una herramienta integrada muy completa. Los scripts se almacenan con la
extensión .ps1. Para su ejecución, de forma similar a GNU/Linux, tenemos que usar el nombre del shell delante; por ejemplo, un script llamado
direccionar.ps1 tendría que invocarse para su ejecución de la siguiente manera: powershell -f direccionar.ps1. También es importante recordar en
Powershell que, por defecto, la ejecución de nuestros scripts está desactivada por motivos de seguridad: los scripts son una forma muy directa y potente de
acceder a los recursos del sistema, y es importante saber qué se está haciendo en cada momento.
Para activar la ejecución de nuestros scripts locales, basta con ejecutar el siguiente comando:
Set-ExecutionPolicy RemoteSigned
En el caso de GNU/Linux no requiere extensión pero suele utilizarse una extensión más bien por reconocimiento a simple vista más que como imprescindible.
La extensión que suele utilizarse es ".sh". Siguiendo con el ejemplo anterior sería "direccionar.sh". En GNU/Linux, las extensiones no tienen la importancia
que tienen en Windows; el script podría tener otra extensión, o ninguna, y seguiría siendo igual de válido.
Para ejecutar un programa en el shell de GNU/Linux debemos realizarlo con la orden sh. Por ejemplo: sh direccionar.sh.
Podemos, también, cambiarle las propiedades al programa y le añadimos la propiedad de ejecutable al programa con la orden chmod. En ese caso, podríamos
ejecutar directamente el fichero, indicando su ubicación dentro del árbol de directorios. Lo más sencillo es situarnos en la misma carpeta donde esté
almacenado y ejecutarlo desde ahÍ: ./direccionar.sh.
En GNU/Linux, al existir diversas shell, es conveniente utilizar la primera línea para indicar la shell que utilizará el programa.
Cuando tenemos un shell script o fichero por lotes grande y observamos, en su ejecución, que está fallando, normalmente empleamos el comando "echo" para
imprimir una traza y ver por donde se queda el script.
Sin embargo, para depurar el código, el comando sh que utilizamos para "lanzar" un guión tiene un parámetro que nos permite visualizar los movimientos del
guión, el valor de sus variables, etc.
Es importante disponer de una herramienta que podamos utilizarlo de " debugger" y seguir, paso a paso, la
ejecución del script. De esta manera, podremos comprobar el código de funciones y/o subrutinas inspeccionando el
valor de cada una de las variables.
Hay muchas herramientas de este tipo, pero estos últimos años ha destacado una en particular: VisualStudio Code.
Admite montones de extensiones que le permiten trabajar con múltiples lenguajes, tanto como editor simple como en
modo de depuración. Como gran ventaja, nos permite trabajar con scripts tanto de Bash u otras shell de GNU/Linux,
como con Powershell, y funciona en sistemas Windows y GNU/Linux exactamente igual.
Debes conocer
Depuración en GNU/Linux
Depuración de un programa es el proceso de identificar y corregir los errores de programación que se generan en su construcción.
En inglés se le conoce como debugging, ya que se asemeja a la eliminación de bichos (bugs), manera en que se conoce informalmente a los
errores de programación.
Se dice que el término bug proviene de la época de las computadoras de válvulas de vacío, en las cuales los problemas se generaban por los
insectos que eran atraídos por las luces y estropeaban el equipo.
Depurar el código sirve para ver como se ejecuta paso por paso el script o programa, qué valores toman sus variables, si se ha cometido un fallo y
saber en qué parte del código ha ocurrido, etc. No es algo que se deba hacer obligatoriamente con cada script que se programe, pero facilita
mucho a la hora de buscar los problemas que surgen a la hora de programar.
Por ejemplo:
# Este script visualiza quien eres y el directorio en el que se encuentra
#!/bin/bash -x
echo "Fecha y hora: `date`"
echo
echo "Tu usuario es: `whoami` \\n"
echo "Tu directorio actual es: \\c"
pwd
o
sh –x horayquiensoy.sh argumento1 argumento2 argumentoN
Del mismo modo, volvemos a comentar que Visual Studio Code incluye herramientas para programar y depurar shell scripts en GNU/Linux.
Depuración en Windows
En archivos bat o cmd (Windows) no existe un depurador como tal. Sí que podemos utilizar nuestro ingenio para generar mensajes durante la
ejecución para comprobar el buen funcionamiento del programa de script.
Podemos utilizar su propio entorno de edición como sistema de ventanas y depuración, Powershell ISE.
Como ya dijimos antes, Visual Studio Code también lleva herramientas para trabajar fácilmente con Powershell. En el siguiente enlace, explica
cómo.
Documentación de Microsoft sobre el uso de Visual Studio Code para desarrollar scripts de Powershell
Autoevaluación
Para ejecutar un script en GNU/Linux desde un terminal debe…
Tener la extensión sh.
Es suficiente que contenga la primera línea #!/bin/bash.
Con la instrucción sh script o cambiando los derechos del script.
Con la instrucción sh script y cambiando los derechos del script.
Solución
1. Incorrecto
2. Incorrecto
3. Opción correcta
4. Incorrecto
Autoevaluación
Sólo Windows necesita una extensión para identificar los scripts. ¿Verdadero o falso?
Verdadero.
Falso.
Muy bien, has visto que hay diferencias entre Windows y GNU/Linux.
Solución
1. Opción correcta
2. Incorrecto
Autoevaluación
¿Cuándo se puede utilizar, en GNU/Linux, extensiones de archivo?
Nunca.
No son necesarias, pero el usuario puede utilizarlas como referencia.
Solo si son scripts o guiones, por ejemplo documentos html.
Solución
1. Incorrecto
2. Opción correcta
3. Incorrecto
Caso práctico
A diferencia de GNU/Linux, Windows mantiene una base de datos llamada registro, comenta Laro. Con lo cual, Vindio se
salva de esta parte de ponencia.
Vindio comenta, sonriendo, que es una de las causas por las que prefiere GNU/Linux.
Del mismo modo, Vindio le comenta a Laro si tiene en cuenta que Windows tiene un sistema de extensiones de
comandos que permite interactuar de forma más completa con el sistema operativo.
A lo que responde Laro que ya lo tenía valorado. Contará cómo afecta al sistema, dónde encontrarlo en el registro y
como habilitarlo a través de scripts.
Los sistemas operativos Windows tienen diferencias estructurales con respecto a GNU/Linux. Una de las más importantes es el uso de una base de datos
ordenada por tablas Hash, el registro , que almacena toda la información del sistema; GNU/Linux no tiene nada parecido.
Para la línea de comando, existen las llamadas extensiones de comandos , que amplían la funcionalidad de las órdenes utilizadas en la shell y los
scripts.
Powershell permite la ampliación del lenguaje utilizando los llamados módulos , a modo de librerías del lenguaje, que aportan nuevos cmdlets,
funcionalidades y objetos.
¿Cómo sabemos que está habilitado? Si revisamos el registro y accedemos a la variable de registro HKEY_CURRENT_USER\Software\Microsoft\Command
Processor\EnableExtensions o HKEY_LOCAL_MACHINE\Software\Microsoft\Command Processor\EnableExtensions.
¿Quieres un ejemplo? Utilizamos el comando SET para crear nuevas variables de entorno y probamos si podemos aplicar lo asignado.
C:\>SET micasa=C:\Documents and Settings\sirio
C:\>CD %micasa%
C:\Documents and Settings\sirio>
Z:\>SET m=ping -n 1 www.madrid.org
Z:\>%m%
Haciendo ping a www.madrid.org [195.77.128.9] con 32 bytes de datos:
Vamos a indicar como habilitar las extensiones de comandos si éstas no están habilitadas. Esto se realiza con el flag o bandera enableextensions.
#Nombre archivo: tail.cmd
#Utilización: tail archivo número de líneas.
#Ejemplo: tail prueba.txt 3
@echo off
setlocal ENABLEEXTENSIONS
if {%2} == {} (set "lines=%1") else set "lines=%2"
for /f %%a in ('find /c /v "" ^< %1') do set /a skip=%%a-lines
for /f "delims=" %%a in ('more /e +%skip% ^< %1') do (
echo %%a
)
Los módulos hacen falta, por ejemplo, para trabajar con Directorio Activo directamente con Powershell. Los comandos asociados a AD en Powershell se
encuentran almacenados en el módulo "Active Directory", y es posible que haya que instalarlo para poder hacer uso de ellos.
El cmdlet Get-Module nos muestra los módulos que tenemos instalados, y con Import-Module podemos importar los que necesitemos.
Debes conocer
En este enlace, podemos aprender a trabajar con los módulos de Powershell: importarlos, quitarlos, buscar los disponibles...
Primero de todo, hay que comentar que sólo el sistema operativo Windows, en sus distintas versiones, mantiene una base
de datos que almacena las configuraciones y opciones en sus versiones de 32 bits, 64 bits y Windows Mobile.
El registro de Windows mantiene una información y configuración de todo el hardware, software, usuarios y preferencias del
equipo. Esta información se mantiene jerarquizada.
En este otro enlace, vemos cómo trabajar con el registro de Windows desde Powershell
Sabemos que accedemos al registro mediante las órdenes regedit.exe o regedt32.exe. ¿Pero podemos acceder a dicho registro mediante un fichero de
script? Sí, podemos.
¿Cómo podemos acceder al registro? Pondremos un ejemplo para que se entienda bien. Queremos conocer la ruta de acceso a los programas mediante un
script escrito en Powershell:
Autoevaluación
GNU/Linux utiliza, como motor de base de datos de registro, Mysql. ¿Verdadero o falso?
Verdadero.
Falso.
Solución
1. Incorrecto
2. Opción correcta
Caso práctico
Siguiendo con el enfoque práctico por parte de Vindio y Laro, quieren plantear situaciones en las que puede ser
interesante tener un pequeño programa hecho en script para realizar alguna tarea sencilla y cotidiana que permita ver
el alcance y potencia que pueden llegar a tener este tipo de programas de scripts.
¿Qué entendemos por tareas administrativas? Son aquellas que se realizan de forma repetitiva o rutinaria pero, podríamos llamarlo así, obligatorias. Un
ejemplo, realizar copias de seguridad de un dispositivo de almacenamiento masivo a otro. Podemos hacerlo de forma manual, escribiendo los comandos con
sus parámetros correspondientes o bien realizamos un script o guión que realice esas tareas de forma automática. Si a esto añadimos una tarea programada,
prácticamente nos despreocupamos de realizar la tarea, sólo nos queda comprobar si se ha realizado correctamente.
En cualquier sistema informático se deben realizar, con cierta periodicidad, determinadas acciones o tareas (algunas de ellas, internas del sistema operativo;
otras definidas por el administrador; e incluso algunas, definidas por un usuario, con los privilegios adecuados). Por lo tanto, todas aquellas tareas que se
ejecuten de forma periódica se denominan tareas programadas.
La programación de tareas permite programar la ejecución de un determinado programa en un momento concreto. Por ejemplo, se puede programar una copia
de seguridad, enviar un fichero, comprobar la seguridad del sistema, enviar un informe, etc.
Algunas de las ventajas que se obtienen de estas tareas programadas son las siguientes:
Automatización de la gestión del sistema con la finalidad de que se lleven a cabo a pesar de posibles olvidos o descuidos por parte del administrador
Se ejecutan en un momento preciso (día y hora)
Ayudan o detectan situaciones de error
Facilitan el control del sistema
Posibilidad de creación de tareas personalizadas por cada usuario
Existen muchas funcionalidades que se pueden llevar a cabo mediante tareas programadas, entre las que se encuentran las siguientes:
Pongamos un ejemplo de tarea administrativa asociada al arranque del sistema. Los usuarios necesitan varias unidades lógicas y, a través del perfil del usuario,
sólo permite una unidad. Entonces necesitamos un script que realice esta tarea. Utilizaremos un script .ps1 y lo colocaremos en la carpeta
C:\Windows\SYSVOL\domain\scripts, para que se ejecute en el arranque del sistema.
Este script, que ha de ser invocado por el superusuario, es capaz de montar una unidad remota de Samba en una carpeta local, a nombre del usuario indicado.
Nos pedirá la contraseña, pero también se la podemos pasar a través de un archivo oculto con las credenciales, y pasarle el nombre de usuario por argumento
en lugar de que sea siempre "usuario1". Es una versión muy simple, y admite muchas mejoras.
Una de las grandes ventajas del uso de scripts, es que no hay que realizar ningún tipo de adaptación de nuestro sistema para poder ejecutarlos. Eso sí, los
permisos y privilegios del programa deben ser adecuados a la tarea que deben realizar. ¿Qué queremos decir? Pongamos un ejemplo que lo clarifique. Si una
tarea la debe realizar el supervisor del equipo, el sistema asume la autoría como del supervisor independientemente de quién sea el usuario propietario del
programa en sí. Ahora bien, si el programa tiene como propietario al supervisor, ningún usuario deberá poder ejecutarlo. Por ejemplo, un apagado planificado, o
una actualización, son tareas que sólo puede ejecutar el administrador del sistema, y no cualquier usuario, y eso tendremos que tenerlo en cuenta.
En algunos scripts, será necesario comprobar si el usuario que los está utilizando es el administrador o no, antes de poner en marcha las tareas; por ejemplo,
una actualización del sistema, un apagado o reinicio del servidor..
En Windows Powershell
Powershell nos permite hacer esto de una forma muy sencilla. Basta con incluir la siguiente línea al principio del script, y ella se encarga de salir y dar un
mensaje descriptivo si el usuario que invoca el script no es el administrador:
#Requires -RunAsAdministrator
También podemos usar un método más manual, y crear un script expresamente para ello.
# Código reutilizable
function Test-Administrator
{
[OutputType([bool])]
param()
process {
[Security.Principal.WindowsPrincipal]$user = [Security.Principal.WindowsIdentity]::GetCurrent();
return $user.IsInRole([Security.Principal.WindowsBuiltinRole]::Administrator);
}
}
if(-not (Test-Administrator))
{
# Aquí pondremos el código oportuno para mostrar el mensaje de error que estimemos oportuno
Write-Error "Este script debe ser ejecutado por el usuario Administrador.";
exit 1;
}
$ErrorActionPreference = "Stop";
En GNU/Linux Bash
En Bash, también podemos comprobar fácilmente si el usuario que ha ejecutado el script es root o no, y actuar en consecuencia. Un ejemplo de código válido
para ello sería el siguiente:
#!/bin/bash
if [[ $(id -u) -ne 0 ]] ; then
echo "Este script debe ser ejecutado por el usuario root"
exit 1
fi
Debes conocer
En este sitio de Microsoft tienes un buen montón de scripts de Powershell para realizar tareas administrativas de ejemplo; principalmente, gestión
de procesos, servicios y equipos.
Caso práctico
Laro y Vindio quieren afrontar y enfocar, en sus respectivas ponencias, cómo acceder a los directorios activos de los
sistemas operativos: en Windows con el Active Directory y en GNU/Linux con LDAP.
Una de las tareas administrativas más importantes para llevar a cabo es la administración y gestión de directorios, bien sea
Directorio Activo de Microsoft o OpenLDAP de GNU/Linux, que son los dos que hemos visto en este curso.
Algunas tareas repetitivas de las que se llevan a cabo con esos directorios, como pueden ser instalación de estos servicios,
copia de seguridad de los objetos, búsquedas, migraciones, actualizaciones de datos... pueden ser implementadas en
scripts, con el consiguiente ahorro de tiempo que ello conlleva.
Otro ejemplo. Este script está realizado en Powershell y genera varios usuarios en la unidad organizativa "remotos".
#Empezaremos importando el Módulo de Active Directory
Import-Module ActiveDirectory
#Aquí le teclearemos la Ruta donde se encuentra el Fichero *.CSV que contendrá los datos de los usuarios
[String]$Ruta = Read-Host “Trayectoria donde se Localiza el archivo USUARIOS.csv”
#En la siguiente sentencia le indicamos que vamos a usar una Unidad Organizativa llamada “remotos” en el Dominio Actual dentro de Active Directory
$ou=”OU=remotos” + “,” + (Get-ADDomain).DistinguishedName
$dominio=(Get-ADDomain).DNSRoot
#Importamos el Fichero CSV y posteriormente creará los Usuarios dentro del Dominio Actual y de la UO creada anteriormente. Aquí también vinculamos
Import-Csv -Path $Ruta | foreach-object {$UPN = $_.CUENTA + “@” + “$dominio”
New-ADUser -SamAccountName $_.CUENTA -UserPrincipalName $UPN -Name $_.NOMBRE -DisplayName $_.NOMBRE -SurName $_.APELLIDOS -GivenName $_.NOMBRES -D
Previo a la creación del script, es necesario crear un fichero con los datos de estos nuevos usuarios que vamos a introducir, un fichero .csv. Esta forma de
trabajar es muy común cuando trabajamos con scripts. En el siguiente enlace, se explica cómo crear un fichero adecuado para este script, y más datos sobre su
uso:
En el caso de GNU/Linux existen diversas formas de crear programas de scripts para tareas administrativas, y esto incluye gestión
de cuentas de usuario, o del directorio LDAP.
PHOTO=/tmp/tux.jpg
IFS=$'\n'
Debes conocer
En este enlace, encontramos desarrollado y bien documentado un script que sirve para crear usuarios nuevos en LDAP. Podemos encontrar
muchos ejemplos de este tipo en Github.