+ Auf Thema antworten
Zeige Ergebnis 1 bis 5 von 5

Thema: Offene TODO's

  1. #1

    Standard Offene TODO's

    @dieseyer

    AD & VBS - WinTuCKonfig.hta - Prozedur 'PCListePlusADScan()'

    Code:
    OPTION EXPLICIT
    Dim arrPCAlle   'Zeichenketten-Array
    Dim strPC   'Zeichenkette
    Dim ErrorOccurred  'Boolesch
    ErrorOccurred = FALSE
    
    arrPCAlle = PCListePlusADScan("ou=laptops,OU=domain hardware")
    If Not ErrorOccurred Then 
      For Each strPC in arrPCAlle
        WScript.Echo strPC
      next
    End If
    '*** ENDE Hauptskript
     
    '*************************************************************************************************************
    '*
    '* Prozedurname ....: PCListePlusADScan
    '*
    '* -----------------------------------------------------------------------------------------------------------
    '*
    '* Beschreibung ....: Liefert die Domänencomputer in einem Array zurück. STANDARD: Gesamte Domäne
    '* Parameter .......: Argument(Syntax <[OU]|[Suchbereich]>) Als Zeichenkette
    '* Rückgabewert ....: Computer Als Zeichenketten-Array
    '*
    '*************************************************************************************************************
     
    Function PCListePlusADScan(ByVal Argument)
      '*** Konstanten
      Const INDEX_OU  = 0
      Const INDEX_SCOPE  = 1
      Const ADS_SCOPE_BASE  = 0
      Const ADS_SCOPE_ONELEVEL = 1
      Const ADS_SCOPE_SUBTREE = 2
     
      '*** Variabeln
      Dim RootDSE   'RootDSE-Objekt
      Dim ADObject   'Active Directory-Object
      Dim AdoCnn   'AdoConnection-Objekt
      Dim AdoCmd   'AdoCommand-Objekt
      Dim AdoRst   'AdoRecordSet-Objekt
      Dim OUDetected  'Boolesch
      Dim ScopeDetected  'Boolesch
      Dim ValidParameter  'Boolesch
      Dim ADsPath   'Zeichenkette
      Dim SearchScope  'Zeichenkette
      Dim Arguments   'Zeichenketten-Array
      Dim Computer()  'Zeichenketten-Array
      Dim ErrorNumber  'Ganzahl
      Dim i    'Ganzzahl
     
      '*** Bindung an den Stamm der Verzeichnisses aufbauen
      ON ERROR RESUME NEXT
      Set RootDSE = GetObject("ldap://rootDSE")
      If Err.Number <> 0 Then 
        ErrorOccurred = True
        ErrorNumber = Err.Number
        Err.Clear
        ON ERROR GOTO 0
        WScript.Echo ADSIFehler(ErrorNumber)
        EXIT FUNCTION
      End If
      '*** ENDREGION
     
      '*** Variabeln initialisieren
      ADsPath = UCase("LDAP://" & RootDSE.Get("rootDomainNamingContext"))
      SearchScope = ADS_SCOPE_SUBTREE
      OUDetected = FALSE
      ScopeDetected = FALSE
      ValidParameter = FALSE
      '*** ENDREGION
     
      '*** Visual Basic Skript unterstützt keine optionalen Parameter!
      Arguments = Split(Argument, "|")
      Select Case UBound(Arguments)
        Case -1
          OUDetected = TRUE
          ScopeDetected = TRUE
          ValidParameter = TRUE
        Case 0
          OUDetected = TRUE
          ValidParameter = TRUE
        Case 1
          OUDetected = TRUE
          ScopeDetected = TRUE
          ValidParameter = TRUE
        Case Else
          ErrorOccurred = True
          WScript.Echo = "Falsche Anzahlt von Argumenten wurde übergeben. " & Join(Arguments)
          EXit Function
      End Select
     
      If ValidParameter Then
        If OUDetected Then
          If Not Arguments(INDEX_OU) = "" Then
            ADsPath = UCase("LDAP://" & Arguments(INDEX_OU) & "," &  RootDSE.Get("rootDomainNamingContext"))
          End If
        End If
        If ScopeDetected Then
          If Not Arguments(INDEX_SCOPE) = "" Then
            Select Case LCase(Arguments(INDEX_SCOPE))
              Case "base"
                SearchScope = ADS_SCOPE_BASE
              Case "onelevel"
                SearchScope = ADS_SCOPE_ONELEVEL
              Case Else
                ErrorOccurred = True
                WScript.Echo "Der Suchbereich '" & Arguments(INDEX_SCOPE) & "' wird nicht unterstützt!"
                Exit Function
             End Select
          End If
        End If
      End If
      '*** ENDREGION
      
      '*** Die Gültigkeit des ADsPfades überprüfen. 
      ON ERROR RESUME NEXT
      Set ADObject = GetObject(ADsPath)
      If Err.Number <> 0 Then
        WScript.Echo "Der Pfad '" & ADsPath & "' ist ungültig!"
        ErrorOccurred = True
        ErrorNumber = Err.Number
        Err.Clear
        ON ERROR GOTO 0
        WScript.Echo ADSIFehler(ErrorNumber)
        EXIT FUNCTION
      End If
      Set ADObject = Nothing
      '*** ENDREGION
     
      '*** Nach AD-Objekte mit der Abfragetechnologie Active Data Object suchen.
      Set AdoCnn = CreateObject("ADODB.Connection")
      AdoCnn.Provider = "ADsDSOObject"
      AdoCnn.Open "Active Directory Provider"
      Set AdoCmd = CreateObject("ADODB.Command")
      Set AdoCmd.ActiveConnection = AdoCnn
      With AdoCmd
        .CommandText = "SELECT Name FROM '" & ADsPath & "' WHERE objectClass='computer'"
        .Properties("Page Size") = 1000
        .Properties("Searchscope") = SearchScope
        .Properties("Sort On") = "Name"
        Set AdoRst = .Execute
      End With
      '*** ENDREGION
     
      '*** Array für die RÜckgabe aufbereiten
      i = 0
      Do Until AdoRst.EOF
        ReDim Preserve Computer(i)
        Computer(i) = AdoRst.Fields("Name").Value
        AdoRst.MoveNext
        i = i + 1
      Loop
      '*** ENDREGION
     
      PCListePlusADScan = Computer
    End Function ' ==> 'PCListePlusADScan
     
    '*************************************************************************************************************
    '*
    '* Prozedurname ....: ADSIFehler
    '*
    '* -----------------------------------------------------------------------------------------------------------
    '*
    '* Beschreibung ....: Wertet die Fehlernummer aus
    '* Parameter .......: Int Errorcode
    '* Rückgabewert ....: Fehlerbeschreibung Als Zeichenkette
    '*
    '* Notiz ...........: Allgemeine ADSI-Fehler (http://msdn.microsoft.com/en-us/libr...40(VS.85).aspx)
    '*                    LDAP-Fehler für ADSI (http://msdn.microsoft.com/en-us/libr...28(VS.85).aspx)
    '*                    LDAP-Fehler für ADSI 2.0 (http://msdn.microsoft.com/en-us/libr...30(VS.85).aspx)
    '*
    '*************************************************************************************************************
    Function ADSIFehler(ByVal ErrorCode)
      Dim AdsErrorDict  'Dictionary-Objekt
      Dim HexErrorCode  'Hex-Zahl
      Dim ErrorDescription  'ZeichenKette
      Dim ErrorMessage  'Zeichenkette
     
      Set ADsErrorDict = CreateObject("Scripting.Dictionary")
      HexErrorCode = Hex(ErrorCode)
     
      ADsErrorDict.Add "800401E4", "INVALID_SYNTAX"
      ADsErrorDict.Add "80005000", "E_ADS_BAD_PATHNAME"
      ADsErrorDict.Add "80005001", "E_ADS_INVALID_DOMAIN_OBJECT"
      ADsErrorDict.Add "80070005", "E_ADS_INSUFFICIENT_RIGHTS"
      ADsErrorDict.Add "80070035", "NETWORKPATH_NOT_FOUND"
      ADsErrorDict.Add "8007052E", "LDAP_INVALID_CREDENTIALS"
      ADsErrorDict.Add "8007054B", "LDAP_DOMAIN_DOESNT_EXIST"
      ADsErrorDict.Add "80072020", "LDAP_OPERATIONS_ERROR"
      ADsErrorDict.Add "80072030", "LDAP_NOT_SUCH_OBJECT"
     
      Select Case AdsErrorDict(HexErrorCode)
        Case "INVALID_SYNTAX"
          ErrorDescription = "Ungültiger Syntax!"
        Case "E_ADS_BAD_PATHNAME"
          ErrorDescription = "Ungültiger ADSI-Pfadnamen!"
        Case "E_ADS_INVALID_DOMAIN_OBJECT"
          ErrorDescription = "Unbekanntes ADSI-Domänenobjekt!"
        Case "E_ADS_INSUFFICIENT_RIGHTS"
          ErrorDescription = "Nicht ausreichende Zugriffsrechte!"
        Case "NETWORKPATH_NOT_FOUND"
          ErrorDescription =  "Netzwerkpfad wurde nicht gefunden!"
        Case "LDAP_INVALID_CREDENTIALS"
          ErrorDescription = "Ungültige Anmeldeinformationen!"
        Case "LDAP_DOMAIN_DOESNT_EXIST"
          ErrorDescription = "Domäne nicht verfügbar!"
        Case "LDAP_OPERATIONS_ERROR"
          ErrorDescription = "Fehler bei der Operation aufgetreten!"
        Case "LDAP_NOT_SUCH_OBJECT"
          ErrorDescription = "Objekt ist nicht vorhanden!"
        Case Else
          ErrorDescription = "Unbekannter Fehler!"
      End Select
     
      ErrorMessage = "ADSI-Fehler" & vbCrLf & _
        "Beschreibung: " & vbTab & ErrorDescription & vbCrLf & _
        "Nr. (dez): " & vbTab & ErrorCode & vbCrLf & _
        "Nr. (hex): " & vbTab & "0x" & HexErrorCode & vbCrLf
     
      ADSIFehler = ErrorMessage
    End Function '--> ADSIFehler

  2. #2

    Standard AW: Offene TODO's

    @dieseyer

    OS/FireWall/Policy - Erforderliche TestPC-Konfiguration für WinTuC

    Diese Dienste sollten auf dem Zielrechner wie folgt konfiguriert sein:

    - Arbeitsstationsdienst: (Starttyp = Automatisch)
    - COM+-Ereignissystem: (Starttyp = Manuell)
    - RAS-Verbindungsverwaltung: (Starttyp = Manuell)
    - Remoteprozeduraufruf (RPC): (Starttyp = Automatisch)
    - Remote-Registrierung: (Starttyp = Automatisch)
    - RPC-Locator: (Starttyp = Manuell)
    - Server: (Starttyp = Automatisch)
    - Treibererweiterung für Windows Verwaltungsinstrumentation: (Starttyp = Manuell)
    - Verwaltung für automatische RAS-Verbindung: (Starttyp = Manuell)
    - Windows-Verwaltungsinstrumentation: (Starttyp = Automatisch)
    - WMI-Leistungsadapter: (Starttyp = Manuell)

    Code:
    'WinXP-PC-Einstellungen
    '-----------------------
     
    OPTION EXPLICIT
    Dim WshShell
    Set WshShell = WScript.CreateObject("WScript.Shell")
     
    '*** Die "klassische" Authentifizierung von Netzwerkanmeldungen verwenden!
     
    WshShell.RegWrite "HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Control\Lsa\forceguest", "00000000", "REG_DWORD"
    WshShell.RegWrite "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Lsa\forceguest", "00000000", "REG_DWORD"
     
    '*** "Distributed Common Object Model" aktivieren!
     
    WshShell.RegWrite "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Ole\EnableDCOM", "Y", "REG_SZ"
     
    '*** Windows-Firewall konfigurieren
     
    '->Remoteverwaltung zulassen
    Wshshell.Run("netsh firewall set service type=REMOTEADMIN mode=ENABLE")
     
    '-> Ports öffnen
    WshShell.Run("netsh firewall add portopening protocol=TCP port=135 name=DCOM_TCP mode=ENABLE")
    WshShell.Run("netsh firewall add portopening protocol=TCP port=445 name=SMB_TCP mode=ENABLE")
    WshShell.Run("netsh firewall add portopening protocol=TCP port=24158 name=WMI_TCP mode=ENABLE")

  3. #3

    Lightbulb Mindestkonfiguration für Windows XP Firewall

    @dieseyer

    Abschließende Experimente im Testnetzwerk haben folgende Mindestkonfiguration für die Firewall ergeben. Da mich die Konsolenfenster stören, verwendet das Skript das HNetCfg.FwMgr COM-Objekt.

    Code:
    '* Windows Firewall Reference
    '* http://msdn.microsoft.com/en-us/libr...52(VS.85).aspx
    '* ------------------------------------------------------------
     
    OPTION EXPLICIT
    Const NET_FW_SCOPE_LOCAL_SUBNET = 1           'Nur eigenes Netzwerk (Subnetz)
    Const NET_FW_SERVICE_FILE_AND_PRINT = 0       'Datei- und Druckerfreigabe
    Dim FirewallManager
     
    ON ERROR RESUME NEXT
    Set FirewallManager = CreateObject("HNetCfg.FwMgr")
    If Err <> 0 Then
      WScript.Echo "Windows Firewall kann nicht bestimmt werden!"
      WScript.Quit(1)
    End If
    ON ERROR GOTO 0
     
    '*** Remoteverwaltung aktivieren
    '* -----------------------------
    '* -> DCE Endpoint Resolution (TCP 135)
    '* -> SMB über TCP (TCP 445)
     
    With FirewallManager.LocalPolicy.CurrentProfile.RemoteAdminSettings
      If Not .Enabled Then
        .Enabled = TRUE
        .Scope = NET_FW_SCOPE_LOCAL_SUBNET
      End If
    End With
     
    '*** Datei- und Druckerfreigabe aktivieren
    '* ---------------------------------------
    '* -> NetBIOS-Sitzungsdienst (TCP 139)
    '* -> SMB über TCP (TCP 445)
    '* -> NetBIOS-Namensdienst (UDP 137)
    '* -> NetBIOS-Datagrammdienst (UDP 138)
     
    With FirewallManager.LocalPolicy.CurrentProfile.Services.Item(NET_FW_SERVICE_FILE_AND_PRINT)
      If Not .Enabled Then
        .Enabled = TRUE
        .Scope = NET_FW_SCOPE_LOCAL_SUBNET 
      End If
    End with

  4. #4

    Standard WinTuCKonfig.hta - Prozedur 'PCNameAusZwischenablage()'' - Syntaxprüfung

    @dieseyer

    Der Computername darf laut MSDN nicht länger als 15 Zeichen sein. Der Standardzeichensatz umfaßt Buchstaben, Zahlen und die Zeichen ! @ # $ % ^ & ' ) ( . - _ { } ~ .

    Code:
    '*********************************************************
    Function GueltigerPCName(ByVal Hostname) 'Boolean
    '*********************************************************
      Dim RegAusdr
      Set RegAusdr = New RegExp
      RegAusdr.Pattern = "^[-a-zA-Z0-9!@#\$\%\^&'\(\)\._\{\}~]{1,15}$"
     
      If RegAusdr.Test(Hostname) Then
        GueltigerPCName = TRUE
      Else
        GueltigerPCName = FALSE
      End If
    End Function '--> GueltigerPCName

  5. #5

    Standard AW: Offene TODO's

    Nun ich mal wieder . . .

    http://wintuc.com/wintuc_v0.9.f.exe gibts Ende Okt. 2009:

    PCName- und IPAdr.-Syntax-Prüfung ist eingebaut - wird in WinTuC_cfg.xml konfiguuriert.

    Prozedur PCListePlusADScan() ist mir momentan zu aufwendig - WEIL das ganze so funktionieren soll: 'man' schlägt beim Kunden auf, schließt sein Notebook an, ist nicht Mitglied der Domäne . . . Wie kriege ich 'einfach so' (zur Auswahl) angezeigt, welche ADs es gibt? Im Anschluß soll eine Suche erfolgen, die z.B. so "..Lager.Computer.." oder so "..Server.Service.." gestartet wird.
    Bis dahin: PC-Liste aus AD exportieren und in WinTuC einlesen.

    Erforderliche TestPC-Konfiguration für WinTuC ist dokumentiert (und auch auf dieseyer.de).

    "Funktion die ... alle PCs ... in der Liste ... auf einmal entfernen" ist implementiert.

    Interresant finde ICH auch Automatik-Modus und EmailVersenden - ist nur in der WinTuC_cfg.xml dokumentiert.

    Und TasksPrüfen gibt es auch.

    In FreierFestplattenSpeicher lässt sich ein Minimum des freien Platzes als Schwellwert einstellen: absolut (z.B. 4GB) oder relativ (z.B. 15%)

    "geöffneten Dateien vom server anzuzeigen" macht wenig sinn (finde ich) - eher anders herum: Dateien dürfen nicht (nie) geöffnet sein / müssen geöffnet sein. Dazu könnte sich doch mal jemand an ein 'Programm' und eine 'Aufgabe' - oder?

    Unter Win7 gibt es CreateObject( "UserAccounts.CommonDialog" ) für BrowseForFolder (Datei-Öffnen-Dialog) nicht mehr - hat jemand eine Idee?
    Bis dann - dieseyer

    Und zwischendurch: http://dieseyer.de
    Leichter zu merken: http://wsh-vbs.de

+ Auf Thema antworten

Forumregeln

  • Es ist dir nicht erlaubt, neue Themen zu verfassen.
  • Es ist dir nicht erlaubt, auf Beiträge zu antworten.
  • Es ist dir nicht erlaubt, Anhänge hochzuladen.
  • Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.