Jul 14
internet / blogs

Das ein Hoster zuverlässige Leistung bringen muss ist klar. Nutzer von Hosting Paketen stellen hier aber noch andere Anforderungen an den gemieteten "Speicherplatz im Internet".

Erläuterung der Features:

• PHP [in der aktuellen Version 5]. Ermöglicht die Ausführung von dynamischen Skripten, welche CMS & Blog Systeme [Joomla, WordPress, Shops] nutzen. Ein Verzicht auf PHP Unterstützung ist also nur bei statischen HTML Webseiten ohne dynamische Serverfunktionen möglich.

• Der Speicherplatz bei Hosting Paketen ist meist großzügig bemessen. Das Massenspeicher immer günstiger wird, macht sich langsam auch bei den Hosting Paketen und Root Servern bemerkbar. Für einen Blog beispielsweise sind 2GB eine ganze Menge und lassen jahrelanges bloggen mit Bildern zu. Hier sollte man sich nicht an USB Sticks oder ähnlichen orientieren. Beispielsweise nimmt das Blog System WordPress selbst gerade einmal ca. 10MB in Anspruch. Eine Hochstufung auf größere Pakete ist bei vielen Hostern ohne Neuinstallation möglich. Die Pakete von easyname sind hier schon ganz vernünftig zugeschnitten und das auch noch preiswert.

• Datenbanken [MySQL] sind ebenfalls für moderne Webapplikationen unabdingbar. Nur selten lagern PHP Skripte die gesammelten Daten beispielsweise in Textdateien auf dem Server aus. Dies ist unsicher und unflexibel. Die Datenbank hingegen kann mit komplexen Befehlen die Datenbank anpassen und aktualisieren.

• Der Traffic, also die Menge an ein- und ausgehenden Datentransfer sollte in den heutigen Zeiten unlimitiert bzw. hoch angesetzt sein.

• Webmail bedeutet das die angelegten Email Adressen nur im Browser zu verwalten sind. Bei POP3 / IMAP Accounts ist das Anlegen von Konten in Email Programmen und auf Smartphone App´s möglich. Ein Server-seitiger Viren- und Spamschutz wird dringend empfohlen.

Alle weiteren Optionen sind meist optionale Spielereien, die nicht unbedingt nötig sind und kaum ein Nutzer wirklich benötigt. Wer einen Homepage Kasten nutzt um eine Webseite zu erstellen, sollte wirklich besser einen Profi ans Werk lassen.

Posted by Alessandro Banzer

Twitter Facebook
May 16

I am a Windows user and working with people from around the world (India, Singapore, Mexico, USA, etc.), seeing what time it is in their location is very helpful especially if I have to call them.

Followed I will show you a very easy way to add two other times zones to your Windows clock. Well, actually it is very bad that it is restricted to two clocks, but better than nothing. First, click on the clock on the Task Bar in the lower right corner on the Taskbar. Click on Change Date and Time Settings.

Within the new opened window select the AdditionalClocks tab and check Show this Clock. Then choose the time zone you need.

If you want an additional clock, follow the same steps as you did for the first one. If you want the clocks to be displayed, check Show this clock.

In the Enter display name field, enter the city or country and click OK.

Now when you click on the Clock on the Task Bar, you will see the clocks you added and what time it is in those locations.

If you want a quick look at what time it is in different parts of the world, just hover your mouse over the clock and it will show up.

Posted by Alessandro Banzer

Twitter Facebook
Aug 29
apple / iphone

Auf Youtube bin ich auf ein Video von einer 3D-Animation Firma gestossen, die die Gerüchte um das iPhone 6 lüften. Wenn dies so entwickelt wird, bin ich der erste Käufer :-)

Posted by Alessandro Banzer

Twitter Facebook
Aug 22
programming / scripting

Wir mussten bei uns im Unternehmen eine ordentliche Übersicht über die Gruppenzugehörigkeiten aus dem AD auslesen. Da wir auf die schnelle kein passendes Tool finden konnten, haben wir dies kurzerhand selber umgesetzt. Das vbs-Tool liest alle Gruppen aus einer OU aus und listet diese mitsamt den Usern auf. Hat die Gruppe weitere Gruppen, werden auch diese aufgelöst und angezeigt. Das ganze kann im HTML mit einer Toggle-Funktion aufgeschachtelt werden.

Die Anzeige im HTML sieht folgendermassen aus:

Groupname Description Managed by Notes Members
EUR_TEST   No user account is assigned to manage this group.   Banzer Alessandro, ( EUR_RO_SIT_Mitarbeiter:
Banzer Alessandro, ( EUR_RO_SIT_Abteilungsleiter:
Boss-Banzer, ( EUR_RO_SIT_Manager:
BigBoss-Banzer,
)
,
)
, Another User,
)
, Another User,

Die einzelnen Gruppenbezeichnungen (EUR_RO_SIT_Mitarbeiter, etc.) sind klickbar und können auf- bzw. zugeklickt werden. Somit sieht man auch aus welcher Gruppe jemand erbt. Hier ein Beispiel.

Der Programmcode findet sich samt dem Beispiel hier.

Wichtig ist, dass die entsprechende OU im vbs in der Zeile 24 verändert wird.

strQuery = "<;(objectClass=group);distinguishedName;subtree">LDAP://OU=TEST,OU=Groups,OU=Produktiv,DC=europe,DC=admins,DC=li>;(objectClass=group);distinguishedName;subtree"

Dies ist der Ausgangspunkt für die Suche der Gruppen.

Sollten Fragen oder Unklarheiten mit dem Script auftauchen, so bitte direkt via Kommentar melden.

Posted by Alessandro Banzer

Twitter Facebook
Aug 17
programming / scripting

Nach langer Zeit habe ich nun endlich wieder einmal etwas nützliches um Euch zu präsentieren. Nach einem Datadownload vom SAP ins Excel sind am Ende einer Zahl jeweils zwei Leerzeichen. Auf Grund dieser Leerzeichen wird die Zahl nicht als Zahl, sondern als Text erkannt. Da wir dies jedoch für einen SVERWEIS benötigten, muss die Zahl auch wirklich eine Zahl sein. Im ganzen handelt es sich jedoch um über 10'000 Datensätzen, so dass dies nicht von Hand gemacht werden kann. Aus diesem Grund habe ich dazu ein kleines Visual Basic Script verwendet:

  1. Sub Clean()
  2.  
  3.     Dim c As Range
  4.     For Each c In Range("A1:A100")
  5.         c.Value = Application.WorksheetFunction.Clean(Trim(c.Value))
  6.     Next c
  7.    
  8. End Sub

In der Zeile 4 muss die Range der "falschen" Zahlen angegeben werden. Das Script entfernt folglich alle Leerzeichen.

Wichtig zu Wissen:

Ist das Feld nicht eine reine Zahl, sondern z.B. eine Artikelnummer die im Format:

ABC 0010

ist, dann kann dieses Script auch angewendet werden. Es entfernt nur die Leerzeichen am Ende der Zelle und nicht diese dazwischen.

Bei Fragen oder Unklarheiten einfach diesen Beitrag kommentieren.

Posted by Alessandro Banzer

Twitter Facebook
Apr 7
programming / scripting

Heute hatten wir das Problem, dass ein User in seinem Excel-Dokument über 200 Diagramme hatte. Nach einer bestimmten Anzahl an Diagrammen hatte Excel ein Problem und meldete "Es können keine weiteren neuen Schriftarten dieser Arbeitsmappe hinzugefügt werden". Nun hatten wir die Möglichkeit, bei jedem Diagramm die automatische Skalierung von Hand zu entfernen. Da dies aber zu Aufwändig ist/war, haben wir dazu ein Marko verwendet. Um die Skalierung von Hand zu entfernen, habe ich hier das Vorgehen: "Diagrammfläche formatieren > Font > "Automatisch skaklieren" deaktivieren". Vorallem bei grossen Dokumenten mit vielen Diagrammen empfiehlt es sich, dies über ein Makro zu tun.

  1. Public Sub TurnOffAutoScaleFont()
  2.         Dim wksWorksheet As Worksheet
  3.         Dim objChartObject As ChartObject
  4.         Dim objChart As Chart
  5.         Dim intCount As Integer
  6.         For Each wksWorksheet In ActiveWorkbook.Worksheets
  7.                 For Each objChartObject In wksWorksheet.ChartObjects
  8.                         intCount = intCount + 1
  9.                         objChartObject.Chart.ChartArea.AutoScaleFont = False
  10.                 Next objChartObject
  11.         Next
  12.         For Each objChart In ActiveWorkbook.Charts
  13.                 objChart.ChartArea.AutoScaleFont = False
  14.                 intCount = intCount + 1
  15.         Next
  16.         MsgBox CStr(intCount) & " Diagramme geändert."
  17. End Sub

Posted by Alessandro Banzer

Twitter Facebook
Mar 22

Bei uns am Standort setzen wir den Sharepoint Server 2007 ein. Bisher war es so, dass dieser nur selten benutzt wurde. Dies möchte wir nun weiter ausbauen und auch als zentrale Datenablage den Business  zur Verfügung stellen.

In einem ersten Schritt versuchen wir, einige nützlichen Dokumente zusammen zu tragen und an einem zentralen Ort anzulegen. Damit wir die Files nicht kopieren müssen, wollen wir diese innerhalb des Sharepoints verlinken. Bei vielen Foren konnte ich jedoch keine schlaue Antwort zu dieser Frage finden, so war die Antwort dann doch recht häufig, dass dies „Out of the Box“ nicht so einfach geht.

Nach einigem Suchen bin ich dann doch noch auf eine Idee gestossen, wie man dieses Problem lösen kann. Dies behandelt das Verlinken von Dokumenten innerhalb von MOSS.

Hier habe ich eine kleine Anleitung, wie man dies umsetzen kann:

Damit man eine Verlinkung aktivieren kann, muss in der Document Library die Verwendung von Content Types aktiviert werden. Dies macht man über “Document Library Settings > Advanced Settings > Allow management of content types”.   Diese Checkbox muss auf YES geschalten warden.

Anschliessen kann man unter den Document Library Settings einen neuen Contet Type definieren/hinzufügen. Hierzu wählt man „Add from existing site content types“.

Aus der Gruppe „Document Content Types“ wählt man dann den Typ „Link to a Document“ und bestätigt die Eingabe mit OK.

Nun kann der neuerzeugte Content Type unter New > Link to a Document verwendet werden.

Nun kann der Name des Dokuments und der Link eingetragen werden. Nach dem Erstellen steht der Shortcut zur Verfügung und kann verwendet werden.

Dies ist eine recht einfache Verlinkung ohne wirkliche „Intelligent“. Wird das Hauptdokument gelöscht oder verschoben, bleibt ein toter Link zurück. Auch kann das File nicht direkt über „Download a copy“ heruntergeladen werden, stattdessen wird eine Weiterleitungsseite zum download angeboten.

Posted by Alessandro Banzer

Twitter Facebook
Mar 18

Ich war lange Zeit auf der Suche nach einer Export Funktion für die Windows Suche, die ja doch recht gut arbeitet. Nach einigen Versuchen bin ich dann auf SysExporter von Nisoft gestossen. Mit dem SysExporter lassen sich ganz einfach die Suchergebnisse in eine TXT Datei (XML, CSV, etc.) schreiben und somit weiter verwenden.

 

Posted by Alessandro Banzer

Twitter Facebook
Mar 16

Diese Woche mussten wir ein Backup-Script für einen Server einrichten. Das grosse Problem war, dass wir nur bestimmte Dateitypen kopieren sollten, da die Dateimenge sonst viel zu gross wäre. Kurzerhand haben wir ein Robocopy-Script geschrieben, welches nur gewisse Dateitypen kopiert. Das Script ist so aufgebaut, dass die Variablen zu beginn gesetzt werden. Somit habe ich eine bessere Übersicht über das Script und kann Änderungen ganz einfach durchführen. Die Dateitypen die ich kopieren möchte, habe ich im in ( .. ) drin. Dies sind hier geom, geo, memo, db und mgo. Diese können beliebig angepasst werden. Beispielsweise auf doc, xls, ppt.

  1. set bkpquelle="E:\Data"
  2. set bkpziel="\\backup.admins.li\Daten"
  3. set log="/LOG+:E:\Data_logs\bkp_%date%.log"
  4. set robo="C:\cmdx\Robocopy\robocopy.exe"
  5.  
  6. FOR %%i in (geom geo memo db mgo) do %robo% %bkpquelle% %bkpziel% /E /PURGE *.%%i %log%

Hier noch eine kurze Beschreibung zu den Syntaxten:

/E		Kopiert Subverzeichnise, auch die die leer sind.
/PURGE		Löscht nicht mehr vorhandene (an der Quelle) Verzeichnise/Files am Zielort.
/LOG+:		Output geht in ein Logfile. Das + bedeutet, dass das File jeweils weiter geschrieben wird.

Posted by Alessandro Banzer

Twitter Facebook
Mar 16
programming / scripting

Vorhin habe ich ein Script gepostet, mit welchem man User Objekte auslesen kann. Das selbe habe ich nun auch noch für die Computer Objekte. Hier lese ich jedoch nur den Namen, Beschreibung, Last Logon, OS, OS Version, OS Hotfix und OS Servicepack aus. Weitere Informationen könnten natürlich ebenfalls ausgelsen werden, sind für mich jedoch nicht relevant. Auch in diesem Beispiel arbeite ich wieder mit einer Text Datei, die mir die entsprechende OU angibt. Der Inhalt der Text Datei sieht folgendermassen aus:

OU=Clients,OU=EUROPE,OU=Computers,OU=Produktiv,DC=admins,DC=li

Anbei nun das VBS Script:

  1. '=================================================================  
  2. '  
  3. ' NAME: Get_All_Computers.vbs  
  4. ' AUTHOR: Alessandro Banzer  
  5. ' DATE  : 16.03.2011  
  6. '  
  7. '=================================================================  
  8.  
  9. On Error Resume Next
  10.  
  11. Set objFSO = CreateObject("Scripting.FileSystemObject")
  12. Set objExcel = CreateObject("Excel.Application")
  13.  
  14. objExcel.Visible = True
  15. objExcel.Workbooks.Add
  16.  
  17. Set objWorksheet = objWorkbook.Worksheets(3)
  18. Set colSheets = objWorkbook.Sheets
  19.  
  20.  
  21. ' Textfile für OU Scan - Textfile muss angepasst werden
  22. Dim arrFileLines()
  23. i = 0
  24. Set objFile = objFSO.OpenTextFile("ou_computer.txt", 1)
  25.  
  26. Do Until objFile.AtEndOfStream
  27.      Redim Preserve arrFileLines(i)
  28.      arrFileLines(i) = objFile.ReadLine
  29. i = i + 1
  30. Loop
  31. objFile.Close
  32.  
  33. x = 2
  34. oucount = 1
  35.  
  36. For l = Ubound(arrFileLines) to LBound(arrFileLines) Step -1
  37.        
  38.         Set objWorksheet = objWorkbook.Worksheets(1)
  39.         objWorksheet.Activate
  40.  
  41.         objExcel.ActiveSheet.Cells(1, 1).Value = "Name"
  42.         objExcel.ActiveSheet.Cells(1, 2).Value = "Description"
  43.         objExcel.ActiveSheet.Cells(1, 3).Value = "LastLogon"
  44.         objExcel.ActiveSheet.Cells(1, 4).Value = "Operating System"
  45.         objExcel.ActiveSheet.Cells(1, 5).Value = "OS Version"
  46.         objExcel.ActiveSheet.Cells(1, 6).Value = "OS Hotfix"
  47.         objExcel.ActiveSheet.Cells(1, 7).Value = "OS Servicepack"
  48.        
  49.         Const ADS_UF_ACCOUNTDISABLE = 2
  50.         Const ADS_UF_PASSWORD_EXPIRED = &h800000
  51.         Const ADS_ACETYPE_ACCESS_DENIED_OBJECT = &H6
  52.         Const CHANGE_PASSWORD_GUID = "{ab721a53-1e2f-11d0-9819-00aa0040529b}"
  53.  
  54.         Set objHash = CreateObject("Scripting.Dictionary")
  55.  
  56.         objHash.Add "ADS_UF_DONT_EXPIRE_PASSWD", &h10000
  57.  
  58.         Set objConnection = CreateObject("ADODB.Connection")
  59.         objConnection.Open "Provider=ADsDSOObject;"
  60.         Set objCommand = CreateObject("ADODB.Command")
  61.         objCommand.ActiveConnection = objConnection
  62.  
  63.         objCommand.Properties("Page Size") = 1000
  64.         objCommand.Properties("Searchscope") = ADS_SCOPE_SUBTREE
  65.  
  66. objCommand.CommandText = _
  67.     "<GC://" & arrFileLines(l) & ">;(objectCategory=Computer)" & _
  68.         ";userAccountControl,distinguishedName,cn;subtree"
  69.  
  70. Set objRecordSet = objCommand.Execute
  71.         Do Until objRecordset.EOF
  72.        
  73.                 intUserAccountControl = objRecordset.Fields("userAccountControl")
  74.            
  75.                 If NOT intUserAccountControl AND ADS_UF_ACCOUNTDISABLE Then
  76.            
  77.                 For Each Key In objHash.Keys           
  78.                 set objcomp = getObject ("LDAP://" & objRecordset.Fields("distinguishedName").value)
  79.             lastlogon = objcomp.LastLogin
  80.                 dtmValue = objcomp.description
  81.         cnName = objcomp.cn
  82.         dnName = objRecordset.Fields("distinguishedName").value
  83.                
  84.         dnnamesumcount = Len(dnname)
  85.         dnnamecount = InStr(1,dnname,"OU")
  86.         cut = dnnamesumcount - dnnamecount
  87.         dncut = Right(dnname, cut)             
  88.                
  89.                 objExcel.ActiveSheet.Cells(x, 1).Value = cnName
  90.                 objExcel.ActiveSheet.Cells(x, 2).Value = dtmValue
  91.                 objExcel.ActiveSheet.Cells(x, 3).Value = lastlogon
  92.                 objExcel.ActiveSheet.Cells(x, 4).Value = objcomp.operatingSystem
  93.                 objExcel.ActiveSheet.Cells(x, 5).Value = objcomp.operatingSystemVersion
  94.                 objExcel.ActiveSheet.Cells(x, 6).Value = objcomp.operatingSystemHotfix
  95.                 objExcel.ActiveSheet.Cells(x, 7).Value = objcomp.operatingSystemServicePack
  96.        
  97.                 x = x + 1              
  98.          
  99.             Next
  100.         End If
  101.          objRecordset.MoveNext
  102.         Loop
  103.  
  104. objConnection.Close
  105. oucount = oucount + 1
  106.  
  107. Next
  108. Set objRange = objWorksheet.UsedRange
  109. objRange.EntireColumn.Autofit()
  110. objExcel.close
  111. wscript.echo "done !"

Bei Fragen oder Unklarheiten, oder sollte eine Verbesserung anstehen, so bitte melden.

Posted by Alessandro Banzer

Twitter Facebook
Mar 16
programming / scripting

Ich hab hier ein kleines VBS Script geschrieben, welches alle User Objekte aus einer entsprechenden OU ausliest. Im selben Verzeichnis, wo das VBS Script liegt, muss auch eine Datei ou.txt erstellt werden. In dieser Text Datei ist die entsprechende OU zu definieren, die ausgelesen wird. Inhalt meiner OU.txt ist folgender:

OU=Standard Users,OU=EUROPE,OU=Users,OU=Produktiv,DC=admins,DC=li

Das Script schreibt die Informationen zu den User Objekten in eine Excel Instanz, welche zuerst geöffnet wird.

  1. '=================================================================  
  2. '  
  3. ' NAME: Get_All_Users.vbs  
  4. ' AUTHOR: Alessandro Banzer  
  5. ' DATE  : 16.03.2011  
  6. '  
  7. '=================================================================  
  8.  
  9. On Error Resume Next
  10.  
  11. Set objFSO = CreateObject("Scripting.FileSystemObject")
  12. Set objExcel = CreateObject("Excel.Application")
  13.  
  14. objExcel.Visible = True
  15. objExcel.Workbooks.Add
  16.  
  17. Set objWorksheet = objWorkbook.Worksheets(3)
  18. Set colSheets = objWorkbook.Sheets
  19.  
  20. ' Textfile für OU Scan - Textfile muss angepasst werden
  21. Dim arrFileLines()
  22. i = 0
  23. Set objFile = objFSO.OpenTextFile("ou.txt", 1)
  24.  
  25. Do Until objFile.AtEndOfStream
  26.      Redim Preserve arrFileLines(i)
  27.      arrFileLines(i) = objFile.ReadLine
  28. i = i + 1
  29. Loop
  30. objFile.Close
  31.  
  32. x = 2
  33. oucount = 1
  34. mustchangepw = 1
  35. ischangedpw = 1
  36.  
  37. For l = Ubound(arrFileLines) to LBound(arrFileLines) Step -1
  38.        
  39.         Set objWorksheet = objWorkbook.Worksheets(1)
  40.         objWorksheet.Activate
  41.  
  42.         objExcel.ActiveSheet.Cells(1, 1).Value = "Full Name"
  43.         objExcel.ActiveSheet.Cells(1, 2).Value = "Description"
  44.         objExcel.ActiveSheet.Cells(1, 3).Value = "Office"
  45.         objExcel.ActiveSheet.Cells(1, 4).Value = "Telephone number"
  46.         objExcel.ActiveSheet.Cells(1, 5).Value = "Mobile"
  47.         objExcel.ActiveSheet.Cells(1, 6).Value = "Fax"
  48.         objExcel.ActiveSheet.Cells(1, 7).Value = "Email"
  49.         objExcel.ActiveSheet.Cells(1, 8 ).Value = "Web Page"
  50.         objExcel.ActiveSheet.Cells(1, 9).Value = "Street"
  51.         objExcel.ActiveSheet.Cells(1, 10).Value = "City"
  52.         objExcel.ActiveSheet.Cells(1, 11).Value = "Postal Code"
  53.         objExcel.ActiveSheet.Cells(1, 12).Value = "Country"
  54.         objExcel.ActiveSheet.Cells(1, 13).Value = "User Logon name"
  55.         objExcel.ActiveSheet.Cells(1, 14).Value = "Windows 2k Name"
  56.         objExcel.ActiveSheet.Cells(1, 15).Value = "Logon Script"
  57.         objExcel.ActiveSheet.Cells(1, 16).Value = "Home Folder"
  58.         objExcel.ActiveSheet.Cells(1, 17).Value = "Home Dir Drive"
  59.         objExcel.ActiveSheet.Cells(1, 18).Value = "Title"
  60.         objExcel.ActiveSheet.Cells(1, 19).Value = "Department"
  61.         objExcel.ActiveSheet.Cells(1, 20).Value = "Company"
  62.         objExcel.ActiveSheet.Cells(1, 21).Value = "Last Password Change"
  63.         objExcel.ActiveSheet.Cells(1, 22).Value = "Organisation Unit"
  64.     objExcel.ActiveSheet.Cells(1, 23).Value = "Pw Age"
  65.     objExcel.ActiveSheet.Cells(1, 24).Value = "Pw Info "
  66.         objExcel.ActiveSheet.Cells(1, 25).Value = "Last Logon"
  67.         objExcel.ActiveSheet.Cells(1, 26).Value = "Account Disabled"
  68.         objExcel.ActiveSheet.Cells(1, 27).Value = "Terminal Services Profil"
  69.         objExcel.ActiveSheet.Cells(1, 28).Value = "Manager"
  70.         objExcel.ActiveSheet.Cells(1, 29).Value = "Max Storage"
  71.         objExcel.ActiveSheet.Cells(1, 30).Value = "Locked?"
  72.        
  73.         Const ADS_UF_ACCOUNTDISABLE = 2
  74.         Const ADS_UF_PASSWORD_EXPIRED = &h800000
  75.         Const ADS_ACETYPE_ACCESS_DENIED_OBJECT = &H6
  76.         Const CHANGE_PASSWORD_GUID = "{ab721a53-1e2f-11d0-9819-00aa0040529b}"
  77.  
  78.         Set objHash = CreateObject("Scripting.Dictionary")
  79.  
  80.         objHash.Add "ADS_UF_DONT_EXPIRE_PASSWD", &h10000
  81.  
  82.         Set objConnection = CreateObject("ADODB.Connection")
  83.         objConnection.Open "Provider=ADsDSOObject;"
  84.         Set objCommand = CreateObject("ADODB.Command")
  85.         objCommand.ActiveConnection = objConnection
  86.  
  87.         objCommand.Properties("Page Size") = 1000
  88.         objCommand.Properties("Searchscope") = ADS_SCOPE_SUBTREE
  89.  
  90. objCommand.CommandText = _
  91.     "<GC://" & arrFileLines(l) & ">;(objectCategory=User)" & _
  92.         ";userAccountControl,distinguishedName,cn;subtree"
  93.  
  94. Set objRecordSet = objCommand.Execute
  95.         Do Until objRecordset.EOF
  96.        
  97.                 intUserAccountControl = objRecordset.Fields("userAccountControl")
  98.            
  99.                 If NOT intUserAccountControl AND ADS_UF_ACCOUNTDISABLE Then
  100.            
  101.                 For Each Key In objHash.Keys           
  102.                 set objuser = getObject ("LDAP://" & objRecordset.Fields("distinguishedName").value)
  103.             lastlogon = objuser.LastLogin
  104.                 dtmValue = objuser.PasswordLastChanged
  105.         cnName = objuser.cn
  106.         dnName = objRecordset.Fields("distinguishedName").value
  107.                
  108.         dnnamesumcount = Len(dnname)
  109.         dnnamecount = InStr(1,dnname,"OU")
  110.         cut = dnnamesumcount - dnnamecount
  111.         dncut = Right(dnname, cut)
  112.                
  113.                 objExcel.ActiveSheet.Cells(x, 1).Value = cnName
  114.                 objExcel.ActiveSheet.Cells(x, 2).Value = objuser.description
  115.                 objExcel.ActiveSheet.Cells(x, 3).Value = objuser.physicalDeliveryOfficeName
  116.                 objExcel.ActiveSheet.Cells(x, 4).Value = objuser.telephoneNumber
  117.                 objExcel.ActiveSheet.Cells(x, 5).Value = objuser.mobile
  118.                 objExcel.ActiveSheet.Cells(x, 6).Value = objuser.facsimiletelephonenumber
  119.                 objExcel.ActiveSheet.Cells(x, 7).Value = objuser.mail
  120.                 objExcel.ActiveSheet.Cells(x, 8 ).Value = objuser.wWWHomePage
  121.                 objExcel.ActiveSheet.Cells(x, 9).Value = objuser.StreetAddress
  122.                 objExcel.ActiveSheet.Cells(x, 10).Value = objuser.l
  123.                 objExcel.ActiveSheet.Cells(x, 11).Value = objuser.postalCode
  124.                 objExcel.ActiveSheet.Cells(x, 12).Value = objuser.co
  125.                 objExcel.ActiveSheet.Cells(x, 13).Value = objuser.userPrincipalName
  126.                 objExcel.ActiveSheet.Cells(x, 14).Value = objuser.sAMAccountName
  127.                 objExcel.ActiveSheet.Cells(x, 15).Value = objuser.scriptPath
  128.                 objExcel.ActiveSheet.Cells(x, 16).Value = objuser.homeDirectory
  129.                 objExcel.ActiveSheet.Cells(x, 17).Value = objuser.homeDrive
  130.                 objExcel.ActiveSheet.Cells(x, 18).Value = objuser.title
  131.                 objExcel.ActiveSheet.Cells(x, 19).Value = objuser.department
  132.                 objExcel.ActiveSheet.Cells(x, 20).Value = objuser.company
  133.                 objExcel.ActiveSheet.Cells(x, 21).Value = Left(dtmValue,10)
  134.                 objExcel.ActiveSheet.Cells(x, 22).Value = arrFileLines(l)
  135.                
  136.         datepw = Left(dtmValue,10)
  137.                 today = Now
  138.                 'today1 = "19."
  139.                 days = DateDiff ("d", datepw, today)
  140.                        
  141.                 objExcel.ActiveSheet.Cells(x, 23).Value = days
  142.                
  143.                 If objHash(Key) And intUserAccountControl Then
  144.                         objExcel.ActiveSheet.Cells(x, 24).Value = "PW don't expires"
  145.                         objExcel.Cells(x, 24).Interior.ColorIndex = 3
  146.                 else
  147.                         objExcel.ActiveSheet.Cells(x, 24).Value = "PW expires"
  148.                         objExcel.Cells(x, 24).Interior.ColorIndex = 4
  149.                 End if
  150.                         If days > 90 Then
  151.                            objExcel.Cells(x, 23).Interior.ColorIndex = 3
  152.                    mustchangepw = mustchangepw + 1
  153.                         Else
  154.                            objExcel.Cells(x, 23).Interior.ColorIndex = 4
  155.                            ischangedpw = ischangedpw + 1
  156.                         End if
  157.        
  158.  
  159.         objExcel.ActiveSheet.Cells(x, 25).Value = Left(lastlogon,10)
  160.                
  161.                 If intUserAccountControl AND ADS_UF_ACCOUNTDISABLE Then
  162.                         objExcel.ActiveSheet.Cells(x, 26).Value = "Account disabled"
  163.                         objExcel.Cells(x, 26).Interior.ColorIndex = 3
  164.                 End If
  165.                
  166.                 objExcel.ActiveSheet.Cells(x, 27).Value = objuser.userParameters               
  167.                 objExcel.ActiveSheet.Cells(x, 28).Value = objuser.manager
  168.                 objExcel.ActiveSheet.Cells(x, 29).Value = objuser.maxStorage
  169.                
  170.                 If objUser.IsAccountLocked = True Then
  171.                         objExcel.ActiveSheet.Cells(x, 30).Value = "Account locked out"
  172.                         objExcel.Cells(x, 30).Interior.ColorIndex = 3
  173.                 End If
  174.                
  175.                 x = x + 1              
  176.          
  177.             Next
  178.         End If
  179.          objRecordset.MoveNext
  180.         Loop
  181.  
  182. objConnection.Close
  183.  
  184. oucount = oucount + 1
  185.  
  186. Next
  187. Set objRange = objWorksheet.UsedRange
  188. objRange.EntireColumn.Autofit()
  189. objExcel.close
  190. wscript.echo "done !"

Bei Fragen oder Unklarheiten zum Script, oder sollten Verbesserungen angebracht werden, so bitte melden.

Posted by Alessandro Banzer

Twitter Facebook
Nov 4

Um in Windows 7 einen Domain-User mit Autologon auszustatten, gehen wir wie folgt vor.

1. Gehe auf Start > Ausführen und gib "regedit" ein. Damit gelangen wir in den Registry Editor.
2. Wir gehen zum folgenden Schlüssel: HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon
3. Nun verändern wir einige Registry Strings. Sollten diese nicht vorhanden sein, legen wir diese neu an. Dazu rechtsklick und auf Neu > String.

DefaultUserName  wird mit dem Autologon Username gesetzt
DefaultPassword  das dazugehörige Passwort
DefaultDomainName mit der dazugehörigen Domain
AutoAdminLogon  auf Wert 1

4. Als nächstes löschen wir noch den Key AutoLogonCount und schliessen die Registry.

Nach einem Neustart sollte sich der User automatisch anmelden und die "Operation" ist somit abgeschlossen. Die selbe Methode sollte aus meiner Sicht auch unter früheren Windows Versionen, wie z.B. Windows XP, funktionieren.

Posted by Alessandro Banzer

Twitter Facebook
Sep 28
programming / scripting

Heute mussten wir eine Massenänderung an AD-Objekten vornehmen. Da ich zu faul war um dies bei jedem User händisch zu machen, haben wir uns ein kleines Script geschrieben. Dieses Script verändert alle User-Objekte in der entsprechenden OU. Das Script ist eigentlich selbsterklärend.

  1. Const ADS_PROPERTY_CLEAR = 1 Set OU = GetObject(&quot;LDAP://OU=Standard Users,OU=Users,DC=admins,DC=li&quot;) For Each oUser In OU If oUser.Class = &quot;user&quot; Then oUser.PutEx ADS_PROPERTY_CLEAR, &quot;userParameters&quot;, 0 oUser.SetInfo End If Next Wscript.echo &quot;All Users has been updated!&quot; Wscript.Quit

Mit der If-Schlaufe If oUser.Class = "user" wird überprüft, ob das Objekt wirklich ein User-Objekt ist. Es werden nur diese verändert. In diesem Beispiel setze ich das Property userParameters auf NULL zurück. Dies sind die Terminal Services Profiles.

Posted by Alessandro Banzer

Twitter Facebook
Sep 27

Wir hatten heute das Problem, dass man auf einem alten HP G3-Server nicht von einer DVD booten konnte, da der Server nur ein CD-Laufwerk hat. Um dennoch das Windows 7 auf dem Server zu installieren (Ja ich habe meine Gründe wieso keine Server-Version), habe ich mir einen bootfähigen USB Stick mit dem Windows 7 Image erstellt. Ich möchte Euch dies natürlich nicht vorenthalten und zeige Euch wie dies geht.

Zuerst habe ich mir mit Diskpart (diskpart.exe liegt im c:\windows\system32) den USB Stick auf FAT32 formatiert. Dazu habe ich das entsprechende Volumen selektiert und dann formatiert und aktiviert. Hier die Kommandozeilen-Befehle:

diskpart
list vol
select vol 4
format FS=FAT32 LABEL="Win7Srv" QUICK
active
exit

Abschliessend muss man die ISO-Datei auf die erstellte Partition entpacken. Dies geht am einfachsten mit dem 7-Zip. Wer Diskpart unter Windows XP nutzt muss den Bootsektor noch separat auf den Stick schreiben. Dies geht mit dem Befehl:

<Stick>:\boot\bootsect.exe /nt60 <Stick>:

Beispiel:

E:\boot\bootsect.exe /nt60 E:

Voraussetzung ist natürlich, dass der Server oder PC booten von einem USB-Stick unterstützt. Bei meinem getestet Gerät war dies jedoch problemlos der Fall und die Installation ging einiges schneller als mit einer CD oder DVD.

Posted by Alessandro Banzer

Twitter Facebook
Sep 16

Seit ein paar Tagen bin ich stolzer Besitzer eines neuen iPhone 4 und bin vollkommen begeistert von dem Teil. Ich hatte nun mehr als 2 Jahre das iPhone 3G und war damit schon sehr zufrieden. Das neue iPhone ist enorm schnell und das Display eine Klasse für sich. Auch die Qualität der Kamera hat sich stark verbessert, was mich nun dazu veranlasst, auch mal ein paar Fotos zu schiessen.

Ich hab mir dann auch schon Gedanken gemacht was mein nächstes Handy sein wird. Durch einen Kollegen bin ich recht schnell fündig geworden. Aber seht selbst.

 

Posted by Alessandro Banzer

Twitter Facebook

(Page 1 of 5, totaling 73 entries)