Mostrando entradas con la etiqueta PowerShell. Mostrar todas las entradas
Mostrando entradas con la etiqueta PowerShell. Mostrar todas las entradas

miércoles, 23 de octubre de 2013

Sacar información de un fichero .csv con PowerShell

Tenemos un fichero csv llamado ficheroCSV.csv con la siguiente información:
Imaginemos que queremos sacar por ejemplo el email de cada uno:
$lineas = Import-Csv C:\Users\Administrador\Desktop\ficheroCSV.csv
foreach ($registro in $lineas) {
 Write-Output "El email es: " $registro.email
}

# fin del programa

Ahora tenemos un fichero csv llamado ficheroCSV2.csv con la siguiente información:
Imaginemos que queremos toda la información de cada registro y además el email repetido:
$contenidos = Get-Content C:\Users\Administrador\Desktop\ficheroCSV2.csv
Write-Output "Total líneas: " $contenidos.Length

foreach ($linea in $contenidos) {
 Write-Output $linea
 $registro = $linea.Split(",")
 Write-Output "El email es: " $registro[2]
}

# fin del programa

Espero que os haya gustado.
Un saludo

lunes, 21 de octubre de 2013

Información de control de acceso con PowerShell

Acceder a la información sobre el control de acceso de un recurso compartido con PowerShell. Luego cambiaremos el control de acceso sobre ese mismo elemento usando Set-Acl.

1- Obtener la información
$contenido = Get-Acl C:\compartidas | Format-List *
$contenido > C:\Users\Administrador\Desktop\infoControlDeAcceso.txt

# fin del programa

2- Cambiar el control de acceso
$acl1 = Get-Acl C:\compartidas
$permisos = New-Object System.Security.AccessControl.FileSystemAccessRule "nombre_usuario","FullControl","Allow"
$acl1.SetAccessRule($permisos)
$acl1 | Set-Acl C:\compartidas

# fin del programa

Espero que os sirva de ayuda.
Un saludo.

viernes, 18 de octubre de 2013

Hacer una calculadora básica con PowerShell

Vamos a hacer una calculadora muy básica con PowerShell la cual solo tendra cuatro posibles operaciones: suma, resta, multiplicación y división. Para ello usaremos una función llamada "operar" a la que se pasaremos dos números y una operación.
# calculadoraBasica.ps1

function operar($valor1,$valor2,$op){
 switch ($op){
   1 { $result = $valor1 + $valor2 }
   2 { $result = $valor1 - $valor2 }
   3 { $result = $valor1 * $valor2 }
   4 { $result = $valor1 / $valor2 }
 }
 return $result
}

do{
 cls
 Write-Output "1. Sumar " 
 Write-Output "2. Restar" 
 Write-Output "3. Multiplicar" 
 Write-Output "4. Dividir"
 $opcion = Read-Host "¿Que desea hacer? "
 } while (($opcion -lt 1) -or ($opcion -gt 4))

 $num1 = Read-Host "Introduce un número: "
 $num2 = Read-Host "Introduce otro número: "

 $res = operar $num1 $num2 $opcion
 Write-Output "El resultado es: $res"

# fin del programa

Espero que os haya gustado.
Un saludo.

jueves, 17 de octubre de 2013

Ejercicios con funciones de PowerShell

1- Comprobar un DNI con PowerShell
function dniValido([string]$dni){
 if($dni -match "^[0-9]{8}[a-zA-Z]{1}$"){
  return $true
 }
 else{
  return $false
 }
}

$dni = Read-Host "Mete un DNI: "
if (dniValido $dni){
 Write-Output "Es válido."
}

2- Comprobar si es numero o no con PowerShell
function isNumeric ([string]$value){
 if($value -match "^(\-)?\d+(\.\d+)?$"){
  return $true
 }
 else{
  return $false
 }
}

$number = Read-Host "Mete un número: "
if (isNumeric $number){
 Write-Output "Es un número."
}

Espero que os haya gustado.
Un saludo.

Hacer funciones en PowerShell

En esta entrada vamos a ver como se hace funciones en PowerShell. Esta vez os voy a mostrar cuatro maneras diferentes de hacer funciones y como llamarlas.
1- Función simple
function mulNumbers{
 $num1 = 5
 $num2 = 10
 $res = $num1 * $num2
 Write-Output $res
}

#para llamar a la función
mulNumbers

2- Función simple con return
function mulNumbers0{
 $num1 = 5
 $num2 = 10
 return $num1 * $num2
}

#para llamar a la función
$resFunc = mulNumbers0
Write-Output $resFunc

3- Función con parámetros
function mulNumbers1($valor1,$valor2){
 $resultado = $valor1 * $valor2
 Write-Output $resultado
}

#para llamar a la función
mulNumbers1 5 10     # también se puede mulNumbers1 5,10
                     # también se puede mulNumbers1 -valor1 5 -valor2 10

4- Función con argumentos
function mulNumbers2{
 $resul = $args['0'] * $args['1']
 Write-Output $resul
}

#para llamar a la función
mulNumbers2 5 10     # también se puede mulNumbers2 5,10
Todas las funciones sacan el mismo resultado: 50
Espero que os haya servido de ayuda.
Un saludo.

miércoles, 16 de octubre de 2013

Ejercicios PowerShell

Ejercicio 4

2- Crea un cmdlet que recoja como parámetro un nombre de directorio. Verifica que ese directorio exista. Luego debes listar los contenidos del directorio ordenados por tamaño, y de cada elemento debes sacar el tamaño y el nombre.
# recogerParam.ps1
$nombreDir = $args[1]
$comprobar = Test-Path $nombreDir
if ($comprobar -eq $true){
    Get-ChildItem $nombreDir | Sort-Object size
}

3- Crea un cmdlet llamado CheckPorts que defina un array con los puertos que queremos que estén en listening. Ejecuta el comando para sacar los puertos y verifica que están abiertos los indicados en el array. Vete sacando un mensaje que indique qué puertos están correctamente en estado listening y cuáles no.
$ip = "127.0.0.1" # ip del host
$puertos = 20,21,22,23,24,25,80
$con = New-Object net.Sockets.TcpClient
foreach ($port in $puertos)
{
 try{
  $con.Connect($ip,$port)
  $con.Close()
  Write-Output "Puerto $port en listening."
 }
 catch{
  Write-Output "Puerto $port cerrado."
 }
}

# fin del programa

4- Crea un cmdlet llamado AlertDist que defina un array relacional con las unidades y el límite de capacidad. Debe ejecutarse un comando que saque el tamaño ocupado en las unidades y que nos avise si se ha superado el límite impuesto.
$unidades = Get-WmiObject Win32_logicaldisk | select -Property DeviceID,FreeSpace
foreach ($libre in $unidades){
 $id = $libre.DeviceID
 $espacio = $libre.FreeSpace
 Write-Output "La unidad $id tiene $espacio de espacio libre."
}

# fin del programa

5- Crea un cmdlet de PowerShell que defina un array relacional con usuarios. Los campos de cada elemento deben ser nombre_cuenta, nombre y password. El programa debe mantener ese array con un menú en el que se pueda:
-añadir
-eliminar
-buscar por nombre
-mostrar todos
Al crear uno nuevo deben solicitarse datos y el campo password debe ocultarse al escribir.
$alumnos = @{
              "juan" = @{ nombre_cuenta = "juan_20"; nombre = "juan"; password = "2345";};
              "eneko" = @{ nombre_cuenta = "eneko_23"; nombre = "eneko"; password = "3456";};
              "urko" = @{ nombre_cuenta = "urko_33"; nombre = "urko"; password = "4567";}
            }
do {
 Write-Output "---- MENU ----"
 Write-Output "1. Añadir alumno"
 Write-Output "2. Eliminar alumno"
 Write-Output "3. Buscar por nombre"
 Write-Output "4. Mostrar alumnos"
 Write-Output "5. Salir"
 $op = Read-Host "Selecciona opción: "
 switch ($op){
   1{
     Write-Output "Vas a añadir un alumno."
     $nombre = Read-Host "Introduce un nombre: "
     $nombre_cuenta = Read-Host "Introduce un nombre de cuenta: "
     $password = Read-Host "Introduce una contraseña: "
     $alumnoNuevo = @{ nombre_cuenta = $nombre_cuenta; nombre = $nombre; password = $password;}
     $alumnos = $alumnos + $alumnoNuevo
    }
   2{
     foreach ($alumno in $alumnos.GetEnumerator()){
      Write-Output $alumno.name
     }
     $opElim = Read-Host "Mete el nombre del que quieras eliminar: "
     $alumnos.Remove($opElim);
    }
   3{
     $opBuscar = Read-Host "Mete el nombre del que quieras buscar: "
     $sino = 0
     foreach ($alum in $alumnos.GetEnumerator()){
      if ($alum.name -eq $opBuscar){
       Write-Output "El usuario existe."
       $sino = 1
      }
     }
     if ($sino -eq 0){
      Write-Output "El usuario no existe."
     }
    }
   4{
     Write-Output "Alumnos existentes: "
     foreach ($alumno in $alumnos.GetEnumerator()){
      Write-Output $alumno.name
     }
    }
   5{ 
     Write-Output "Saliendo del programa..."
     exit
    }
   default{
     Write-Output "Opción incorrecta."
   }
  }
} while ($op -ne 4)

# fin del programa

martes, 15 de octubre de 2013

Arrays relacionales en PowerShell (Ejercicio extra)

Una variable contiene un único valor:
$numeroEntero = 12         # ejemplo de numero entero
$cadena = "Hola mundo!"    # ejemplo de cadena

Write-Output $cadena       # saca Hola mundo!

Un array contiene varios valores:
$esteArray = "Enero","Febrero","Marzo","Abril","Mayo","Junio","Julio","Agosto","Septiembre","Octubre","Noviembre","Diciembre"

Write-Output $esteArray[3] # saca Marzo

Un array relacional se construye de la siguiente manera:
$usuario = @{ name = "Barack Obama";
              login = "Barack_obama";}

Write-Output "Hola " $usuario.name

Ejemplo de un ejercicio con un array relacional:
$ordenador = @{marca = "HP";
               sistema_operativo = "Windows 7";
               procesador = "Intel Core i5";}

Write-Output "La marca del ordenador es:" $ordenador{"marca"} # también se puede con $ordenador.marca
Write-Output "El SO es: " $ordenador.sistema_operativo
Write-Output "El procesador es: " $ordenador{"procesador"}

Espero que os sirva de ayuda.
Un saludo.

Ejercicios PowerShell

Ejercicio 3

4- Desarrolla un cmdlet de powershell que defina un array de 10 nombres y los muestre por pantalla con un while, con un for y con un foreach.
# ejemploArrays1.ps1

$nombres = "Bustingorri","Arozarena","Urban","Pepin"
$nombres = $nombres + "Gandalf"

# ahora los hacemos con el for
for ($i = 0; $i -lt $nombres.Length; $i++){
 Write-Output $nombres[$i]
}

# ahora con el foreach
foreach ($jugador in $nombres){
 Write-Output $jugador
}

# ahora con el while
while ($i -lt $nombres.length){
 Write-Output $nombres[$i]
 $i++
}
5- Desarrolla un cmdlet de powershell que defina un array de 10 números inicializados a 0. A continuacíon haz un bucle (for o foreach) que inicialice el array con números enteros aleatorios entre 10 y -10. Debes investigar el cmdlet Get-Random para conseguir esos números. Una vez generado ese array debes hacer otro bucle for que contabilice cuántos números positivos, negativos e iguales a 0 hay en ese array.
# arrayNumeros.ps1
$positivo = 0
$negativo = 0
$cero = 0
$numeros = 0,0,0,0,0,0,0,0,0,0
foreach ($num in $numeros){
 $aleatorio = Get-Random -Maximum 10 -Minimum -10
 $numeros[$num] = $aleatorio
}

for ($i = 0; $i -lt $nombres.Length; $i++){
 if ($numeros[$i] -eq 0){
  $cero++
 }
 else{
  if ($numeros[$i] -lt 0){
   $negativo++
  }
  else{
   $positivo++
  } 
 }
}

Write-Output "Hay $cero ceros."
Write-Output "Hay $negativo negativos."
Write-Output "Hay $positivo positivos."
6- Desarrolla un cmdlet de Powershell que solicite al usuario un nombre de directorio. El cmdlet debe crear ese directorio y meterse en él. Una vez centro el cmdlet debe crear 10 directorios cuyo nombre debe ser un número aleatorio, y dentro de cada uno de ellos debe crear 10 ficheros de texto cuyo nombre debe ser un número aleatorio.
# crearDirectorio.ps1
[string]$cadena = $( Read-Host "Introduce un nombre de directorio para crear: " )
mkdir $cadena
cd $cadena
for ($i = 0; $i -lt 10; $i++){
 $nombreParaCarpeta = Get-Random 1000
 mkdir $nombreParaCarpeta
 cd $nombreParaCarpeta
 for ($j = 0; $j -lt 10; $j++){
  $nombreParaFichero = Get-Random 1000
  echo Hola > "$nombreParaFichero.txt"
 }
 cd..
}
7- Utilizando arrays y números aleatorios, desarrolla un cmdlet de powershell que genere contraseñas. Añádele parámetros para poder indicarle longitud concreta. Modifica el cmdlet 6 para que utilice este cmdlet.
# crearPassword.ps1
$abecedario = 'a','b','c','d','e','f','g','h','i','j','k','l','m','ñ','o','p','q','r','s','t','u','v','w','x','y','z','1','2','3','4','5','6','7','8','9','0','_','?','¿','*','A','B','C','D','E','F','G','H','I','J','K','L','M','Ñ','O','P','Q','R','S','T','U','V','W','X','Y','Z'
$contra = ""
$passwordLength = 20
for ($i = 0; $i -lt $passwordLength; $++){
 $j = Get-Random -Maximum 56 -Minimum 1
 $contra = $contra + $abecedario[$j]
}
Write-Output "Su contraseña es: $contra"
# FIN PROGRAMA
Espero que os haya gustado.
Un saludo.

jueves, 10 de octubre de 2013

Ejercicios PowerShell

Ejercicio 2

2- Crea un cmdlet de powershell que espere tres parámetros un llamado $primero que espere un [int], otro llamado $segundo que espere un String que si no se introduce debe solicitarlo al usuario. Una vez hecho el programa debe hacer un bucle for que muestre el valor de $segundo tantas veces como indique $primero.
# esperarTresParametros.ps1
param (
[int]$veces = 1,
[string]$cadena = $( Read-Host "Introduce el segundo parametro:")
Write-Output "Has metido $veces y $cadena"
for ($i = 0; $i -lt $veces; $i++){
   Write-Output $cadena
}
3- Crea un cmdlet de powershell llamado Get-España.ps1 con parámetros que permita indicar los puestos de un equipo de fútbol y luego los muestre. Algo así: Get-España.ps1 -portero 'Casillas' -defensa 'Sergio Rambo' -pivote 'Busquets' -medio 'Javier Alonso' -delantero 'Erroberto Gudari'
# Get-España.ps1
param (
[string]$portero = "Casillas",
[string]$defensa = "Sergio Rambo",
[string]$pivote = "Busquets",
[string]$medio = "Javier Alonso",
[string]$delantero = "Erroberto Gudari",
)
Write-Output "Portero: $portero"
Write-Output "Defensa: $defensa"
Write-Output "Pivote: $pivote"
Write-Output "Medio: $medio"
Write-Output "Delantero: $delantero"
4-

5-

martes, 8 de octubre de 2013

Ejercicios PowerShell

Ejercicio 1

Aquí vamos a hacer unos pequeños scripts de introducción a PowerShell.

1-
# saludo1.ps1
$saludo = "Buenas tardes"
$nombre = "Eneko"
Write-Output $saludo $nombre
2-
#saludo2.ps1
$saludo = $args[0]
$nombre = $args[1]
Write-Output $saludo $nombre
3-
# saludo3.ps1
$saludo = Read-Host "Introduce un saludo: "
$nombre = Read-Host "Introduce un nombre: "
Write-Output $saludo $nombre
4-
# aritmeticas.ps1
[int]$num1 = Read-Host "Introduce un numero: "
[int]$num2 = Read-Host "Introduce otro numero: "
$sum = $num1 + $num2
$res = $num1 - $num2
$mul = $num1 * $num2
$div = $num1 / $num2
Write-Output $sum
Write-Output $res
Write-Output $mul
Write-Output $div
5-
# compararNums.ps1
$num1 = Read-Host "Introduce un numero: "
$num2 = Read-Host "Introduce otro numero: "
if ( $num1 -eq $num2 ) {
Write-Output "Son iguales."
}
 if ( $num1 -gt $num2 ) {
Write-Output "El primer numero es mayor."
}
 if ( $num1 -lt $num2 ) {
Write-Output "El primer numero es menor."
}
6-
# fapFor.ps1
$fap = Read-Host "Introduce un numero: "
if ( $fap -gt 0 ) {
   for ( $i = 0 ; $i < $fap ; $i++ ) {
    Write-Output $fap
   }
}
7-
# entreUnoYCien.ps1
$cont = 0
do {
$num1 = Read-Host "Introduce un numero: "
$cont++
}while (($i -gt 0) -and ($i -lt 100 ))
if ( $cont -eq 0 ) {
   Write-Output "Campeon"
}
else
{
  for ( $i = 0 ; $i < $cont ; $i++ ) {
   Write-Output "Eres retrasado"
  }
}
8-

jueves, 3 de octubre de 2013

Primeros ejercicios - Comandos PowerShell

Ejercicio 6

0- Crear usuarios PowerShell
New-ADUser
-DisplayName:"Jack Bauer"
-GivenName:"Jack"
-Name:"Jack Bauer"
-Path:"CN=Users,DC=bernaldo,DC=evil,DC=lan"
-SamAccountName:"jack_bauer"
-Server:"pdc.bernaldo.evil.lan"
-Surname:"Bauer" -Type:"user"
-UserPrincipalName:"jack_bauer@bernaldo.evil.lan"

Set-ADAccountPassword
-Identity:"CN=Jack Bauer,CN=Users,DC=bernaldo,DC=evil,DC=lan"
-NewPassword:"System.Security.SecureString"
-Reset:$null -Server:"pdc.bernaldo.evil.lan"
Enable-ADAccount
-Identity:"CN=Jack Bauer,CN=Users,DC=bernaldo,DC=evil,DC=lan"
-Server:"pdc.bernaldo.evil.lan"

Set-ADAccountControl
-AccountNotDelegated:$false
-AllowReversiblePasswordEncryption:$false
-CannotChangePassword:$false
-DoesNotRequirePreAuth:$false
-Identity:"CN=Jack Bauer,CN=Users,DC=bernaldo,DC=evil,DC=lan"
-PasswordNeverExpires:$false -Server:"pdc.bernaldo.evil.lan"
-UseDESKeyOnly:$false

Set-ADUser
-ChangePasswordAtLogon:$true
-Identity:"CN=Jack Bauer,CN=Users,DC=bernaldo,DC=evil,DC=lan"
-Server:"pdc.bernaldo.evil.lan"
-SmartcardLogonRequired:$false
1- Crear grupos PowerShell
New-ADGroup
-Description:"Chicos buenos"
-GroupCategory:"Security"
-GroupScope:"Global"
-Name:"Good guys"
-Path:"CN=Users,DC=bernaldo,DC=evil,DC=lan"
-SamAccountName:"Good guys"
-Server:"pdc.bernaldo.evil.lan"
2- Agregando un grupo a otro (Evil wizards a Bad guys)
Add-ADPrincipalGroupMembership
-Identity:"CN=Evil wizards,CN=Users,DC=bernaldo,DC=evil,DC=lan"
-MemberOf:"CN=Bad guys,CN=Users,DC=bernaldo,DC=evil,DC=lan"
-Server:"pdc.bernaldo.evil.lan"
3- Agregar usuarios a un grupo (Jack Bauer y Bruce Wayne a Good guys)
Add-ADPrincipalGroupMembership
-Identity:"CN=Jack Bauer,CN=Users,DC=bernaldo,DC=evil,DC=lan"
-MemberOf:"CN=Good guys,CN=Users,DC=bernaldo,DC=evil,DC=lan"
-Server:"pdc.bernaldo.evil.lan"

Add-ADPrincipalGroupMembership
-Identity:"CN=Bruce Wayne,CN=Users,DC=bernaldo,DC=evil,DC=lan"
-MemberOf:"CN=Good guys,CN=Users,DC=bernaldo,DC=evil,DC=lan"
-Server:"pdc.bernaldo.evil.lan"
6-
::hola.bat
@echo off
echo %1
for /L %%i in (2,1,%2%) do (
   echo %1
)

::invocar.bat
@echo off
call hola.bat eneko 4
7-
::llamarlibreria.bat
@echo off
echo ¿Que quieres hacer?
echo 1- Crear carpeta
echo 2- Borrar carpeta
echo 3- Listar carpeta
echo 4- Copiar carpeta
echo.
choice /C 1234 /N /M "Selecciona uno: "
if errorlevel 4 call libreria.bat 4
if errorlevel 3 call libreria.bat 3
if errorlevel 2 call libreria.bat 2
if errorlevel 1 call libreria.bat 1

::libreria.bat
@echo off
if %1==1 goto crearCarpeta
if %1==2 goto borrarCarpeta
if %1==3 goto listarCarpeta
if %1==4 goto copiarCarpeta
:crearCarpeta
mkdir Nueva_Carpeta
echo Estoy en crear
goto final
:borrarCarpeta
rd /S Nueva_Carpeta
echo Estoy en borrar
goto final
:listarCarpeta
dir Nueva_Carpeta
echo Estoy en listar
goto final
:copiarCarpeta
copy Nueva_Carpeta C:\temp
echo Estoy en copiar
goto final
:final