convertir fechas wmi a formato decente

function Get-SystemUptime           
{
$operatingSystem = Get-WmiObject Win32_OperatingSystem
[Management.ManagementDateTimeConverter]::ToDateTime($operatingSystem.LastBootUpTime)
}

visto en el blog oficialde powershell

AccessRights exportados a csv

Para evitar que al exportar permisos de exchange a csv lo muestre asi:
System.Collections.ObjectModel.Collection`1[Microsoft.Exchange.Management.MapiTasks.PublicFolderAccessRight]

utiliza la siguiente expresion:
Get-PublicFolderClientPermission -identity "\PFolder" | select identity,user,@{Name = 'AccessRights';Expression = {[string]::join(',',$_.AccessRights)}}

Windows - "You must install networking before you change this computers domain membership"

Si aparece éste mensaje al tratar de unir el PC a dominio, reiniciar el servicio "Computer Browser"

C# - Crear usuario local y agregarlo a un grupo local



using System;
using System.DirectoryServices;

// crear un usuario local y agregarlo a un grupo local

class Crearusuario
{
    static void Main()
    {
        string usuario = "usuario1";
        string grupo = "Administradores";
        string password = "passw0rd";
        string pc = "w153622";
        string PathNT = "WinNT://" + pc + ",computer";
        string PathUsuario = "WinNT://" + pc + "/" + usuario + ",user";
        string PathGrupo = "WinNT://" + pc + "/" + grupo + ",group";
        
        try
        {                
            DirectoryEntry NT = new DirectoryEntry(PathNT);
            DirectoryEntry NuevoUsuario = NT.Children.Add(usuario, "user");
            NuevoUsuario.Invoke("SetPassword", new object[] { password });
            NuevoUsuario.Invoke("Put", new object[] { "Description", "usuario auxiliar" });
            NuevoUsuario.Invoke("Put", new object[] {"UserFlags", 0x00010000}); //NeverExpires
            NuevoUsuario.CommitChanges();
            Console.WriteLine("creado ok");
         }
         catch (Exception e)
         {
            Console.WriteLine("error al crear usuario;" + e.Message);
         }

         try // agregar a grupo
         {
            DirectoryEntry grupoNT = new DirectoryEntry(PathGrupo);
            grupoNT.Invoke("Add", new object[] { PathUsuario });
            grupoNT.CommitChanges();
            Console.WriteLine("agregado a " + grupo + " OK");
         }
         catch (Exception g)
         {
           Console.WriteLine("error al agregar " + usuario + " a " + grupo + ";" + g.Message);
         }
         Console.ReadLine();
     }
} //class Crearusuario



C# - método para escribir logs



using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.IO;

namespace programa
{
    class ejemploLog
    {

        public void eLog(string pc, string usuario, string mensaje, StreamWriter sw)
        {
            DateTime f = DateTime.Now;
            string fecha = f.ToString("dd/MM/yyyy");
            mensaje = fecha + ";" + pc + ";" + usuario + ";" + mensaje + ";";
            Console.WriteLine(mensaje);
            sw.WriteLine(mensaje);
        }
        static void Main()
        {
            string ArchLog = @"c:\pruebaLog.txt";
            StreamWriter sw = File.AppendText(ArchLog);
            ejemploLog m = new ejemploLog();
            m.eLog("pc1", "jorge", "autorizado a acceder", sw);
            m.eLog("pc2", "jorge1", "No autorizado a acceder", sw);
            m.eLog("pc3", "jorge2", "autorizado a acceder", sw);
            Console.ReadLine();
        } // main
    } // class ejemploLog
} // namespace programa

Powershell Oneliner - Crear enlaces con el texto

teniendo un .txt con este contenido

http://rapidshare.com/files/9106992734/part41.rar
http://rapidshare.com/files/9107023022/part42.rar
http://rapidshare.com/files/9107046391/part43.rar
http://rapidshare.com/files/9107051016/part44.rar

Service Pack 1

http://rapidshare.com/files/9108036830/l.part1.rar
http://rapidshare.com/files/9108074053/l.part2.rar
http://rapidshare.com/files/9108081587/l.part3.rar

Medicina

http://rapidshare.com/files/9107829561/fix.rar

para convertir el texto en link y guardarlo en un htm para que el programa de descarga los detecte automaticamente, se puede hacer esto en powershell


WMI - Clases y propiedades

Hardware classes

Motherboard, controllers, and on-board devices

  • Win32_1394Controller
    • uint16 Availability;
    • string DeviceID;
    • string Manufacturer;
    • string Name;
    • string Status;
  • Win32_BaseBoard
    • string Manufacturer;
    • string Model;
    • string Name;
    • string Product;
    • string Status;
    • string Version;
  • Win32_BIOS
    • uint16 BiosCharacteristics[];
    • string IdentificationCode;
    • string Manufacturer;
    • string Name;
    • datetime ReleaseDate;
    • string Status;
    • string Version;
  • Win32_InfraredDevice
    • uint16 Availability;
    • string DeviceID;
    • string Manufacturer;
    • string Name;
    • string Status;
  • Win32_ParallelPort
    • uint16 Availability;
    • string DeviceID;
    • string Name;
    • string Status;
  • Win32_PCMCIAController
    • uint16 Availability;
    • string DeviceID;
    • string Manufacturer;
    • string Name;
    • string Status;
  • Win32_PhysicalMemory
    • string BankLabel;
    • uint64 Capacity;
    • uint16 FormFactor;
    • boolean HotSwappable;
    • string Manufacturer;
    • uint16 MemoryType;
    • string Model;
    • string Name;
    • string SerialNumber;
    • uint32 Speed;
  • Win32_PortConnector
    • string InternalReferenceDesignator;
    • string Name;
    • boolean PoweredOn;
    • string Status;
  • Win32_Processor
    • uint16 Architecture;
    • uint16 Availability;
    • string Caption;
    • uint16 CpuStatus;
    • uint32 CurrentClockSpeed;
    • uint16 CurrentVoltage;
    • string DeviceID;
    • uint16 Family;
    • string Manufacturer;
    • uint32 MaxClockSpeed;
    • string Name;
    • string ProcessorId;
    • uint16 ProcessorType;
    • uint16 Revision;
    • string Role;
    • string SocketDesignation;
    • string Status;
    • string Version;
  • Win32_IDEController
    • uint16 Availability;
    • string Caption;
    • string DeviceID;
    • string Manufacturer;
    • uint64 MaxNumberControlled;
    • string Name;
    • uint16 ProtocolSupported;
    • string Status;
  • Win32_SCSIController
    • uint16 Availability;
    • string Caption;
    • string DeviceID;
    • string DriverName;
    • string HardwareVersion;
    • string Manufacturer;
    • uint64 MaxTransferRate;
    • string Name;
    • uint16 ProtectionManagement;
    • uint16 ProtocolSupported;
    • string Status;
  • Win32_SerialPort
    • uint16 Availability;
    • string DeviceID;
    • uint32 MaxBaudRate;
    • string Name;
    • uint16 ProtocolSupported;
    • string ProviderType;
    • string Status;
  • Win32_SoundDevice
    • uint16 Availability;
    • string Caption;
    • string DeviceID;
    • string Manufacturer;
    • string ProductName;
    • string Status;
  • Win32_USBController
    • uint16 Availability;
    • string Caption;
    • string DeviceID;
    • string Manufacturer;
    • string Name;
    • string Status;

Video devices

  • Win32_DesktopMonitor
    • uint16 Availability;
    • string DeviceID;
    • uint16 DisplayType;
    • string MonitorManufacturer;
    • string MonitorType;
    • string Name;
    • uint32 PixelsPerXLogicalInch;
    • uint32 PixelsPerYLogicalInch;
    • uint32 ScreenHeight;
    • uint32 ScreenWidth;
    • string Status;
  • Win32_VideoController
    • string AdapterDACType;
    • uint32 AdapterRAM;
    • uint16 Availability;
    • uint32 CurrentRefreshRate;
    • string Description;
    • string DeviceID;
    • datetime DriverDate;
    • string DriverVersion;
    • uint32 MaxRefreshRate;
    • uint32 MinRefreshRate;
    • boolean Monochrome;
    • string Name;
    • uint16 ProtocolSupported;
    • string Status;
    • uint16 VideoArchitecture;
    • uint16 VideoMemoryType;
    • string VideoModeDescription;
    • string VideoProcessor;

Mass storage devices

  • Win32_CDROMDrive
    • uint16 Availability;
    • string DeviceID;
    • string Drive;
    • boolean DriveIntegrity;
    • string Manufacturer;
    • uint64 MaxMediaSize;
    • string MediaType;
    • string Name;
    • uint64 Size;
    • string Status;
  • Win32_DiskDrive
    • uint16 Availability;
    • string DeviceID;
    • string Drive;
    • boolean DriveIntegrity;
    • string Manufacturer;
    • uint64 MaxMediaSize;
    • string MediaType;
    • string Name;
    • uint64 Size;
    • string Status;
  • Win32_FloppyDrive
    • uint16 Availability;
    • string DeviceID;
    • string Name;
    • string Status;
  • Win32_TapeDrive
    • uint16 Availability;
    • uint16 Capabilities[];
    • uint32 Compression;
    • string CompressionMethod;
    • string DeviceID;
    • uint32 ECC;
    • string ErrorMethodology;
    • uint32 FeaturesHigh;
    • uint32 FeaturesLow;
    • string Id;
    • string Manufacturer;
    • uint64 MaxMediaSize;
    • string MediaType;
    • uint32 NumberOfMediaSupported;
    • string PNPDeviceID;
    • uint32 ReportSetMarks;
    • string Status;

Input devices

  • Win32_Keyboard
    • uint16 Availability;
    • string DeviceID;
    • string Layout;
    • string Name;
    • uint16 NumberOfFunctionKeys;
    • string Status;
  • Win32_PointingDevice
    • uint16 Availability;
    • string DeviceID;
    • uint16 DeviceInterface;
    • string HardwareType;
    • string Manufacturer;
    • string Name;
    • uint8 NumberOfButtons;
    • uint16 PointingType;
    • uint32 Resolution;
    • uint32 SampleRate;
    • string Status;

Networking devices

  • Win32_NetworkAdapter
    • string AdapterType;
    • uint16 Availability;
    • string Caption;
    • string DeviceID;
    • string MACAddress;
    • string Manufacturer;
    • uint64 MaxSpeed;
    • string Name;
    • string NetworkAddresses[];
    • string ProductName;
    • string ServiceName;
    • uint64 Speed;
    • string Status;

    From Win32_NetworkAdapterConfiguration for the current adapter:

    • string DatabasePath;
    • string DefaultIPGateway[];
    • string Description;
    • boolean DHCPEnabled;
    • datetime DHCPLeaseExpires;
    • datetime DHCPLeaseObtained;
    • string DHCPServer;
    • string DNSDomain;
    • boolean DNSEnabledForWINSResolution;
    • string DNSHostName;
    • string IPAddress[];
    • boolean IPEnabled;
    • boolean IPFilterSecurityEnabled;
    • boolean IPPortSecurityEnabled;
    • string IPSubnet[];
    • boolean IPUseZeroBroadcast;
    • string IPXAddress;
    • boolean IPXEnabled;
    • string ServiceName;
    • uint32 TcpipNetbiosOptions;
    • uint32 TcpNumConnections;
    • boolean WINSEnableLMHostsLookup;
    • string WINSHostLookupFile;
    • string WINSPrimaryServer;
    • string WINSSecondaryServer;
  • Win32_POTSModem
    • uint16 AnswerMode;
    • string AttachedTo;
    • uint16 Availability;
    • string CountriesSupported[];
    • string DeviceID;
    • string DeviceType;
    • uint16 DialType;
    • datetime DriverDate;
    • string Model;
    • string ModemInfPath;
    • string PortSubClass;
    • string Prefix;
    • string ProviderName;
    • uint8 RingsBeforeAnswer;
    • string Status;
    • string StringFormat;
    • boolean SupportsCallback;
    • datetime TimeOfLastReset;

Printer device

  • Win32_Printer
    • uint32 Attributes;
    • uint16 Availability;
    • string DeviceID;
    • string DriverName;
    • string Name;
    • boolean Network;
    • string PortName;
    • uint16 PrinterStatus;
    • string PrintProcessor;
    • string ServerName;

    From Win32_PrinterConfiguration for the current printer:

    • boolean Collate;
    • uint32 Color;
    • uint32 DitherType;
    • uint32 DriverVersion;
    • boolean Duplex;
    • uint32 HorizontalResolution;
    • uint32 VerticalResolution;
    • uint32 ICMIntent;
    • uint32 ICMMethod;
    • uint32 MediaType;
    • uint32 Orientation;
    • string PaperSize;
    • uint32 Scale;
    • uint32 TTOption;

Power supply devices

  • Win32_Battery
    • uint16 Availability;
    • uint32 BatteryRechargeTime;
    • uint16 BatteryStatus;
    • uint16 Chemistry;
    • uint32 DesignCapacity;
    • uint64 DesignVoltage;
    • string DeviceID;
    • uint16 EstimatedChargeRemaining;
    • uint32 EstimatedRunTime;
    • uint32 ExpectedBatteryLife;
    • uint32 ExpectedLife;
    • uint32 FullChargeCapacity;
    • uint32 MaxRechargeTime;
    • string Name;
    • uint32 TimeOnBattery;
    • uint32 TimeToFullCharge;
  • Win32_PortableBattery

    The same properties as in Win32_Battery.

  • Win32_UninterruptiblePowerSupply
    • uint16 Availability;
    • boolean BatteryInstalled;
    • boolean CanTurnOffRemotely;
    • string DeviceID;
    • uint16 EstimatedChargeRemaining;
    • uint32 EstimatedRunTime;
    • uint32 FirstMessageDelay;
    • boolean IsSwitchingSupply;
    • boolean LowBatterySignal;
    • uint32 MessageInterval;
    • string Name;
    • boolean PowerFailSignal;
    • uint16 RemainingCapacityStatus;
    • uint32 TimeOnBackup;
    • uint32 TotalOutputPower;
    • uint16 TypeOfRangeSwitching;
    • string UPSPort;

Cooling devices

  • Win32_Fan
    • boolean ActiveCooling;
    • uint16 Availability;
    • string DeviceID;
    • string Name;
    • string PNPDeviceID;
    • string Status;
    • boolean VariableSpeed;
  • Win32_HeatPipe
    • boolean ActiveCooling;
    • uint16 Availability;
    • string DeviceID;
    • string Name;
    • string PNPDeviceID;
    • string Status;
  • Win32_Refrigeration
    • boolean ActiveCooling;
    • uint16 Availability;
    • string DeviceID;
    • string Name;
    • string PNPDeviceID;
    • string Status;

System enclosure

  • Win32_SystemEnclosure
    • boolean AudibleAlarm;
    • string CableManagementStrategy;
    • uint16 ChassisTypes[];
    • uint16 HeatGeneration;
    • boolean LockPresent;
    • string Manufacturer;
    • string Model;
    • string Name;
    • uint16 NumberOfPowerCords;
    • uint16 ServicePhilosophy[];
    • string Status;
    • string Tag;
    • boolean VisibleAlarm;

Software classes

Operating system settings

  • Win32_ComputerSystem
    • string BootupStatev;
    • string Caption;
    • string Domain;
    • uint16 DomainRole;
    • boolean InfraredSupported;
    • string Manufacturer;
    • string Model;
    • string Name;
    • uint32 NumberOfProcessors;
    • boolean PowerManagementSupported;
    • uint16 PowerState;
    • uint16 PowerSupplyState;
    • string Status;
    • string SystemType;
    • uint16 ThermalState;
    • uint64 TotalPhysicalMemory;
    • string UserName;
    • uint16 WakeUpType;
  • Win32_OperatingSystem
    • string BootDevice;
    • string BuildNumber;
    • string BuildType;
    • string Caption;
    • string CodeSet;
    • string CountryCode;
    • sint16 CurrentTimeZone;
    • boolean Distributed;
    • uint8 ForegroundApplicationBoost;
    • uint64 FreePhysicalMemoryv;
    • uint64 FreeVirtualMemory;
    • datetime LastBootUpTime;
    • datetime LocalDateTime;
    • string Locale;
    • string Manufacturer;
    • uint32 MaxNumberOfProcesses;
    • string Name;
    • uint32 NumberOfProcesses;
    • uint32 NumberOfUsers;
    • string Organization;
    • uint32 OSLanguage;
    • uint32 OSProductSuite;
    • uint16 OSType;
    • string RegisteredUser;
    • string SerialNumber;
    • uint16 ServicePackMajorVersion;
    • uint16 ServicePackMinorVersion;
    • string Status;
    • string SystemDevice;
    • string SystemDirectory;
    • string Version;
    • string WindowsDirectory;
  • Win32_BootConfiguration
    • string BootDirectory;
    • string ConfigurationPath;
    • string Name;
    • string ScratchDirectory;
    • string SettingID;
    • string TempDirectory;
  • Win32_OSRecoveryConfiguration
    • boolean AutoReboot;
    • string DebugFilePath;
    • uint32 DebugInfoType;
    • string Description;
    • string Name;
    • boolean OverwriteExistingDebugFile;
    • boolean SendAdminAlert;
    • string SettingID;
    • boolean WriteDebugInfo;
    • boolean WriteToSystemLog;
  • Win32_QuickFixEngineering
    • string Description;
    • string FixComments;
    • string HotFixID;
    • datetime InstallDate;
    • string InstalledBy;
    • string Name;
    • string ServicePackInEffect;
  • Win32_ODBCDataSourceSpecification
    • string CheckID;
    • string DataSource;
    • string DriverDescription;
    • string Registration;
    • string Version;
  • Win32_ODBCDriverSpecification
    • string CheckID;
    • string Driver;
    • string Version;
  • Win32_ODBCTranslatorSpecification
    • string CheckID;
    • string Driver;
    • string Version;
  • Win32_LocalTime
    • uint32 Day;
    • uint32 DayOfWeek;
    • uint32 Hour;
    • uint32 Milliseconds;
    • uint32 Minute;
    • uint32 Month;
    • uint32 Quarter;
    • uint32 Second;
    • uint32 WeekInMonth;
    • uint32 Year;
  • Win32_TimeZone
    • sint32 Bias;
    • string Caption;
    • sint32 DaylightBias;
    • string DaylightName;
    • string SettingID;
    • uint32 StandardBias;
    • string StandardName;

Users

  • Win32_LogonSession
    • string AuthenticationPackage;
    • string Caption;
    • string LogonId;
    • uint32 LogonType;
    • string Name;
    • datetime StartTime;
    • string Status;
  • Win32_NetworkLoginProfile
    • datetime AccountExpires;
    • uint32 AuthorizationFlags;
    • uint32 BadPasswordCount;
    • string Comment;
    • string Description;
    • string FullName;
    • string HomeDirectory;
    • string HomeDirectoryDrive;
    • datetime LastLogoff;
    • datetime LastLogon;
    • string LogonHours;
    • string LogonServer;
    • uint64 MaximumStorage;
    • string Name;
    • uint32 NumberOfLogons;
    • datetime PasswordAge;
    • datetime PasswordExpires;
    • uint32 PrimaryGroupId;
    • uint32 Privileges;
    • string Profile;
    • string ScriptPath;
    • string SettingID;
    • uint32 UnitsPerWeek;
    • uint32 UserId;
    • string UserType;
    • string Workstations;
    • uint32 Flags;
  • Win32_UserAccount
    • uint32 AccountType;
    • string Caption;
    • boolean Disabled;
    • string Domain;
    • string FullName;
    • boolean LocalAccount;
    • boolean Lockout;
    • string Name;
    • boolean PasswordChangeable;
    • boolean PasswordExpires;
    • boolean PasswordRequired;
  • Win32_Group
    • string Domain;
    • string Name;

Installed software

  • Win32_Product
    • string IdentifyingNumber;
    • string InstallLocation;
    • sint16 InstallState;
    • string Name;
    • string Vendor;
    • string Version;

Networking

  • Win32_NetworkProtocol
    • boolean ConnectionlessService;
    • boolean GuaranteesDelivery;
    • boolean GuaranteesSequencing;
    • boolean MessageOriented;
    • string Name;
    • string Status;
    • boolean SupportsBroadcasting;
    • boolean SupportsConnectData;
    • boolean SupportsDisconnectData;
    • boolean SupportsEncryption;
    • boolean SupportsExpeditedData;
    • boolean SupportsFragmentation;
    • boolean SupportsGracefulClosing;
    • boolean SupportsGuaranteedBandwidth;
    • boolean SupportsMulticasting;
    • boolean SupportsQualityofService;
  • Win32_PingStatus (implemented for Windows XP / 2003 Server)
    • uint32 ResponseTime;
    • uint32 StatusCode;

Audio/Video codecs

  • Win32_CodecFile
    • string Description;
    • string Extension;
    • string Name;
    • string Status;
    • string Version;

C# - Abrir un archivo que lea caracteres unicode





using System;
using System.IO;

namespace prueba
{
class jorge
{
public static void Main()
{
string path = "c:\a.txt";
// abrir archivo
StreamReader sr = new StreamReader(path, System.Text.Encoding.Default);
string linea = sr.ReadLine();
while (linea != null)
{
Console.WriteLine("linea: {0}", linea);
linea = sr.ReadLine();
}
Console.ReadLine();
}
}
}


obtener el valor de una variable de entorno de un equipo remoto

$clave = "PATH"
$regKey = [Microsoft.Win32.RegistryKey]::OpenRemoteBaseKey([Microsoft.Win32.RegistryHive]::LocalMachine,$s)
$key = $regKey.OpenSubkey("SYSTEM\CurrentControlSet\Control\Session Manager\Environment",$true)
$val = $key.GetValue("$clave")
"el valor de la clave $clave es: $val"

Listar los Domain controllers de un dominio

$dcObj = [adsi]"LDAP://OU=domain controllers,dc=ar,dc=lugsaju,dc=com"
$dcs = $dcObj.PSBase.Children | % { $_.name }
$cantDCs = $dcs.count
$contDC = 0
foreach ($dc in $dcs){
$a = ping -n 1 $dc
$a = $(($a[2]).split("[")[1]).split("]")[0]
write-output "$dc`t$a"
}

con la ip de bonus track

función para nombrar archivos de log - vbscript

Function NomArch(NomArch)    ' Para nombrar los archivos.
Dim arch,hoy,aa,mm,dd
hoy = Date
aa = year(hoy)
mm = month(hoy)
dd = day(hoy)
arch = aa & "_0" & mm & "_" & dd & "_" & NomArch & ".log" ' Formato: \AAAA_MM_DD_NomArch.log
NomArch = arch
End Function

' uso
Set objFS = CreateObject("Scripting.FileSystemObject")
carpeta = "C:\logs"
ArchLogGen = "LogGeneral"
NomLog = NomArch(strArchLogGen)
Set logArchLogGen = objFS.OpenTextFile(carpeta & NomLog, 8,TRUE)

objFS.Close

Ultimo logon de usuario

Creditos a Richard Mueller por el script, posteado originalmente aqui.
He modificado la propiedad LastLogon por LastLogonTimeStamp, valor que SI se replica entre DCs.



Option Explicit

Dim objRootDSE, adoConnection, adoCommand, strQuery
Dim adoRecordset, strDNSDomain, objShell, lngBiasKey
Dim lngBias, k, strDN, dtmDate, objDate, nom
Dim strBase, strFilter, strAttributes, lngHigh, lngLow

' Obtain local Time Zone bias from machine registry.
Set objShell = CreateObject("Wscript.Shell")
lngBiasKey = objShell.RegRead("HKLM\System\CurrentControlSet\Control\" _
& "TimeZoneInformation\ActiveTimeBias")
If (UCase(TypeName(lngBiasKey)) = "LONG") Then
lngBias = lngBiasKey
ElseIf (UCase(TypeName(lngBiasKey)) = "VARIANT()") Then
lngBias = 0
For k = 0 To UBound(lngBiasKey)
lngBias = lngBias + (lngBiasKey(k) * 256^k)
Next
End If
Set objShell = Nothing

' Determine DNS domain from RootDSE object.
Set objRootDSE = GetObject("LDAP://RootDSE")
strDNSDomain = objRootDSE.Get("defaultNamingContext")
Set objRootDSE = Nothing

' Use ADO to search Active Directory.
Set adoCommand = CreateObject("ADODB.Command")
Set adoConnection = CreateObject("ADODB.Connection")
adoConnection.Provider = "ADsDSOObject"
adoConnection.Open "Active Directory Provider"
adoCommand.ActiveConnection = adoConnection

' Search entire domain.
strBase = ""

' Filter on all user objects.
strFilter = "(&(objectCategory=person)(objectClass=user))"

' Comma delimited list of attribute values to retrieve.
strAttributes = "distinguishedName,sAMAccountName,lastLogonTimeStamp"

' Construct the LDAP syntax query.
strQuery = strBase & ";" & strFilter & ";" & strAttributes & ";subtree"

' Run the query.
adoCommand.CommandText = strQuery
adoCommand.Properties("Page Size") = 1000000
adoCommand.Properties("Timeout") = 6000
adoCommand.Properties("Cache Results") = False
Set adoRecordset = adoCommand.Execute

' Enumerate resulting recordset.
Do Until adoRecordset.EOF
' Retrieve attribute values for the user.
strDN = adoRecordset.Fields("sAMAccountName").Value
nom = adoRecordset.Fields("sAMAccountName").Value
' Convert Integer8 value to date/time in current time zone.
On Error Resume Next
Set objDate = adoRecordset.Fields("lastLogonTimeStamp").Value
If (Err.Number <> 0) Then
On Error GoTo 0
dtmDate = #1/1/1601#
Else
On Error GoTo 0
lngHigh = objDate.HighPart
lngLow = objDate.LowPart
If (lngLow < 0) Then
lngHigh = lngHigh + 1
End If
If (lngHigh = 0) And (lngLow = 0 ) Then
dtmDate = #1/1/1601#
Else
dtmDate = #1/1/1601# + (((lngHigh * (2 ^ 32)) _
+ lngLow)/600000000 - lngBias)/1440
End If
End If
' Display values for the user.
If (dtmDate = #1/1/1601#) Then
Wscript.Echo nom & ";Never"
Else
Wscript.Echo nom & ";" & dtmDate
End If
adoRecordset.MoveNext
Loop

' Clean up.
adoRecordset.Close
adoConnection.Close
Set adoConnection = Nothing
Set adoCommand = Nothing
Set adoRecordset = Nothing
Set objDate = Nothing

Directorios con mas de 255 caracteres

Cuando una ruta excede los 255 caracteres, no se puede borrar por limitación del sistema de archivos (permite crear, pero no eliminar). Como no encontré una herramienta, se me ocurrió lo siguiente:

dado 2 carpetas:
d:\carpetaMala
d:\carpetaVacia

robocopy /ZB /MIR d:\carpetaVacia d:\carpetaMala

con esto hacemos un "espejo" de la carpeta Vacia contra la Carpeta con datos erroneos. De ésta manera se eliminan todos los archivos y carpetas (incluyendo los inválidos).

Conexión a Escritorio Remoto

Muy buenas, amigos!

{Antes que nada quiero hacerles la aclaración de que ésto del escritorio remoto funciona sólo si en la red donde se encuentra la PC remota o la red donde estamos nosotros tenemos corriendo un SO servidor (Windows 2000 server o 2003 server, ambos en todas sus versiones), ya que es necesario que el mismo nos brinde el servicio de "Terminal Server". De lo contrario les recomiendo utilizar aplicaciones como: RAdmin o VNC, donde nosotros seremos "los clientes" y la máquina remota "el servidor"}

Acá les resumo la forma de conectarse a través del protocolo RDP (remote desktop protocol) a una máquina donde quiera que se encuentre en el planeta :-)
Lo primero es instalar en la PC remota, a la cual ustedes quieren ingresar, una aplicación que les irá actualizando la dirección IP asociada a un nombre de dominio, al final les explico de qué estamos hablando.
Para eso debemos ingresar en www.no-ip.com y registrarnos como usuario nuevo, en "Sign-up now!". Cuando ya hemos validado nuestra credencial de nuevo usuario podemos entonces crear el/los dominio/s para asociar.
Ingresamos a www.no-ip.com con nuestra credencial recién creada y vamos al apartado "Hosts / Redirects / Add", ahí debemos completar en el casillero "Hostname" el nombre que antecederá al dominio, por ejemplo: mipcremota, donde luego elegiremos el dominio: .no-ip.biz, .no-ip.org, .no-ip.info, etc. Por lo demás no hay que tocar ninguna otra opción.
Muy bien, ahora que hemos creado el dominio tenemos que descargar, según el SO que usemos, la aplicación que actualizará la IP y la asociará al dominio creado. Vamos a la pestaña "Downloads" www.no-ip.com/downloads.php?sid=5fc067745b7c1a5d1bbf52e9b81eb5a0 y bajamos entonces la aplicación para luego instalarla en la PC remota. Al iniciar la aplicación recién instalada se les pedirá que se autentiquen con la credencial de No-IP, luego se les mostrará un cuadro donde se listan todos los nombres de dominio que crearon, junto a un casillero a tildar a la izquierda de c/u. Ustedes deberán marcar el que corresponde al dominio que asociarán a dicha PC. Ésta aplicación, luego de instalada, nos ofrece ciertas opciones que podrán elegir, cada una les muestra una breve explicación al poner el puntero del mouse encima, les recomiendo activar el programa con la tercera opción, la que lo inicia como servicio del sistema y no les deja ícono en la bandeja, para evitar que los usuarios que se encuentran localmente en el equipo se den cuenta ;-)
El protocolo de Escritorio Remoto trabaja con el puerto "3389", ésto es importante saberlo porque posiblemente el firewall de nuestro SO o del antivirus lo bloquée, entonces hay que configurar la regla para abrirlo y permitir que por dicho puerto se acepten peticiones redirigidas hacia él. La creación de una nueva regla merece otro capítulo, en un futuro próximo les explicaré cómo crear reglas.
Además, al conocer la identificación del puerto, podemos habilitar la redirección de los paquetes entrantes a nuestro router hacia el puerto 3389 apuntándolo a la IP de la PC remota (ésto es obligatorio en todos los casos en que la PC remota se encuentre dentro de una LAN -Local Area Network ó Red de Área Local-). Merece otro capítulo ésta tarea, pero si no se encuentra en un grupo de trabajo (o LAN), ésta última configuración no es necesaria.
Suponiendo que ya se hizo todo como se indicó procederemos a abrir una consola para enviar un ping al dominio creado, por ejemplo: C:\ping mipcremota.no-ip.org
Si la configuración que hicimos está bien recibiremos respuesta indicándonos la IP actual del equipo (si el mismo está dentro de una LAN dicha IP será la de la red, pero eso no nos importa porque, al haber configurado el router apuntando el puerto 3389 hacia la IP del equipo remoto, nada nos afectará que el mismo tenga una IP privada y distinta de la IP de red). No intenten conectarse remotamente a un equipo si se encuentran en otro que está en la misma LAN utilizando el nombre de dominio creado porque no lograrán hacer conexión, para ello usen la IP privada o nombre de la PC.
Ahora sí, vayan a un cyber y ejecuten "Conexión a Escritorio Remoto", escriban el dominio creado, Enter y .......Vualá....!!!!! Ya podrán tener la pantalla de "login" del equipo remoto; les sugiero crear un usuario con permisos limitados y otro con privilegios de administrador, ambos con contraseña, para que protejan el acceso.
En lo que respecta a la instalación de la aplicación de No-IP, ésta es para que automáticamente actualice y asocie una nueva IP que nos otorgue nuestro proveedor de servicio de Internet (ISP), ya que lo más probable es que tengamos contratado un servicio con IP dinámica que irá cambiando día a día. En caso de tener contratada una IP fija, que es otro precio..., la instalación de ésta aplicación no es necesaria. Por una cuestión de memoria es más fácil recordar un nombre que una serie de números, es por eso que al crear un dominio no tendremos que preocuparnos por averiguar de una u otra forma la IP que le toca al equipo o red en el momento que queremos conectarnos, para eso está la aplicación de No-IP.

Bueno, eso es todo por el momento. Gracias a los amigos que leyeron éste artículo y lo consideraron útil.
Saludos.
Carlos (B. A.)

script para agregar un pc a un dominio

Lo hice en vbscript porque los clientes no tienen powershell.

'**************************************************
' Agregar PC al Dominio.
' Autor: Jorge Mestre
' Fecha: 26/06/08
' Descripción: Agrega un PC al dominio.
'
'**************************************************

'objeto para obtener el nombre de usuario actual
set net = WScript.CreateObject("WSCript.Network")
'objeto para los inputbox
Set WSHShell = WScript.CreateObject("WScript.Shell")

'Definiciones por defecto
pcDef = "testprep"
domDef = "lab.dominio.local"
OUDef = "OU=PCs"
userDef = Net.UserName
userLocalDef = "Administrator"

'inputbox PC
pc = InputBox("introduzca el HOSTNAME del PC", _
"Introducir hostname del PC",pcDef)

'saliendo por no poner ningún hostname
If pc = "..." or pc = "" Then
WScript.Echo "no se indicó ningún hostname, saliendo..."
WScript.Quit()
End If

'check pc
wscript.echo "PC: " & pc

'revisando que se llega al PC
If Ping(pc) = False then
wscript.Echo pc & " no responde a PING..."
Wscript.Quit()
end If

'inputbox Dominio
dominio = InputBox("introduzca el DOMINIO (formato DNS) " & _
"al que debe pertenecer " & pc, _
"Introducir dominio para " & pc,domDef)

'saliendo por no poner dominio
If dominio = "..." or dominio = "" Then
WScript.Echo "no se indicó ningún dominio, saliendo..."
WScript.Quit()
End If

'comprobar que se introdujeron "." con el nombre de dominio
If Instr(dominio, ".") = 0 Then
wscript.echo "el dominio debe estar indicado como " & _
"subdominio.dominio - Ejemplo: es.prueba.com"
wscript.Quit()
End If

'check dominio
wscript.echo "Dominio: " & dominio


' Introducir OU
ou = InputBox("introduzca la OU: Ej: OU=Workstations," & _
"OU=Standard","Introducir OU",OUDef)

'pedir usuario dominio / por defecto, poner el nombre
'de usuario actual en el inputbox
user = InputBox("introduzca un usuario con permisos para " & _
"agregar " & pc & " al dominio " & dominio, _
"Introducir usuario de DOMINIO",userDef)

'pedir password
msg=MsgBox("introducir el password en la consola luego de " &_
"este mensaje",0,"password en consola")
Set objPassword = CreateObject("ScriptPW.Password")
WScript.StdOut.Write "Contraseña para " & user & " (DOMINIO):"
pass = objPassword.GetPassword()

'pedir admin local pc
userLocal = InputBox("introduzca un usuario con permisos " & _
"LOCALES en " & pc & " (por ejemplo el " & _
"administrador local ","Introducir usuario LOCAL" _
,userLocalDef)

'pedir password usuario local
msg=MsgBox("introducir el password para el usuario LOCAL " & _
"de " & pc & " en la consola luego de este " & _
"mensaje",0,"password en consola de usuario LOCAL")

Set objPassword = CreateObject("ScriptPW.Password")
WScript.StdOut.Write VbCrLf & "Contraseña para " & _
userLocal & " (LOCAL):"
passLocal = objPassword.GetPassword()

' confirmar datos
confirmar=MsgBox("¿Son los siguientes datos correctos?" & _
VbCrLf & VbCrLf & "PC: " & pc & VbCrLf & _
"Dominio: " & dominio & " (" & ou & ")" & VbCrLf & _
"Usuario Dominio: " & user & VbCrLf & _
"Usuario Local: " & userLocal & VbCrLf _
,1,"Confirmar datos")

if confirmar = 2 then
msg=MsgBox("proceso cancelado",0,"Cancelado")
wscript.quit()
end if

reiniciar = MsgBox("¿Desea reiniciar " & pc & _
" luego de agregarlo a dominio?" & VbCrLf & _
VbCrLf & "(Es Necesario, " & _
"pero quizas es conveniente mas tarde)",4, _
"¿Reiniciar?")

Set objShell = CreateObject("WScript.Shell")
if reiniciar = 1 then
strCmdNetDom = "%comspec% /c netdom join " & pc & _
" /Domain:" & dominio & _
" /userD:" & user & _
" /passwordD:" & pass & _
" /OU:" & ou & _
" /userO:" & userLocal & _
" /PasswordO:" & passLocal & _
" /reboot"
else
strCmdNetDom = "%comspec% /c netdom join " & pc & _
" /Domain:" & dominio & _
" /userD:" & user & _
" /passwordD:" & pass & _
" /OU:" & ou & _
" /userO:" & userLocal & _
" /PasswordO:" & passLocal
End if

Set objExecObj = objShell.Exec(strCmdNetDom)
strResNetDom = objExecObj.StdOut.ReadAll()

resultado = MsgBox ("Resultado" & vbcrlf & strResNetDom)

' Función para hacer Ping
Function Ping(pc)
Set objShell = CreateObject("WScript.Shell")
strCmdPing = "%comspec% /c ping -n 1 " & pc & ""
Set objExecObj = objShell.Exec(strCmdPing)
strResPing = objExecObj.StdOut.ReadAll()

If Instr(strResPing, "Respuesta") > 0 Then
Ping = True
Else
Ping = False
End If
End Function