Obtener listado de impresoras

Hola Mundo:

Hoy les traigo un script que encontré en internet y no recuerdo el sitio. El script lo modifiqué para que arrojara el resultado en un archivo CSV.

Este script tiene la funcionalidad de entregar todas las impresoras de un dominio sobre Windows Server 2003. El script está construido en el lenguaje VBS.

Const ADS_SCOPE_SUBTREE = 2 

Set objFSO = CreateObject("Scripting.FileSystemObject")
Set objLogFile = objFSO.CreateTextFile("impresoras.csv")

Set objConnection = CreateObject("ADODB.Connection")
Set objCommand = CreateObject("ADODB.Command")
objConnection.Provider = "ADsDSOObject"
objConnection.Open "Active Directory Provider"

Set objCommand.ActiveConnection = objConnection
objCommand.CommandText = "Select printerName, serverName from " _
& " 'LDAP://DC=DOMINIO,DC=TLD' where objectClass='printQueue'"
objCommand.Properties("Page Size") = 1000
objCommand.Properties("Searchscope") = ADS_SCOPE_SUBTREE
Set objRecordSet = objCommand.Execute
objRecordSet.MoveFirst

Do Until objRecordSet.EOF
objLogFile.Write chr(34) & objRecordSet.Fields("printerName").Value & chr(34) &","
objLogFile.Write chr(34) & objRecordSet.Fields("serverName").Value & chr(34) &","
objLogFile.Writeline

'Wscript.Echo "Printer Name: " & objRecordSet.Fields("printerName").Value
'Wscript.Echo "Server Name: " & objRecordSet.Fields("serverName").Value
objRecordSet.MoveNext
Loop

Espero que les sirva.

 Chau!

¿Cómo abrir un script VBE?

Hooooola Enfermera (http://youtu.be/DKjzu6ajPio)

¿Hace scripting? Si no lo hace, debiera hacerlo.

Hay un formato especial de archivos VBScript que viene supuestamente codificado, aunque creo que el término correcto sería ofuscado. Este formato es VBE y al intentar abrir un archivo con este formato con un editor de texto común y corriente encontraremos algo parecido a esto:

Mucho contenido no se puede apreciar. Solo caracteres que, aparentemente, carecen de sentido.

Existe la forma de hacer ingeniería inversa con otro script hecho por Jean-Luc Antoine  hace ya varios años atrás.
El código es:

'===============================================================================
'===============================================================================
' SCRIPT........: scriptDecode.vbs
' VERSION.......: 1.5
' DATE..........: 11/22/2003
' AUTHOR........: Jean-Luc Antoine
' LINK..........: http://www.interclasse.com/scripts/decovbe.php
' ALTERED BY....: Joe Glessner
' DESCRIPTION...: Decodes scripts encoded with screnc.exe. Usable with
' Wscript by dragging an encoded script onto this one. If done
' this way, only the first 100 lines (or so) of the script
' will be displayed.
' If run using Cscript.exe the entire output will be
' displayed.
' This script can be used to output the decoded script to a
' file using Cscript.exe by calling it with the following
' syntax:
'
' cscript [Path]scriptDecoder.vbs [Path] >> output.txt
'
'===============================================================================
'===============================================================================
'**Start Encode**

'===============================================================================
'# START
'===============================================================================
option explicit

'---------------------------------------------------------------------------
'# Declare variables
'---------------------------------------------------------------------------
Dim oArgs, NomFichier

'---------------------------------------------------------------------------
'# Check Arguments
'---------------------------------------------------------------------------
NomFichier=""
Set oArgs = WScript.Arguments
Select Case oArgs.Count
Case 0 'No Arg, popup a dialog box to choose the file
NomFichier=BrowseForFolder("Choose an encoded file", &H4031, &H0011)
Case 1
If Instr(oArgs(0),"?")=0 Then '-? ou /? => aide
NomFichier=oArgs(0)
End If
Case Else
WScript.Echo "Too many parameters"
End Select
Set oArgs = Nothing

'---------------------------------------------------------------------------
'# Decode the file and output the results
'---------------------------------------------------------------------------
If NomFichier<>"" Then
Dim fso
Set fso=WScript.CreateObject("Scripting.FileSystemObject")
If fso.FileExists(NomFichier) Then
Dim fic,contenu
Set fic = fso.OpenTextFile(NomFichier, 1)
Contenu=fic.readAll
fic.close
Set fic=Nothing

Const TagInit="#@~^" '#@~^awQAAA==
Const TagFin="==^#~@" '& chr(0)
Dim DebutCode, FinCode
Do
FinCode=0
DebutCode=Instr(Contenu,TagInit)
If DebutCode>0 Then
If (Instr(DebutCode,Contenu,"==")-DebutCode)=10 Then
'If "==" follows the tag
FinCode=Instr(DebutCode,Contenu,TagFin)
If FinCode>0 Then
Contenu=Left(Contenu,DebutCode-1) & _
Decode(Mid(Contenu,DebutCode+12,FinCode-DebutCode-12-6)) & _
Mid(Contenu,FinCode+6)
End If
End If
End If
Loop Until FinCode=0
WScript.Echo Contenu
Else
WScript.Echo Nomfichier & " not found"
End If
Set fso=Nothing
Else
WScript.Echo "Please give a filename"
WScript.Echo "Usage : " & wscript.fullname & " " & WScript.ScriptFullName & _
" "
End If

'===============================================================================
'# Functions
'===============================================================================
'---------------------------------------------------------------------------
'# Name................: Decode()
'# Use.................: Decode(Chaine)
'# Purpose.............: Reverse the encoding done by screnc.exe.
'---------------------------------------------------------------------------
Function Decode(Chaine)
Dim se,i,c,j,index,ChaineTemp
Dim tDecode(127)
Const Combinaison="1231232332321323132311233213233211323231311231321323112331123132"
Set se=WSCript.CreateObject("Scripting.Encoder")
For i=9 to 127
tDecode(i)="JLA"
Next
For i=9 to 127
ChaineTemp=Mid(se.EncodeScriptFile(".vbs",string(3,i),0,""),13,3)
For j=1 to 3
c=Asc(Mid(ChaineTemp,j,1))
tDecode(c)=Left(tDecode(c),j-1) & chr(i) & Mid(tDecode(c),j+1)
Next
Next
'Next line we correct a bug, otherwise a ")" could be decoded to a ">"
tDecode(42)=Left(tDecode(42),1) & ")" & Right(tDecode(42),1)
Set se=Nothing
Chaine=Replace(Replace(Chaine,"@&",chr(10)),"@#",chr(13))
Chaine=Replace(Replace(Chaine,"@*",">"),"@!","<")
Chaine=Replace(Chaine,"@$","@")
index=-1
For i=1 to Len(Chaine)
c=asc(Mid(Chaine,i,1))
If c<128 data-blogger-escaped-c="" data-blogger-escaped-if="" data-blogger-escaped-index="index+1" data-blogger-escaped-or="" data-blogger-escaped-then="">31) and (c<128 data-blogger-escaped-c="" data-blogger-escaped-if="" data-blogger-escaped-then="">60) and (c<>62) and (c<>64) Then
Chaine=Left(Chaine,i-1) & Mid(tDecode(c),Mid(Combinaison, _
(index mod 64)+1,1),1) & Mid(Chaine,i+1)
End If
End If
Next
Decode=Chaine
End Function

'---------------------------------------------------------------------------
'# Name................: BrowseForFolder()
'# Use.................: BrowseForFolder(ByVal pstrPrompt, ByVal
'# pintBrowseType, ByVal pintLocation)
'# Purpose.............: Locate the encoded script using Shell.Application
'---------------------------------------------------------------------------
Function BrowseForFolder(ByVal pstrPrompt, ByVal pintBrowseType, ByVal pintLocation)
Dim ShellObject, pstrTempFolder, x
Set ShellObject=WScript.CreateObject("Shell.Application")
On Error Resume Next
Set pstrTempFolder=ShellObject.BrowseForFolder(&H0,pstrPrompt,pintBrowseType,pintLocation)
BrowseForFolder=pstrTempFolder.ParentFolder.ParseName(pstrTempFolder.Title).Path
If Err.Number<>0 Then BrowseForFolder=""
Set pstrTempFolder=Nothing
Set ShellObject=Nothing
End Function

'===============================================================================
'# END

'===============================================================================

La forma es guardarlo en un archivo llamado scriptDecoder.vbs y usarlo así:
cscript [Path]scriptDecoder.vbs [Path][script.vbe]>> output.txt

Eso arrojará el script en un archivo de texto.

Espero que les sirva.

Agregar direcciones a una casilla en Exchange 2013 a través de Powershell

Hola Mundo:

Cada casilla de correo, en cualquier plataforma, puede tener distintas direcciones de correo

electrónico.

Exchange 2013 incluye esta característica y, además, es configurable a través de la interfaz web. Es bastante cómodo cuando es para un solo usuario y solo un par de direcciones y no lo es para cuando son 700 y debe hacerse a través de un script.
Para completar esta acción se debe hacer a través de la consola Powershell para Exchange 2013.

Bien. Supongamos que tenemos un CSV (llamado archivo.csv) con la información que se requiere y se tiene en el siguiente formato:

alias, emailaddresses 
usuario1,»usuario1@midominio1.com,usuario1@midominio2.com» 
usuario2,»usuario2@midominio1.com,usuario2@midominio2.com» 
usuario3,»usuario3@midominio1.com,usuario3@midominio2.com» 
usuario4,»usuario4@midominio1.com, usuario4@midominio2.com»

Se tiene 4 usuarios y cada usuario tiene 3 direcciones de email asociadas a su casilla. Es importante que las cuentas estén creadas antes de poder asociar más direcciones de correo electrónico  a las casillas. Entonces si las cuentas ya están creadas, no queda más que modificarlas usando el cmdlet Set-Mailbox

El cmdlet Set-Mailbox tiene un parámetro -EmailAddresses donde se indican todas las direcciones de correo electrónico que están asociadas a la casilla. Tiene un tipo de datos especial, por lo que hay que trabajarlo en el script para que pueda convertirlo de forma simple el valor (o los valores) que le entreguemos.

Entonces el script quedaría así:

Import-Csv "archivo.csv" | ForEach-Object {

$correos = $_."emailaddresses" -split ','

Set-Mailbox -Identity $_."alias" -EmailAddresses @{add=$correos}


}

De esta forma, le estaría diciendo al sistema que tengo un set de direcciones de correos electrónicos, separados por una coma, para la casilla identificada con el alias.

¡Chau!

Exportar objetos de la base de datos a archivos de texto en SQL Server

Hola a todos. He estado medio flojo con el blog, pero ahora retomo la actividad. Mucho trabajo, mucho que estudiar y aprender y ahora he vuelto.

Les dejo este video tutorial recién salido del horno donde muestra como volcar los objetos de una base de datos hacia un archivo de texto plano.

¡Chau!

Compresión de respaldos con SQL Server

Mayo ha sido un mes movido, por lo menos, para mi. He tenido bastantes actividades, tanto en el trabajo como en mi vida personal, que me tenían un poco privado de tiempo para compartir alguna cosa poca.

Por ejemplo, estuve en Concepción la semana pasada hablando sobre SQL Server (¡Que novedad! ¿o no?) y aprobé el examen para la licencia de radioaficionado. Desde ahora soy CD6375. Supongo que a nadie le importa esto, así que vamos a lo importante.

Comprimir respaldos se realiza por los siguientes motivos:

  • Toma menos tiempo generar uno.
  • Ocupa menos espacio en disco.
  • Si respaldamos en cintas, ocupa menos espacio en cinta, por lo tanto, ocupará menos respaldo en el lugar donde guardemos las cintas.
  • Toma menos tiempo hacer una restauración desde un respaldo.

En este ejemplo solo tocaré la creación de respaldos. Dejemos la cháchara y vamos al choque.


--Estadisticas
set statistics io on
set statistics time on

--Respaldo sin comprimir
backup database AdventureWorks2012_Data
to disk = 'C:Program FilesMicrosoft SQL ServerMSSQL11.MSSQLSERVERMSSQLBackupbak1.bak'
with init, no_compression

--Limpiar caché
dbcc freeproccache

--Respaldo con comprimir
backup database AdventureWorks2012_Data
to disk = 'C:Program FilesMicrosoft SQL ServerMSSQL11.MSSQLSERVERMSSQLBackupbak2.bak'
with init, compression

El script tiene varias partes:

  1. Estadisticas: Activa las estadisticas del servidor para la transaccion.
  2. Respaldo sin comprimir: Crea un respaldo comun y corriente de la base de datos. Respaldo sin tratamiento
  3. Liberar Caché: Limpia la caché.
  4. Respaldo con «comprimir»: Crea un respaldo comprimido de la base de datos.

Esto suena muy lindo. Tal para no creer. Veamos algunas imágenes

Estadisticas sin comprimir
Estadisticas sin comprimir

 

Estadisticas con compresión habilitada
Estadisticas con compresión habilitada

 

Propiedades archivo de respaldo sin comprimir
Propiedades archivo de respaldo sin comprimir

 

Propiedades archivo de respaldo comprimido
Propiedades archivo de respaldo comprimido

Si no les gusta copiar y pegar, pueden descargar el archivo .sql desde aqui: http://www.4shared.com/document/nN-PRmL1/demo_compresion_respaldos.html