Archivo

Archivo para la categoría ‘powershell’

Powershell–Guardar información en portapapeles

lunes, 20 de julio de 2015 Sin comentarios

Hola.

 

Hoy, en un script de powershell, he necesitado guardar cierta información en el portapapeles.

Conseguir esto no puede ser más fácil con el comando “clip”.

 

Un ejemplo práctico es el siguiente:

$user=”usuario”

$password=”pass”

$user,$password | clip

 

Al hacer CTRL+V podréis comprobar el resultado.

Saludos.

Categories: powershell Tags:

Recoger permisos de una ou con Powershell

miércoles, 1 de julio de 2015 Sin comentarios

 

Hola.

 

Son muchas las webs que lo indican sin embargo he visto que hay muchas instrucciones erroneas.

Para recoger los permisos que tiene una OU, la instrucción que finalmente me ha funcionado es:

 

Import-Module ActiveDirectory

Get-Acl -path "ad:\OU=Ejemplo,DC=domain,DC=local").access | select identityreference, accesscontroltype,activedirectoryrights | export-csv -Path c:\temp\OUPermisos.csv

Saludos.

Categories: powershell, scripting Tags:

Borrar usuarios en ad sin advertencia

miércoles, 1 de julio de 2015 Sin comentarios

 

Hola

Estoy trabajando en un simple script a través del cual he de borrar cuentas expiradas en AD.

Me he encontrado que el comando remove-aduser no tiene la opción –force por lo que cuando va a borrar un usuario, solicita confirmación y por tanto, no puedo automatizar el borrado de estas cuentas mediante una tarea programada.

Solución

Para las cuentas en las que no está prevista la utilización de la variable –force, podéis utilizar la variable –confirm:$false y con ello saltar la confirmación.

Script

El script es el siguiente:

Function ModuloAD{
    Try
    {
      Import-Module ActiveDirectory -ErrorAction Stop
    }
    Catch
    {
      Write-Host "[ERROR]t Las herramientas de administración de Active Directory no han podido ser encontradas"
      Exit 1
    }
}

#-------------------------------------------------------------------------------
#Ejecución script general
#-------------------------------------------------------------------------------

ModuloAD

$path="OU=TempAdmusers,Dc=domain,dc=local"

$users= Search-ADAccount -AccountExpired  -SearchBase $path
$users.samaccountname
 
foreach ($user in $users){
    Try
    {
       Remove-ADUser $user -Confirm:$false
    }
    Catch
    {
        Write-Host "[ERROR]
t No se ha podido borrar el usuario $user"
    }
}

Categories: powershell, scripting Tags:

Conocer el lenguaje del sistema operativo en un equipo vía powershell

viernes, 28 de junio de 2013 Sin comentarios

 

$solenguaje = Get-WmiObject Win32_OperatingSystem

$code= switch($solenguaje.oslanguage){

default {“Unknown”);

3082 {“Spanish”};

1033 {“English”}

}

Categories: powershell Tags:

Introducir a un usuario en grupo de administradores locales

miércoles, 26 de junio de 2013 Sin comentarios

Hola.

Puestos a publicar scripts, os publico uno rápido que tengo hecho y aunque es mejorable :). Es válido perfectamente en una empresa donde se pasa por un filtro el que un usuario sea administrador de su equipo o no:

$strDomain = "dominio"
$strComputer = Read-Host "Ordenador"
$strUser = Read-host "Usuario"

$computer = [ADSI]("WinNT://" + $strComputer + ",computer")
$group = $computer.psbase.children.find("Administradores")
$group.Name

function ListAdministrators

{$members = $group.psbase.invoke("Members") | %{$_.GetType().InvokeMember("Name",’GetProperty’,$null,$_,$null)}
$members}

$group.Add("WinNT://" + $strDomain + "/" + $strUser)
ListAdministrators

 

La penúltima línea, la podéis modificar y crear un script con :

$group.Remove("WinNT://" + $strDomain + "/" + $strUser)

Para que el script pase a borrar el usuario del grupo.

Advierto que es muy mejorable, por ejemplo el hecho de que busque la cadena “Administradores”, ya que si el s.o. está en inglés ya la cadena es “Administrators”, pero bueno, siempre se puede hacer un if y esa clase de cosas.

Categories: powershell Tags:

Aplicar script solo a un tipo de equipo / servidor

lunes, 24 de junio de 2013 Sin comentarios

Hola.

Muchas veces, uno de los condicionantes a la hora de aplicar un script, es aplicarlo solo a equipos y no a servidores e incluso a portátiles y no a puestos de trabajo.

Si os encontráis en esta situación, incluso como medida de protección ante scripts que vayáis a aplicar a una directiva aplicada a, por ejemplo, la ou donde debería haber un tipo de equipos, incluso una directiva aplicada a una consulta wmi que aplique solo a ciertos equipos, mejor aseguraros en el propio script que este, solo se aplicará si encontramos el tipo de equipo deseado, por ejemplo así:

  • $CompConfig = Get-WmiObject -Class Win32_ComputerSystem
  • $tipoequipo = $CompConfig.PCSystemType

$tipoequipo puede ser:

  • 1 {"Desktop"},2 {"Laptop"},3 {"Workstation"},4 {"EntServer"},5 {"SmallOfficeOrHomeServer"},6 {"AppliancePC"},7 {"PerformanceServer"},8 {"Maximum"},default {"NoConocido"}

Si queréis el nombre, podéis añadir esto:

Switch ($tipoequipo) {
   1 {"Desktop"}
   2 {"Mobile / Laptop"}
   3 {"Workstation"}
   4 {"Enterprise Server"}
   5 {"Small Office and Home Office Server"}
   6 {"Appliance PC"}
   7 {"Performance Server"}
   8 {"Maximum"}
default {"Not a known Product Type"}
}

 

En cuanto a equipos de dominio podemos también extraer información:

$TipoOrdenador = Get-WmiObject Win32_ComputerSystem
$Rol = $TipoOrdenador.DomainRole

 

Switch ($Rol) {
   0 {"Standalone Workstation"}
   1 {"Member Workstation"}
   2 {"Standalone Server"}
   3 {"Member Server"}
   4 {"Backup Domain Controller"}
   5 {"Primary Domain Controller"}
   default {"Not a known Domain Role"}
}

 

Tras esto, el condicionante podría ser:

If (($tipoequipo -eq "Desktop") -and ($Roldeservidor -eq "Member Workstation")) then {

}

Saludos.

Categories: powershell Tags:

Comprobación de requisitos y preparación de disco previo a la activación de bitlocker vía cmd y powershell

viernes, 21 de junio de 2013 Sin comentarios

Hola.

Como requisito del proceso de cifrado del disco, es imprescindible que nuestro boot esté en una partición diferente a la partición que almacena nuestro o nuestros sistemas operativos.

Si disponéis de esta partición, podéis ver que en el administrador de discos, aparece sin letra y con un tamaño que ronda los 100 a 300mb.

Si no disponéis de esta partición y queréis activar bitlocker via scripting, por supuesto debéis crearla y el comando para que el sistema haga un shrink, traslade archivos de boot y modifique el bcdedit, es el siguiente:

  • bdehdcfg -target default -restart –quiet   #pongo default por hacerlo fácil, esto nos dará una partición de 314572800bytes que redondeando son  300mb.

A mi me aparece la necesidad de comprobar vía scripting que esta partición existe y he utilizado los siguientes comandos:

$Partitionstatus= Get-WmiObject Win32_DiskPartition -filter "bootpartition=’True’"

if( $Partitionstatus.size -gt 314572800) {
    VENTANAPARTREINICIO  #función mía que lanza una ventan con aviso de reinicio
    bdehdcfg -target default -restart -quiet
}

saludos.

Categories: bitlocker, powershell Tags:

Posibles estados del chip TPM y gestión de bitlocker vía Cmd y Powershell

viernes, 21 de junio de 2013 Sin comentarios

 

En este artículo, voy a intentar plasmar las posibles situaciones en las que podemos encontrar y posicionar el chip TPM, con el fin de activar Bitlocker en los equipos de nuestro parque.

Lo primero que debemos conocer es que el comando Manage-bde es el que nos permitirá ir cambiando el estado del chip, los comandos son:

  • manage-bde –tpm –t  #activa tpm
  • manage-bde –tpm –takeownership contraseña   #Para tomar propiedad del chip si no somos propietarios.
  • manage-bde –on c: –skiphardwaretest –recoverypassword  #Para lanzar bitlocker en la unidad c:

Lo segundo que debemos conocer es que como inevitablemente el scripting va a formar parte imprescindible del proceso, hay ciertos comandos y consultas wmi que nos harán conducir el proceso.

Primero y antes de nada, la consulta wmi y la clase que extraerá la información es:

$tpm = Get-WmiObject -class Win32_Tpm -namespace "root\CIMV2\Security\MicrosoftTpm"

De la información extraida en la variable $tpm, nos importa esto:

$tpm.isEnabled_InitialValue = True or False   #¿Está habilitado?.

$tpm.isActivated.InitialValue = True or False  #¿Está activado?.

$tpm.isOwned_InitialValued = True or False  #¿Somos el propietario?.

 

Y esto nos puede dar las siguientes condiciones y debemos entonces actuar como se describe:

(($tpm.isEnabled_InitialValue -eq $true) -and ($tpm.isActivated_InitialValue -eq $true) -and ($tpm.IsOwned_InitialValue -eq $true))  #entonces solo queda activar con “manage-bde –on c:….”

(($tpm.isEnabled_InitialValue -eq $true) -and ($tpm.isActivated_InitialValue -eq $true) -and ($tpm.IsOwned_InitialValue -eq $false))  #Debemos hacernos propietarios y activar 1. manage-bde –tpm –takeownership contraseña y 2. manage-bde –on c:…

 

#Requieren activación de tpm “ manage-bde –tpm –t” el resto de condiciones:

(($tpm.isEnabled_InitialValue -eq $false) -and ($tpm.isActivated_InitialValue -eq $false) -and ($tpm.IsOwned_InitialValue -eq $false))

(($tpm.isEnabled_InitialValue -eq $false) -and ($tpm.isActivated_InitialValue -eq $false) -and ($tpm.IsOwned_InitialValue -eq $false))

Y

(($tpm.isEnabled_InitialValue -eq $true) -and ($tpm.isActivated_InitialValue -eq $false) -and ($tpm.IsOwned_InitialValue -eq $false))

Saludos.

Categories: bitlocker, powershell, tpm Tags:

Provocar ventana en tarea programada

viernes, 21 de junio de 2013 Sin comentarios

Hola.

La forma de hacer que aparezca al usuario una ventana con una información concreta, disparada por una tarea programada es la siguiente:

 

1. Menú Acciones en tarea programada.

2. Crear una nueva acción con las opciones: Iniciar un programa – Powershell en “Programa o script” y en “Agregar argumentos (opcionar"), utilizar el siguiente argumento:

-WindowStyle hidden -Command "& {[System.Reflection.Assembly]::LoadWithPartialName(‘System.Windows.Forms’); [System.Windows.Forms.MessageBox]::Show(‘Your_Desired_Message’,’texto a aparecer’)}"

 

image

Saludos.

Categories: powershell, task sequence Tags:

Encontrar cadena de texto en powershell

jueves, 20 de junio de 2013 Sin comentarios

Hola.

Estoy metido de lleno en un script para lanzar bitocker y me surge la necesidad de saber si el disco está cifrado para crear un if en el script.

Pues bien, la forma más fiable de todas las posibles es encontrar la cadena 0% en la información que devuelve manage-bde, para ello he utilizando:

 

$status=manage-bde c: -status
$id = $status -match "0%" | Out-String

if ($id -like ‘* 0%*’) {
    entonces…
}

 

Saludos.

Categories: bitlocker, powershell, tpm Tags: