Jump to content

~~~Dexter~~~

Members
  • Gesamte Inhalte

    15
  • Registriert seit

  • Letzter Besuch

Beiträge erstellt von ~~~Dexter~~~

  1. @dieschatten

     

    Suchst Du soetwas? Folgendes VB-Skript liest die Mitglieder einer Gruppe aus und speichert diese in die Textdatei UserList.txt. Den LDAP-Pfad solltest Du für Deine Umgebung anpassen.

     

    Const ForWriting = 2
    
    Set BenutzerDatei = CreateObject("Scripting.FileSystemObject").CreateTextFile("UserList.txt", ForWriting, True)
    
    For Each str In GetObject("LDAP://CN=MeineGruppe,OU=MeineOU,DC=domaene,DC=local").Member
     Set Benutzer =  GetObject("LDAP://" & str)
     With Benutzer
       BenutzerDatei.WriteLine .GivenName & " " & .SN & " " & sAMAccountName
     End With
    Next
    
    BenutzerDatei.Close
    

  2. @All

     

    Im einem Windows-Netzwerk ist folgendes Problem aufgetreten:

     

    Wenn ein Domänenbenutzer auf einem Rechner mit Windows XP SP 2 einen USB-Stick verwenden möchte, kommt die Meldung, dass man in der Administratorengruppe sein muss, um die neue Hardwarekomponente installieren zu können.

     

    Ich möchte jetzt nicht beigehen, und mich auf jeden Rechner mit admininstrative Rechte anmelden, damit der Stick installiert wird und als normaler Benutzer verwenden kann. Bei 1.000 Computern an 25 unterschiedlichen Standorten schier unmöglich. Außerdem möchte ich nicht über die Gruppenrichtlinien das Recht zur Geräteinstallation den Benutzern zuweisen. Es ist mit Sicherheit die schnellste, aber auch die unsicherste Lösung,

     

    Kann es auch darin liegen, wie so ein USB-Stick formatiert ist? (Dass der Stick als Festplatte und nicht als Wechselmedium erkannt wird?)

     

    Für Lösungvorschläge bin ich sehr dankbar.

    Danke voraus.

  3. @fjoerdman

     

    Hier hast Du:

    DruckerName = "\\Server\prt"
    Set WshNetzwerk = WScript.CreateObject("WScript.Network")
    Set Drucker = WshNetzwerk.EnumPrinterConnections
    Vorhanden = False
    
    For i = 0 To Drucker.Count - 1 Step 2
     If LCase(Drucker.Item(i + 1)) = LCase(DruckerName) Then
       Vorhanden = True
       Exit For
     End If
    Next
    
    If Vorhanden = False Then
     WshNetzwerk.AddWindowsPrinterConnection DruckerName
     WshNetzwerk.SetDefaultPrinter(DruckerName)
    End If
    

     

    Oder das ganze mit WMI.

    DruckerName = "\\Server\prt"
    Set WMI = GetObject("winmgmts:")
    Vorhanden = False
    
    For Each Drucker In WMI.ExecQuery("SELECT * FROM Win32_Printer")
     If Drucker.DeviceID = DruckerName Then
       Vorhanden = True
       Exit For
     End If
    Next
    
    If Vorhanden = False Then
     WMI.Get("Win32_Printer").AddPrinterConnection(DruckerName)
     WMI.Get("Win32_Printer.DeviceID='" & DruckerName  & "'").SetDefaultPrinter
    End If
    

  4. @red0

     

    Hier benutze ich den WinNT-Provider, um die Mitglieder der Administratorengruppe auf dem Zielhost auszulesen.

     

    Option Explicit
    Dim Computerliste, Computer, Benutzer
    Computerliste = Array("PC01", "PC02", PC03)
    
    For Each Computer In Computerliste
     WScript.echo Computer
     For Each Benutzer In GetObject("WinNT://" & Computer & "/Administratoren").Members
       WScript.Echo vbTab & Benutzer.name
     Next
     WScript.Echo
    Next
    

  5. @Blade1981

     

    Der Textinhalt ist in Unicode formatiert. Damit Du auch solche Dateien verabeitet kannst, ändere die Textzeile: DateiInhalt = FSO.OpenTextFile(Datei, LESEND).ReadAll in DateiInhalt = FSO.OpenTextFile(Datei, LESEND, False, TriStateTrue).ReadAll.

    Zusätzlich muss Du am Funktionsanfang die Konstante TriStateTrue = -1 definieren.

  6. @Blade1981

     

    Mir fällt leider nicht ad hoc ein, wo ran es liegen kann. Ich habe das Skript nochmal ausgeführt, die veränderten Dateienn mitgelogt. Bei mir verändert das Skript ini- und reg-Dateien. Kann es vielleicht daran liegen, dass sich die Dateien in Verwendung befinden? Müsste ich nach dem Wochenende noch mal ausprobieren.

  7. @Blade1981

    Ich habe es mal eben aus dem Ärmel geschüttelt. :D

     

    Die CreateShortcut(strPathname)-Methode des WshShell-Objekts erstellt eine neue Verknüpfung oder öffnet eine vorhandene Verknüpfung.

     

    Hier ist ein Beispiel

    Set WshShell = WScript.CreateObject("WScript.Shell")
    Desktop = WshShell.SpecialFolders("Desktop") 
    Set Verknuepfung = WshShell.CreateShortcut(Desktop & "\Shortcut Script.lnk")
    
    With Verknuepfung
     .TargetPath = WScript.ScriptFullName
     .WindowStyle = 1
     .Hotkey = "CTRL+SHIFT+F"
     .IconLocation = "notepad.exe, 0"
     .Description = "Shortcut Script"
     .WorkingDirectory = Desktop
     .Save
    End With
    

  8. @Blade1981

     

    Hier hast Du meinen Lösungsvorschlag zu Deinem Problem. Leider ist es in VBSkipt nicht möglich, einen Zeiger auf die Zeile, in die die Entsprechung gefunden wurde, zu bekommen. Deshalb muss die Datei neuerstellt werden.

     

    Option Explicit
    Function SuchenUndErsetzenInDatei(Verzeichnispfad, Suche, Ersetze)
     Const LESEND = 1
     Const SCHREIBEND = 2
     Dim FSO, Verzeichnis, Unterverzeichnis, Datei, DateiInhalt, Dateierweiterung, RegAusdruck
    
     Set FSO = CreateObject("Scripting.FileSystemObject")
     Set Verzeichnis = FSO.GetFolder(Verzeichnispfad)
     Set RegAusdruck = CreateObject("VBScript.RegExp")
    
     For Each Datei In Verzeichnis.Files
       Dateierweiterung = LCase(FSO.GetExtensionName(Datei))
       If Dateierweiterung = "bat" Or Dateierweiterung = "ini" Or Dateierweiterung = "reg" Then
         With RegAusdruck
           .Pattern = Suche
           .IgnoreCase = True
           .Global = True
           'On Error Resume Next
           DateiInhalt = FSO.OpenTextFile(Datei,LESEND).ReadAll
           If .Test(DateiInhalt) Then
             FSO.OpenTextFile(Datei, SCHREIBEND, True).Write .Replace(DateiInhalt, Ersetze)
           End If
           'On Error Goto 0
         End With
       End If
     Next
    
     For Each Unterverzeichnis In Verzeichnis.Subfolders
       SuchenUndErsetzenInDatei Unterverzeichnis, Suche, Ersetze
     Next
    End Function
    
    SuchenUndErsetzenInDatei "C:\Dokumente und Einstellungen\Administrator\", "hallo", "guten tag"
    

  9. @edocom

     

    ADO (ActiveX Data Objects) verwendet den ADSI OLE DB-Provider, um Informationen aus Active Directory zu lesen. Die Einträge des Ergebnissatzes wird dann in eine Excel-Arbeitsmappe gespeichert.

     

    Option Explicit
    Const SUCHFILTER = "(objectCategory=user)"
    Const ATTRIBUTE = "sAMAccountName, sn, givenName, telephoneNumber"
    Const SUCHBEREICH = "subtree"
    Dim Arbeitsmappe, DBVerbindung, DBAbfrage, Ergebnissatz, Excel, Spalte, Suchbasis
    
    Set DBVerbindung = CreateObject("ADODB.Connection")
    With DBVerbindung
     .Provider = "ADsDSOObject"
    '  .Properties("User ID") = ""
    '  .Properties("Password") = ""
     .Open "Active Directory Provider"
    End With
    
    Set DBAbfrage = CreateObject("ADODB.Command")
    DBAbfrage.ActiveConnection = DBVerbindung
    Suchbasis = "<LDAP://" & GetObject("LDAP://rootDSE").Get("defaultNamingContext") & ">"
    
    With DBAbfrage
     .CommandText = Suchbasis & ";" & SUCHFILTER & ";" & ATTRIBUTE & ";" & SUCHBEREICH
     .Properties("Page Size") = 1000
     .Properties("Timeout") = 30
     .Properties("Cache Results") = False
    End With
    
    Set Excel = CreateObject("Excel.Application")
    Excel.Visible = True
    Set Arbeitsmappe = Excel.Workbooks.Add()
    Excel.Cells(1, 1).Value = "Anmeldename"
    Excel.Cells(1, 2).Value = "Name"
    Excel.Cells(1, 3).Value = "Vorname"
    Excel.Cells(1, 4).Value = "Telefon-Nr"
    
    Set Ergebnissatz = DBAbfrage.Execute
    Ergebnissatz.MoveFirst
    Spalte = 1
    While Not Ergebnissatz.EOF
     Spalte = Spalte + 1
     Excel.Cells(Spalte, 1).Value = Ergebnissatz.Fields("sAMAccountName").Value
     Excel.Cells(Spalte, 2).Value = Ergebnissatz.Fields("sn").Value
     Excel.Cells(Spalte, 3).Value = Ergebnissatz.Fields("givenName").Value
     Excel.Cells(Spalte, 4).Value = Ergebnissatz.Fields("telephoneNumber").Value
     Ergebnissatz.MoveNext
    WEnd
    DBVerbindung.Close
    Arbeitsmappe.SaveAs("c:\Active Directory Info.xls")
    Excel.Quit
    

  10. @fjordman

     

    Wieso benutzt Du das Kommandozeilentool "net use" in Dein VB-Skript? Mit Hilfe der MapNetworkDrive-Methode kannst Du freigegebene Netzlaufwerke zum Computersystem hinzufügen.

     

    Syntax:

    object.MapNetworkDrive(strLocalName, strRemoteName, [bUpdateProfile], [strUser], [strPassword])

     

    So trennst Du alle vorhandene Netzlaufwerke.

    Set objNetworkDrives = objNet.EnumNetworkDrives
    
    For i = 0 To objNetworkDrives.Count -1 Step 2
     objNet.RemoveNetworkDrive objNetworkDrives.Item(i), True, True
    Next
    

×
×
  • Neu erstellen...