0: no se hizo copia ni hubo errores. el origen y el destino están sincronizados.
1: copia exitosa.
2: se encontraron archivos en el destino que no estan en el origen
3: copia exitosa, ademas se encontraron archivos en el destino que no estan en el origen.
4 o mayor: error (hay codigos de error especificos, pero lo importante es saber que ha fallado)
recorrer un archivo de texto sin cargarlo en memoria
Para recorrer un archivo de texto, podemos hacerlo de la siguiente manera
$archivo = get-content archivo.txt
y luego para recorrerlo
foreach ($linea in $archivo){
"muestro la linea: $linea"
}
el problema, es que get-content carga el archivo entero en memoria, y si bien, el archivo ocupa pocos megas, no es problema, pero en el caso de un archivo que mide gigas (como un log), nos va a cargar el archivo entero en memoria, por lo tanto, podemos ocupar .NET para recorrerlo sin que lo cargue, de la siguiente manera:
$archivo = [System.IO.File]::OpenText("archivo.txt")
while ($archivo.peek() -ne -1){
$linea = $archivo.ReadLine()
"muestro la linea: $linea"
}
$archivo.Close()
$archivo = get-content archivo.txt
y luego para recorrerlo
foreach ($linea in $archivo){
"muestro la linea: $linea"
}
el problema, es que get-content carga el archivo entero en memoria, y si bien, el archivo ocupa pocos megas, no es problema, pero en el caso de un archivo que mide gigas (como un log), nos va a cargar el archivo entero en memoria, por lo tanto, podemos ocupar .NET para recorrerlo sin que lo cargue, de la siguiente manera:
$archivo = [System.IO.File]::OpenText("archivo.txt")
while ($archivo.peek() -ne -1){
$linea = $archivo.ReadLine()
"muestro la linea: $linea"
}
$archivo.Close()
Habilitar y deshabilitar un usuario en Active Directory
$cn = "CN=Jorge Mestre,OU=Users,DC=ar,DC=lugsaju,DC=com"
$usuario = new-object DirectoryServices.DirectoryEntry("LDAP://$cn")
$usuario.userAccountControl=66050 # deshabilitar
$usuario.setinfo()
$usuario.userAccountControl=66048 # habilitar
$usuario.setinfo()
$usuario = new-object DirectoryServices.DirectoryEntry("LDAP://$cn")
$usuario.userAccountControl=66050 # deshabilitar
$usuario.setinfo()
$usuario.userAccountControl=66048 # habilitar
$usuario.setinfo()
Categorias:
active directory,
powershell
"Mover" propiedades entre objetos en Active Directory
Teniendo dos DNs, creamos los objetos correspondientes:
$cnA = ""CN=grupoA,OU=Groups,DC=ar,DC=lugsaju,DC=com"
$cnB = ""CN=grupoB,OU=Groups,DC=ar,DC=lugsaju,DC=com"
$grupoA = new-object DirectoryServices.DirectoryEntry("LDAP://$cnA")
$grupoB = new-object DirectoryServices.DirectoryEntry("LDAP://$cnB")
una vez que tenemos los objetos ADSI ($grupoA,$grupoB), vamos a mover el campo "info" desde el $grupoA al $grupoB:
$grupoA.info
esto es un texto informativa
$grupoB.info
$
primero, guardamos el info en una var:
$infoTemp = $grupoA.info
luego, asignamos a $grupoB el contenido de la var:
$grupoB.psbase.InvokeSet("info","$info")
$grupoB.psbase.CommitChanges()
entonces, eliminamos el contenido del campo info del $grupoA
$grupoA.putEx(1,"info",0) # es un cero
$grupoA.setInfo()
y comprobamos:
$grupoA.info
$
$grupoB.info
esto es un texto informativa
$
Ahora lo vamos a complicar un poco mas, al mover el Manager del grupoA al grupoB
el campo ManagedBy contiene un objeto de AD (no es solo texto), por lo tanto, tenemos que obtener 1º este objeto y luego, realizar lo mismo que antes, por lo tanto
$MgrDN = $grupoA.managedBy
$Mgr= new-object DirectoryServices.DirectoryEntry("LDAP://$MgrDN")
$Manager = $Mgr.distinguishedName
asignamos el managedBy al grupoB
$grupoB.psbase.invokeSet("managedBy","$Manager")
$grupoB.psbase.CommitChanges()
Eliminamos el Manager del grupoA
$grupoA.PutEx(1,"managedBy",0)
$grupoA.setInfo()
$cnA = ""CN=grupoA,OU=Groups,DC=ar,DC=lugsaju,DC=com"
$cnB = ""CN=grupoB,OU=Groups,DC=ar,DC=lugsaju,DC=com"
$grupoA = new-object DirectoryServices.DirectoryEntry("LDAP://$cnA")
$grupoB = new-object DirectoryServices.DirectoryEntry("LDAP://$cnB")
una vez que tenemos los objetos ADSI ($grupoA,$grupoB), vamos a mover el campo "info" desde el $grupoA al $grupoB:
$grupoA.info
esto es un texto informativa
$grupoB.info
$
primero, guardamos el info en una var:
$infoTemp = $grupoA.info
luego, asignamos a $grupoB el contenido de la var:
$grupoB.psbase.InvokeSet("info","$info")
$grupoB.psbase.CommitChanges()
entonces, eliminamos el contenido del campo info del $grupoA
$grupoA.putEx(1,"info",0) # es un cero
$grupoA.setInfo()
y comprobamos:
$grupoA.info
$
$grupoB.info
esto es un texto informativa
$
Ahora lo vamos a complicar un poco mas, al mover el Manager del grupoA al grupoB
el campo ManagedBy contiene un objeto de AD (no es solo texto), por lo tanto, tenemos que obtener 1º este objeto y luego, realizar lo mismo que antes, por lo tanto
$MgrDN = $grupoA.managedBy
$Mgr= new-object DirectoryServices.DirectoryEntry("LDAP://$MgrDN")
$Manager = $Mgr.distinguishedName
asignamos el managedBy al grupoB
$grupoB.psbase.invokeSet("managedBy","$Manager")
$grupoB.psbase.CommitChanges()
Eliminamos el Manager del grupoA
$grupoA.PutEx(1,"managedBy",0)
$grupoA.setInfo()
Categorias:
active directory,
powershell
Eliminar propiedades de objetos en Active Directory
vamos a crear el objeto que nos conecta con el grupo:
$cn = "CN=GRUPO_G,OU=Groups,DC=ar,DC=lugsaju,DC=com"
$grupo = new-object DirectoryServices.DirectoryEntry("LDAP://$cn")
vamos a eliminar el campo ManagedBy del grupo:
$grupo.ManagedBy
CN=Jorge Daniel Mestre,OU=People,DC=ar,DC=lugsaju,DC=com
$grupo.PutEx(1,"managedBy",0) # cero al final, el 1 es el que "limpia" la propiedad.
$grupo.setInfo() # ejecutamos realmente el cambio en AD.
$grupo.ManagedBy
$
Ahora eliminaremos el campo "Notas" (info)
$grupo.info
esto es una nota en el campo notas
$grupo.PutEx(1,"info",0)
$grupo.SetInfo()
$grupo.Info
$
$cn = "CN=GRUPO_G,OU=Groups,DC=ar,DC=lugsaju,DC=com"
$grupo = new-object DirectoryServices.DirectoryEntry("LDAP://$cn")
vamos a eliminar el campo ManagedBy del grupo:
$grupo.ManagedBy
CN=Jorge Daniel Mestre,OU=People,DC=ar,DC=lugsaju,DC=com
$grupo.PutEx(1,"managedBy",0) # cero al final, el 1 es el que "limpia" la propiedad.
$grupo.setInfo() # ejecutamos realmente el cambio en AD.
$grupo.ManagedBy
$
Ahora eliminaremos el campo "Notas" (info)
$grupo.info
esto es una nota en el campo notas
$grupo.PutEx(1,"info",0)
$grupo.SetInfo()
$grupo.Info
$
Categorias:
active directory,
powershell
Buscando grupos en Active Directory segun el type y scope
Para buscar un grupo en Active Directory con Powershell, primero, indicamos el servidor en el que vamos a buscar:
$raiz = "LDAP://ar.lugsaju.com.ar"
$buscador = new-object DirectoryServices.DirectorySearcher($raiz)
Una vez creado el objeto, definimos algunas propiedades:
$buscador.PageSize = 10000
$buscador.CacheResults = $false
$buscador.Filter = '(objectClass=group)'
$buscador.FindAll()
Ahora, si queremos buscar grupos por tipo, debemos referirnos a esta tabla:
Entonces, para buscar todos los grupos globales de seguridad,
$buscador.Filter = '(&(objectClass=group)(groupType=-2147483646))'
o para buscar los grupos Domain local de Distribución, que comiencen con la palabra "LUG"
$buscador.Filter = '(&(objectClass=group)(groupType=4)(name=LUG*))'
$raiz = "LDAP://ar.lugsaju.com.ar"
$buscador = new-object DirectoryServices.DirectorySearcher($raiz)
Una vez creado el objeto, definimos algunas propiedades:
$buscador.PageSize = 10000
$buscador.CacheResults = $false
$buscador.Filter = '(objectClass=group)'
$buscador.FindAll()
Ahora, si queremos buscar grupos por tipo, debemos referirnos a esta tabla:
scope | Tipo de grupo | Valor “GroupType” |
Universal | Security | -2147483640 |
Global | Security | -2147483646 |
Domain Local | Security | -2147483644 |
Universal | Distribution | 8 |
Global | Distribution | 2 |
Domain Local | Distribution | 4 |
Entonces, para buscar todos los grupos globales de seguridad,
$buscador.Filter = '(&(objectClass=group)(groupType=-2147483646))'
o para buscar los grupos Domain local de Distribución, que comiencen con la palabra "LUG"
$buscador.Filter = '(&(objectClass=group)(groupType=4)(name=LUG*))'
Categorias:
active directory,
powershell
Vim preparado para Powershell
Vim es un editor excelente, si bien su curva de aprendizaje es MORTAL (ejemplo abajo :D)
Pues, vamos a configurar nuestro Vim para editar Powershell:
01) Instalar Vim 7.0 seleccionando "Self-installing Executable" desde aqui
02) Una vez instalado, en la carpeta de la instalación (supongamos c:\vim) editamos el archivo c:\vim\_vimrc
agregar las siguientes lineas:
colorscheme desert
set tabstop=4
03) Bajar la sintaxis de PS desde aqui
04) copiar el archivo ps1.vim a c:\vim\vim70\syntax\
05) editar el archivo c:\vim\vim70\filetype.vim y agregar
" Powershell
au BufNewFile,BufRead *.ps1 setf ps1
y listo, con esto, cada vez que editemos un .ps1 se coloreará automaticamente.
Pues, vamos a configurar nuestro Vim para editar Powershell:
01) Instalar Vim 7.0 seleccionando "Self-installing Executable" desde aqui
02) Una vez instalado, en la carpeta de la instalación (supongamos c:\vim) editamos el archivo c:\vim\_vimrc
agregar las siguientes lineas:
colorscheme desert
set tabstop=4
03) Bajar la sintaxis de PS desde aqui
04) copiar el archivo ps1.vim a c:\vim\vim70\syntax\
05) editar el archivo c:\vim\vim70\filetype.vim y agregar
" Powershell
au BufNewFile,BufRead *.ps1 setf ps1
y listo, con esto, cada vez que editemos un .ps1 se coloreará automaticamente.
dividir strings en Powershell
dividir un string por un caracter:
$a = "powershell,jorge,windows"
$a.split(",")
powershell
jorge
windows
Seleccionar un elemento
$a.split(",")[1]
jorge
Dividir por un caracter, y limpiar los espacios en blanco:
$a = "powershell2 jorge2 windows"
$a.split("2")
powershell
jorge
windows
$a.split("2",[StringSplitOptions]::RemoveEmptyEntries)
powershell
jorge
windows
$a = "powershell,jorge,windows"
$a.split(",")
powershell
jorge
windows
Seleccionar un elemento
$a.split(",")[1]
jorge
Dividir por un caracter, y limpiar los espacios en blanco:
$a = "powershell2 jorge2 windows"
$a.split("2")
powershell
jorge
windows
$a.split("2",[StringSplitOptions]::RemoveEmptyEntries)
powershell
jorge
windows
Categorias:
active directory,
powershell,
vbscript
en Powershell
inicializar un array sin valores
$array = @()
iniciar con un tamaño de array especifico:
$array = new-object object[] 100
Inicializar un array con 3 valores:
$array = "a",3,"hola"
$array = @()
iniciar con un tamaño de array especifico:
$array = new-object object[] 100
Inicializar un array con 3 valores:
$array = "a",3,"hola"
renombrar archivos con powershell
Jeffrey Snover ha publicado en el blog oficial de powershell como renombrar archivos masivamente.
http://blogs.msdn.com/powershell/archive/2007/03/06/renaming-files.aspx
http://blogs.msdn.com/powershell/archive/2007/03/06/renaming-files.aspx
Sumatra, visor PDF ligero
Sumatra es un pequeño visor de archivos pdf para Windows que puede resultar útil para los usuarios que no dispongan de mucha máquina y necesitan ahorrar todos los recursos posibles. Se trata de una herramienta muy básica con sólo unas cuantas opciones de visualización. No obstante cumple perfectamente su cometido si no necesitamos muchas opciones.....y es GNU :)
WebSite | Sumatra PDF viewer
WebSite | Sumatra PDF viewer
Categorias:
apps,
OpenSource
Suscribirse a:
Entradas (Atom)