1. Dashboard
  2. Mitglieder
    1. Letzte Aktivitäten
    2. Benutzer online
    3. Team
    4. Mitgliedersuche
  3. Forenregeln
  4. Forum
    1. Unerledigte Themen
  • Anmelden
  • Registrieren
  • Suche
Alles
  • Alles
  • Artikel
  • Seiten
  • Forum
  • Erweiterte Suche
  1. AutoIt.de - Das deutschsprachige Forum.
  2. Mitglieder
  3. Strikers

Beiträge von Strikers

  • Homeshare & Profilshare automatisch erstellen & freigeben

    • Strikers
    • 31. Oktober 2014 um 14:42

    nein,dass ist auch keine Lösung. Es muss eine "standalone" Lösung sein ohne nochmals andere Programme zu involvieren.

    Das script läuft ja soweit und funktioniert auch, es hat halt noch paar kleine Fehler, wie das ich keine Freigabe erstellen kann per NetShareAdd...

  • Homeshare & Profilshare automatisch erstellen & freigeben

    • Strikers
    • 31. Oktober 2014 um 12:43

    Hallo oernzz,

    dass ist leider keine Lösung, denn ich arbeite teils auf anderen Rechnern und auch andere Admins müssen das Tool benutzen können.

  • Homeshare & Profilshare automatisch erstellen & freigeben

    • Strikers
    • 31. Oktober 2014 um 09:26

    Hallo, ich versuche nun schon eine Weile ein eigentlich simples Problem zu lösen, stehe aber wohl etwas auf'm Schlauch und brauche Hife.


    Ich programmiere ein Tool das mir die tägliche Arbeit in unserer AD erleichtern soll, unter anderem ein Abschnitt der einen neuen Benutzer anlegt und automatisch dessen Home & Profile Ordner erstellen soll.

    Das Problem ist nun, dass ich die Funktion nicht als der angemeldete Benutzer durchführen kann, sondern mit einem höher Berechtigten Benutzer, mit dem ich mich lokal zum normalen arbeiten aber nicht anmelden soll. Etwas lässt sich per cmd regeln, aber nicht so wie ich es brauche. Schöner wäre es mit Autoit Boardmitteln ohne über cmd zu gehen, aber das geht wohl nicht so einfach.

    Spoiler anzeigen
    [autoit]


    #Region ;**** Directives created by AutoIt3Wrapper_GUI ****
    #AutoIt3Wrapper_Outfile=Create_H-P.exe
    #EndRegion ;**** Directives created by AutoIt3Wrapper_GUI ****

    [/autoit] [autoit][/autoit] [autoit]

    #include <NetShare.au3>

    [/autoit] [autoit][/autoit] [autoit]

    $domadmin = "admin"
    $adminpw = "password"
    $domain = "domain"

    [/autoit] [autoit][/autoit] [autoit]

    $name_first = "Vorname"
    $name_last = "Nachname"
    $country = "GERMANY"

    [/autoit] [autoit][/autoit] [autoit]

    $homeserver = "HOMESERVER"
    If $country = "GERMANY" Then
    $profileserver = "PROFILESERVER01"
    Else
    $profileserver = "PROFILESERVER02"
    EndIf

    [/autoit] [autoit][/autoit] [autoit]

    $homeshare = "\\" & $homeserver & "\userdir\" & $country & "\" & $name_first & "." & $name_last & ".MyDocs"
    $profileshare = "\\" & $profileserver & "\userdir\" & $country & "\" & $name_first & "." & $name_last

    [/autoit] [autoit][/autoit] [autoit]

    $CMDchf="cmd.exe /k md " & $homeshare
    $CMDcpf="cmd.exe /k md " & $profileshare
    $CMDhacl='cmd.exe /c cacls "' & $homeshare & '" /e /g "' & $name_first & '"."' & $name_last & '":C"'
    $CMDpacl='cmd.exe /c cacls "' & $profileshare & '" /e /g "' & $name_first & '"."' & $name_last & '":C"'

    [/autoit] [autoit][/autoit] [autoit]

    RunAsWait($domadmin, $domain, $adminpw,"",$CMDchf,@TempDir,@SW_SHOW)
    RunAsWait($domadmin, $domain, $adminpw,"",$CMDcpf,@TempDir,@SW_SHOW)
    RunAsWait($domadmin, $domain, $adminpw,"",$CMDhacl,@TempDir,@SW_SHOW)
    RunAsWait($domadmin, $domain, $adminpw,"",$CMDpacl,@TempDir,@SW_SHOW)

    [/autoit] [autoit][/autoit] [autoit]

    _Net_Share_ShareAdd($profileserver, $name_first & "." & $name_last & "$",0 , "V:\userdir\" & $country & "\" & $name_first & "." & $name_last)

    [/autoit]

    Der _Net_ShareAdd funktioniert so nicht, da der angemeldete Benutzer keine Rechte dazu hat nur wenn ich das Programm über "ausführen als..." starte. Wobei der Share dann erstellt wird aber keine Berechtigung vergeben wird, der Ordner sollte dann für jeden Berechtigung haben, nur das kann ich irgendwie nicht setzten.

    Was mir nicht gelingt ist eine vorherige Abfrage ob der Ordner & Freigabe denn ggf. schon vorhanden ist um so nicht die Funktion zu durchlaufen.

    Diese Funktion funktioniert selbst bei "ausführen als..." nicht und gibt immer Rückmeldung, dass ein Ordner erstellt wird:

    Spoiler anzeigen
    [autoit]


    If _Net_Share_ShareCheck($profileserver, $name_first & "." & $name_last & "$") = -1 Then
    ; Create a share on the local computer
    ConsoleWrite("Creating Share " & $name_first & "." & $name_last & "$")
    If @error Then MsgBox($MB_SYSTEMMODAL, "Information", "Share add error : " & @error)
    Else
    ConsoleWrite("Share already exists")
    EndIf

    [/autoit]


    Gibt es vielleicht eine ganz andere, bessere Lösung dies zu realisieren?


    Danke schon mal!

  • Remote Session abfragen

    • Strikers
    • 1. Oktober 2014 um 13:43

    Hallo, ich bin gerade dabei ein kleines Tool zu basteln, dass mir im ersten Schritt alle angemeldeten Benutzer und Sessions Infos von verschiedenen Terminal Servern auslesen soll.

    Hier habe ich aber schon ein Problem, dies richtig in eine Funktion zu bringen.

    Auschnitt aus dem Code:

    Spoiler anzeigen
    [autoit]


    ;######### Variablen
    Local $TS = "TSA,TSB,TSC,TSD" ; All TS listed with "," separated
    Local $TSfile = "C:\test.log" ;Liste der TS Benutzer
    Local $TSarrSize
    Local $TSarr = StringSplit($TS, ",") ; The string in data will be split into an array everywhere "," is encountered
    Local $PID, $Ret = ""

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    ;######### Funktionen
    ;TS Liste ($TSfile) aktualisieren; Auslesen aller angemeldeten Benutzer an allen TS

    [/autoit] [autoit][/autoit] [autoit]

    Func RefreshList()
    If IsArray($TSarr) Then
    $TSarrSize = UBound($TSarr); get array size
    For $i = 0 to $TSarrSize - 1; subtract 1 from size to prevent an out of bounds error
    ConsoleWrite($TSarr[$i] & @LF)
    $PID = Run("quser.exe /server:" & $TSarr[$i], '', @SW_HIDE, 0x2 + 0x4)
    While 1
    $Ret &= StdoutRead($PID) & StderrRead($PID)
    If @error Then ExitLoop
    WEnd
    FileWrite($TSfile,$Ret)
    Next
    EndIf
    EndFunc

    [/autoit]


    Ich habe mehrere Server, die abgefragt werden müssen. Leider habe ich wohl ein Denkfehler in der Funktion.
    Es soll die Liste der Server die oben im $TS array stehen nacheinander nach den Benutzern abgefragt werden, denke die beste und schnellste Lösung ist per quser, oder?
    Dann sollen die Benutzer mit Session Info in die $TSfile eingetragen werden, wenn allerdings eine Fehlermeldung zurückkommt bzw. der Server nicht erreichbar war, soll er dieses nicht in die Datei schreiben. Bei mir schreibt er nun bei einem Server der Offline ist:

    Spoiler anzeigen


    {ErrorPrintf(): LoadString failed, Error 15105, (0x00003B01)}
    Fehler [15105]:Im Cache des Ressourcenladeprogramms ist kein MUI-Eintrag geladen.
    Fehler [1722]:Der RPC-Server ist nicht verfgbar.

    Wie kann ich dies am besten lösen? Hat jemand eine bessere, einfacherre Variante diese Abfrage zu lösen?

    Bin für jeden Denkanstoß dankbar!

  • Computer Specs Abfrage in der Domäne

    • Strikers
    • 24. Mai 2011 um 14:35

    Hallo, ich versuche ein Script zu schreiben,dass mir ermöglicht eine Abfrage aller angeschlossener PCs der Domäne zu loggen.

    Wie mache ich es nun, dass ich einen IP Bereich eingeben kann und nicht jede einzel? Also eine Art schleife um das ganze und dann die IP's hochzählen.
    Bei der Abfrage von "Size" Festplattengröße bekomme ich meist nur eine leere Antwort, woran kann das liegen?

    Für Verbesserung / leichtere Variante bin ich dankbar!


    Dim $strComputer, $objWMIService
    Const $wbemFlagReturnImmediately = 0x10
    Const $wbemFlagForwardOnly = 0x20


    $strComputer = "10.10.10.10"
    $objWMIService = ObjGet("winmgmts:{(RemoteShutdown)}//" & $strComputer & "\root\CIMV2")

    ;########## WMI Abfrage 1
    Local $colItems = ""
    $colItems = $objWMIService.ExecQuery("Select * from Win32_BIOS")

    For $objItem in $colItems
    Local $serial = $objItem.SerialNumber
    Next

    ;########## WMI Abfrage 2
    Local $colItems = ""
    $colItems = $objWMIService.ExecQuery("Select * from Win32_ComputerSystem")

    For $objItem in $colItems
    Local $model = $objItem.Model
    Local $memory = $objItem.TotalPhysicalMemory
    Local $manufactory = $objItem.Manufacturer
    Local $pcname = $objItem.Caption
    Local $user = $objItem.UserName
    Next

    ;########## WMI Abfrage 3
    Local $colItems = ""
    $colItems = $objWMIService.ExecQuery("Select * from Win32_LogicalDisk")

    For $objItem in $colItems
    Local $hddsize = $objItem.Size
    Next

    ;########## WMI Abfrage 4
    Local $colItems = ""
    $colItems = $objWMIService.ExecQuery("Select * from Win32_OperatingSystem")

    For $objItem in $colItems
    Local $os = $objItem.Caption
    Local $ossp = $objItem.CSDVersion
    Next

    $file = FileOpen("log.txt", 1)
    FileWriteLine($file, $pcname & "," & $os & "," & $ossp & "," & $model & "," & $serial & "," & $memory & "," & $hddsize & "," & $user )
    FileClose($file)


    Gruß

  • Drucker installieren

    • Strikers
    • 6. Dezember 2010 um 14:05

    Hallo! Ich habe es nun soweit hinbekommen, dass er mit aus dem array der installierten Drucker die neuen Namen zuweist.
    Jedoch erscheint mir das etwas kompliziert, vielleicht geht das noch eleganter, da ich ja diesen Code Schnipsel noch in mein Programm aufnehmen muss:

    [autoit]


    ; Alte Drucker auslesen
    Dim $Drucker[10]
    Dim $installierteDrucker

    [/autoit][autoit][/autoit][autoit]

    For $i=1 to 10
    $Drucker[$i] = RegEnumVal("HKEY_CURRENT_USER\Software\Microsoft\Windows NT\CurrentVersion\PrinterPorts",$i)
    If @error <> 0 then ExitLoop
    Next

    [/autoit][autoit][/autoit][autoit]

    $Drucker[0]=$i-1

    [/autoit][autoit][/autoit][autoit]

    For $j = 1 to $Drucker[0]
    $installierteDrucker &= $Drucker[$j] & @CRLF
    Next
    ; Ende Alte Drucker auslesen

    [/autoit][autoit][/autoit][autoit]

    ;MsgBox(0,"Installierte Drucker", $installierteDrucker)

    [/autoit][autoit][/autoit][autoit]

    Global $aPrinterName[47] = ["DS08", "DS02", "DS03", "DW03"] ;neue Druckernamen
    Global $aOldPrinterName[47] = ["LAV8", "LAS2", "LAV3", "LAR03"] ;alte unique Druckernamen
    Global $aInstalledPrinter[10] = ["laser LAV3", "Drucker HP LAR03", "HR34 LAV8", "OfficeJet 356 LAS2", "Local Drucker"] ;auf den PC installierte Drucker inkl. der unique Druckernamen

    [/autoit][autoit][/autoit][autoit]

    For $i = 0 to 47 Step 1
    ;StringInStr(zu durchsuchender String, enthaltenes Wort) bei Übereinstimmung mache folgendes....
    if StringInStr($aInstalledPrinter[$i], $aOldPrinterName[0]) <> 0 then MsgBox(0,"Test", $aInstalledPrinter[$i] & " --> " & $aPrinterName[0])
    if StringInStr($aInstalledPrinter[$i], $aOldPrinterName[1]) <> 0 then MsgBox(0,"Test", $aInstalledPrinter[$i] & " --> " & $aPrinterName[1])
    if StringInStr($aInstalledPrinter[$i], $aOldPrinterName[2]) <> 0 then MsgBox(0,"Test", $aInstalledPrinter[$i] & " --> " & $aPrinterName[2])
    if StringInStr($aInstalledPrinter[$i], $aOldPrinterName[3]) <> 0 then MsgBox(0,"Test", $aInstalledPrinter[$i] & " --> " & $aPrinterName[3])
    if StringInStr($aInstalledPrinter[$i], $aOldPrinterName[4]) <> 0 then MsgBox(0,"Test", $aInstalledPrinter[$i] & " --> " & $aPrinterName[4])
    if StringInStr($aInstalledPrinter[$i], $aOldPrinterName[5]) <> 0 then MsgBox(0,"Test", $aInstalledPrinter[$i] & " --> " & $aPrinterName[5])
    if StringInStr($aInstalledPrinter[$i], $aOldPrinterName[6]) <> 0 then MsgBox(0,"Test", $aInstalledPrinter[$i] & " --> " & $aPrinterName[6])
    if StringInStr($aInstalledPrinter[$i], $aOldPrinterName[7]) <> 0 then MsgBox(0,"Test", $aInstalledPrinter[$i] & " --> " & $aPrinterName[7])
    if StringInStr($aInstalledPrinter[$i], $aOldPrinterName[8]) <> 0 then MsgBox(0,"Test", $aInstalledPrinter[$i] & " --> " & $aPrinterName[8])
    if StringInStr($aInstalledPrinter[$i], $aOldPrinterName[9]) <> 0 then MsgBox(0,"Test", $aInstalledPrinter[$i] & " --> " & $aPrinterName[9])
    if StringInStr($aInstalledPrinter[$i], $aOldPrinterName[10]) <> 0 then MsgBox(0,"Test", $aInstalledPrinter[$i] & " --> " & $aPrinterName[10])
    next

    [/autoit][autoit][/autoit][autoit][/autoit]
  • Drucker installieren

    • Strikers
    • 6. Dezember 2010 um 11:52

    So, habe noch etwas weiter probiert und diesen Quellcode erstellt (geht so aber leider noch nicht)

    [autoit]


    ; Alte Drucker auslesen
    Dim $Drucker[10]
    Dim $installierteDrucker

    [/autoit][autoit][/autoit][autoit]

    For $i=1 to 10
    $Drucker[$i] = RegEnumVal("HKEY_CURRENT_USER\Software\Microsoft\Windows NT\CurrentVersion\PrinterPorts",$i)
    If @error <> 0 then ExitLoop
    Next

    [/autoit][autoit][/autoit][autoit]

    $Drucker[0]=$i-1

    [/autoit][autoit][/autoit][autoit]

    For $j = 1 to $Drucker[0]
    $installierteDrucker &= "'$Drucker[$j]', "
    Next
    ; Ende Alte Drucker auslesen

    [/autoit][autoit][/autoit][autoit]

    Global $aPrinterName[47] = ["DS08", "DS02", "DS03", "DW03", ......]
    Global $aOldPrinterName[47] = ["LAV8", "LAS2", "LAV3", "LAR03", ......]
    Global $aInstalledPrinter[10] = ["$installierteDrucker"] ; sollte dann so aussehen: ["laser LAV3", "Drucker HP LAR03", "HR34 LAV8", "OfficeJet 356 LAS2"]

    [/autoit][autoit][/autoit][autoit]

    For $i = 0 to 47 Step 1
    if StringInStr($aInstalledPrinter[$i], $aOldPrinterName) <> 0 then MsgBox(0,"Test", $aPrinterName[$i])
    ;StringInStr(zu durchsuchender String, enthaltenes Wort) bei Übereinstimmung mache folgendes....
    next

    [/autoit]

    Er sollte nun aus den " $aInstalledPrinter" eine Übereinstimmung mit den "$aOldPrinterName[47]" finden und dann den richtigen "$aPrinterName[47]" wiedergeben. Nur die Installierten Drucker werden willkürlich dargestellt und somit kann ich nicht sagen 5. Drucker entspricht 5. neuen Drucker.

    Grüße

  • Drucker installieren

    • Strikers
    • 6. Dezember 2010 um 09:36

    Guten Morgen!

    Ich habe es getestet und es klappt einwandfrei. Jetzt ist mir aber noch eine Idee gekommen die das ganze noch etwas vereinfachen soll. Vielleicht ist das möglich umzusetzten. Hier mal mein Gedanke:

    Das Programm liest vorher alle alten Drucker aus und sucht nach Vorgabe den neuen Referenzdrucker. Bei gefundenem Drucker macht er bereits einen Haken bei dem neuen Drucker. Ist dies möglich (denke schon) nur mit welchen Aufwand?

    Hier bereits mein erster "Anfang" der Erweiterung.

    Wie man vorhandene Drucker ausliest habe ich bereits gefunden:

    [autoit]


    Dim $Drucker[15]
    Dim $installierteDrucker

    [/autoit][autoit][/autoit][autoit]

    For $i=1 to 15
    $Drucker[$i] = RegEnumVal("HKEY_CURRENT_USER\Software\Microsoft\Windows NT\CurrentVersion\PrinterPorts",$i)
    If @error <> 0 then ExitLoop
    Next

    [/autoit][autoit][/autoit][autoit]

    $Drucker[0]=$i-1

    [/autoit][autoit][/autoit][autoit]

    For $j = 1 to $Drucker[0]
    $installierteDrucker &= $Drucker[$j] & @CR
    Next

    [/autoit][autoit][/autoit][autoit]

    MsgBox(0,"Installierte Drucker", $installierteDrucker)

    [/autoit]

    Der Drucker wird dann wie folgt ausgegeben: "HP Laserjet 2600 LA123"

    Jeder alter Druckername hat einen unique Teil den ich zum vergleichen brauche, in diesem Fall wäre es LA123, der Rest ist uninteressant.

    Ich habe mir das iergendwie so vorgestellt, was ich erstmal per Hand (manuell) zuweise. Jedem alten Drucker den neuen Referenzdrucker.

    [autoit]


    Global $aPrinterName[47] = ["NEUER_DRUCKER_NAME", "LJ2600_LA123", ....]
    Global $aOldPrinterName[47] = ["ALTER_DRUCKER_NAME", "HP LaserJet 2600 LA123", ....]

    [/autoit][autoit][/autoit][autoit]

    ;sucht im OldPrinterName nach einer Übereinstimmung und soll dann einen Haken setzten bei der checkbox des neuen Druckernamens
    $Drucker[$j] <> $aOldPrinterName[47]

    [/autoit][autoit][/autoit][autoit]

    GUICtrlSetState ( $checkbox_des_neuen_Druckers, 1 )

    [/autoit][autoit][/autoit][autoit][/autoit]


    Grüße

  • Drucker installieren

    • Strikers
    • 5. Dezember 2010 um 12:42

    Ja so geht es auch ;)

  • Drucker installieren

    • Strikers
    • 4. Dezember 2010 um 23:23

    Hi, es sieht so perfekt aus.
    Ich habe nur noch das FileClose mit in die If BitAND Scheife aufgenommen, da sich ansonsten das Programm schließt, wenn man keine checkbox angehackt hat und auf installieren klickt.

    [autoit]


    For $i = 0 To UBound($aPrinter) - 1
    If BitAND(GUICtrlRead($aPrinter[$i]), $GUI_CHECKED) = $GUI_CHECKED Then
    If Not FileExists($LogDir & "/"& $ClientPC & ".txt") Then $hFile = FileOpen($LogDir & "/"& $ClientPC & ".txt",1)
    RunWait("rundll32 printui.dll, PrintUIEntry /in /n \\" & $Server & "\" & $aPrinterName[$i])
    ;Nach hinzufügen des Druckers wird eine Datei mit den installierten Druckern und dem Rechnername erzeugt.
    FileWrite($hFile, $aPrinterName[$i] & @CRLF) ;@CRLF = Zeilenumbruch
    FileClose($hFile)
    EndIf
    Next

    [/autoit]

    Werde es mal am Montag testen ob es in der Praxis auch so funktioniert :)

    Danke für die nette und gute Hilfe!!

  • Drucker installieren

    • Strikers
    • 4. Dezember 2010 um 13:12

    Hi m-obi, das klappt so leider nicht mehr, nun zeigt er in der 2. Spalte das Ergebnis fortlaufen in der Höhe unter der 1. Spalte an. Es geht nur wenn ich noch die Höhe ($iTop) mit einkalkuliere.
    Was mir nun auch aufgefallen ist, wenn ich jetzt keine checkbox auswähle, dann erzeugt er mir beim klicken auf Installieren trotzdem eine TXT Datei, vorher hat er das nur bei angehackter checkbox gemacht.

    Spoiler anzeigen
    [autoit]


    #Region
    #AutoIt3Wrapper_icon=printer.ico
    #AutoIt3Wrapper_outfile=Drucker.exe
    #AutoIt3Wrapper_UseX64=n
    #AutoIt3Wrapper_Res_Language=1031
    #EndRegion
    #include <GUIConstants.au3>

    [/autoit] [autoit][/autoit] [autoit]

    TraySetIcon("printer.ico")

    [/autoit] [autoit][/autoit] [autoit]

    HotKeySet("{ESC}", "_exit")
    Global $iLeft = 10
    Global $iTop = 0
    Global $aPrinter[47]
    Global $aPrinterName[47] = ["......"]
    Global $Server = "Server"
    Global $ClientPC = @ComputerName

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    $hGui = GUICreate("Netzwerk Drucker installieren", 500, 400)
    $hDelete = GUICtrlCreateButton("Alte Netzwerkdrucker löschen!", 150, 320, 200, 25)
    $hInstall = GUICtrlCreateButton("Ausgewählte Drucker Installieren", 150, 350, 200, 25)
    GUICtrlCreateLabel("Bitte alle zu installierende Drucker auswählen!", 10, 10, 500, 17)
    For $i = 0 To UBound($aPrinter) - 1
    If $i = 13 Or $i = 26 Or $i = 39 Then $iLeft += 125
    If $i = 0 Then $iTop = 0
    If $i = 13 Then $iTop = 13
    If $i = 26 Then $iTop = 26
    If $i = 39 Then $iTop = 39
    $aPrinter[$i] = GUICtrlCreateCheckbox($aPrinterName[$i], $iLeft, 40 + (($i-$iTop) * 20), 110, 17)
    Next
    GUISetState()

    [/autoit] [autoit][/autoit] [autoit]

    While 1
    Switch GUIGetMsg()
    Case $hInstall
    ;Überprüfen welche checkboxen aktiviert sind und dementsprechend Drucker installieren
    $hFile = FileOpen(@ScriptDir & "/"& $ClientPC & ".txt",1)
    For $i = 0 To UBound($aPrinter) - 1
    If BitAND(GUICtrlRead($aPrinter[$i]), $GUI_CHECKED) = $GUI_CHECKED Then
    RunWait("rundll32 printui.dll, PrintUIEntry /in /n \\" & $Server & "\" & $aPrinterName[$i])
    ;Nach hinzufügen des Druckers wird eine Datei mit den installierten Druckern und dem Rechnername erzeugt.
    FileWrite($hFile, $aPrinterName[$i] & @CRLF) ;@CRLF = Zeilenumbruch
    EndIf
    Next
    FileClose($hFile)
    Case $hDelete
    ;Hier fehlt noch die Befehlszeile zum löschen der Netzwerkdrucker
    MsgBox(0, "1. Schritt erledigt ...", "Alte Netzwerdrucker wurden vom Computer gelöscht.")
    Case $GUI_EVENT_CLOSE
    Exit
    EndSwitch
    WEnd

    [/autoit]
  • Drucker installieren

    • Strikers
    • 3. Dezember 2010 um 22:45

    Hallo! Nochmals danke an alle! Es klappt nun alles so wie ich es brauche. :)

    Hier nochmal mein fertiges Script, vielleicht gibt es ja noch den ein oder anderen Verbesserungsvorschlag.
    Gibt es in meiner "Case $hInstall" Schleife eine einfachere Weise die If checked abfrage zu lösen die ich für FileOpen, FileWrite und FileClose gemacht habe?

    [autoit]


    #Region
    #AutoIt3Wrapper_icon=printer.ico
    #AutoIt3Wrapper_outfile=Drucker.exe
    #AutoIt3Wrapper_UseX64=n
    #AutoIt3Wrapper_Res_Language=1031
    #EndRegion
    #include <GUIConstants.au3>
    #Include <File.au3>
    TraySetIcon("printer.ico")

    [/autoit][autoit][/autoit][autoit]

    HotKeySet("{ESC}", "_exit")

    [/autoit][autoit][/autoit][autoit]

    Global $aPrinter[47]
    Global $aPrinterName[47] = ["......"]
    Global $Server = 'Server'
    Global $ClientPC = @ComputerName

    [/autoit][autoit][/autoit][autoit]

    $hGui = GUICreate("Netzwerk Drucker installieren", 500, 400, 398, 153)
    $hDelete = GUICtrlCreateButton("Alte Netzwerkdrucker löschen!", 150, 320, 200, 25)
    $hInstall = GUICtrlCreateButton("Ausgewählte Drucker Installieren", 150, 350, 200, 25)

    [/autoit][autoit][/autoit][autoit]

    GUICtrlCreateLabel("Bitte alle zu installierende Drucker auswählen!", 10, 10, 500, 17)

    [/autoit][autoit][/autoit][autoit]

    For $i = 0 To 12
    $aPrinter[$i] = GUICtrlCreateCheckbox($aPrinterName[$i], 10, 40 + ($i * 20), 110, 17)
    Next
    For $i = 13 To 25
    $aPrinter[$i] = GUICtrlCreateCheckbox($aPrinterName[$i], 135, 40 + (($i-13) * 20), 110, 17)
    Next
    For $i = 26 To 38
    $aPrinter[$i] = GUICtrlCreateCheckbox($aPrinterName[$i], 260, 40 + (($i-26) * 20), 110, 17)
    Next
    For $i = 39 To UBound($aPrinter) - 1
    $aPrinter[$i] = GUICtrlCreateCheckbox($aPrinterName[$i], 375, 40 + (($i-39) * 20), 110, 17)
    Next

    [/autoit][autoit][/autoit][autoit]

    GUISetState()

    [/autoit][autoit][/autoit][autoit]

    While 1
    Switch GUIGetMsg()
    Case $hInstall
    ;Überprüfen welche checkboxen aktiviert sind und dementsprechend Drucker installieren
    For $i = 0 To UBound($aPrinter) - 1
    If BitAND(GUICtrlRead($aPrinter[$i]),$GUI_CHECKED) = $GUI_CHECKED Then RunWait("rundll32 printui.dll,PrintUIEntry /in /n \\"&$Server&"\"&$aPrinterName[$i])
    ;Nach hinzufügen des Druckers wird eine Datei mit den installierten Druckern und dem Rechnername erzeugt.
    If BitAND(GUICtrlRead($aPrinter[$i]),$GUI_CHECKED) = $GUI_CHECKED Then $file = FileOpen(@ScriptDir & "/"& $ClientPC & ".txt",1)
    If BitAND(GUICtrlRead($aPrinter[$i]),$GUI_CHECKED) = $GUI_CHECKED Then FileWrite($file, $aPrinterName[$i] & @CRLF) ;@CRLF = Zeilenumbruch
    If BitAND(GUICtrlRead($aPrinter[$i]),$GUI_CHECKED) = $GUI_CHECKED Then FileClose($file)
    Next
    Case $hDelete
    ;Hier fehlt noch die Befehlszeile zum löschen der Netzwerkdrucker
    MsgBox(0,"1. Schritt erledigt ...","Alte Netzwerdrucker wurden vom Computer gelöscht.")
    Case $GUI_EVENT_CLOSE
    Exit
    EndSwitch
    WEnd

    [/autoit][autoit][/autoit][autoit]

    Func _exit()
    Exit
    EndFunc

    [/autoit]

    Grüße

  • Drucker installieren

    • Strikers
    • 3. Dezember 2010 um 10:37

    PERFEKT!!! VIELEN VIELEN DANK!!

    Das ist genau das was ich brauche. Und alles auch noch so kurz wie möglich durch die Schleifen.

    Jetzt nur noch eine Frage, ich habe Testweise die Drucker per printui.dll installiert, das geht auch wunderbar. Gibt es jedoch die Möglichkeit einen Befehl aufzurufen, der einfach nur den Freigabenamen öffnet? Denn so installiert sich der Drucker auch und ich bin dann auf keine dll's angewiesen.

    [autoit]


    If BitAND(GUICtrlRead($aPrinter[$i]),$GUI_CHECKED) = $GUI_CHECKED Then Run("rundll32 printui.dll,PrintUIEntry /in /n \\" & $Server & "\" & $aPrinterName)

    [/autoit]

    Danke!

  • Drucker installieren

    • Strikers
    • 3. Dezember 2010 um 09:25

    Hallo und danke für die erste Hilfe ;)

    Ich habe nun einiges gelesen, stolpere wohl aber immernoch über die einfachsten Sachen. Ich bekomme es einfach nicht hin, dass sich $i hochzählt. Ich weiß nicht wie ich es verknüpfen muss. Da ich mehrere Drucker habe, dachte ich an eine Schleife die mir die Zeilen selbst erstellt nach Anzahl der Drucker.

    Auch das Hochzählen per $i fügt sich nicht in der $GUI_checkbox_Drucker[$i] ein :(

    C
    HotKeySet("{ESC}", "_exit")
    
    
    #include <GUIConstants.au3>
    
    
    #Region ### START Koda GUI section ### Form=
    
    
    Dim $Anzahl_Drucker = 4
    Dim $Drucker1 = "HPLJ2600"
    Dim $Drucker2 = "HPLJ2601"
    Dim $Drucker3 = "HPLJ2602"
    Dim $Drucker4 = "HPLJ2603"
    
    
    
    
    $GUI_GlobalSpam = GUICreate("Drucker installieren", 500, 309, 398, 153)
    
    
    $GUI_button_installieren = GUICtrlCreateButton("Installieren", 40, 224, 89, 25)
    
    
    $GUI_text_header = GUICtrlCreateLabel("Bitte alle zu installierende Drucker auswählen:", 10, 10, 500, 17)
    
    
    $GUI_text_Modell = GUICtrlCreateLabel("Modell:", 10, 30, 250, 17)
    $GUI_checkbox_$Drucker1 = GUICtrlCreateCheckbox("$Drucker1", 10, 50, 97, 17)
    $GUI_checkbox_$Drucker2 = GUICtrlCreateCheckbox("$Drucker2", 10, 70, 97, 17)
    $GUI_checkbox_$Drucker3 = GUICtrlCreateCheckbox("$Drucker3", 10, 90, 97, 17)
    $GUI_checkbox_$Drucker4 = GUICtrlCreateCheckbox("$Drucker4", 10, 110, 97, 17)
    
    
    GUISetState(@SW_SHOW)
    
    
    #EndRegion ### END Koda GUI section ###
    
    
    GUISetState()
    While 1
    	Switch GUIGetMsg()
    		Case $GUI_button_installieren
    
    
    			For $i = 1 to $Anzahl_Drucker
    				If BitAND(GUICtrlRead($GUI_checkbox_Drucker[$i]),$GUI_CHECKED) = $GUI_CHECKED Then MsgBox(262144, "OK!", 'Drucker $i wird installiert')
    			Next
    
    
        	Case $GUI_EVENT_CLOSE
            	ExitLoop
    	EndSwitch
    WEnd
    
    
    GUIDelete()
    Exit
    
    
    Func _exit()
    	Exit
    EndFunc
    Alles anzeigen

    Über welchen Befehl lässt sich eine Netzwerkpfad ansprechen? DriveMap ? (\\Server\Druckerfreigabe)


    DANKE!!!

  • Drucker installieren

    • Strikers
    • 2. Dezember 2010 um 12:29

    Hallo! Ich bin noch ganz neu in der Materie und wollte ein Script schreiben um Netzwerkdrucker über eine Auswahl zu installieren. Jedoch klappt dies noch nicht so ganz.

    Es sollen multiple checkboxen möglich sein, sodass mehrere Drucker hintereinander in einer Routine installiert werden können. Wie stelle ich das am besten an?

    Soweit habe ich meinen Code geschrieben:

    [autoit]


    HotKeySet("{ESC}", "_exit")

    [/autoit][autoit][/autoit][autoit]

    #include <GUIConstants.au3>

    [/autoit][autoit][/autoit][autoit]

    #Region ### START Koda GUI section ### Form=
    $GUI_GlobalSpam = GUICreate("Drucker installieren", 500, 309, 398, 153)

    [/autoit][autoit][/autoit][autoit]

    $GUI_button_installieren = GUICtrlCreateButton("Installieren", 40, 224, 89, 25)

    [/autoit][autoit][/autoit][autoit]

    $GUI_text_header = GUICtrlCreateLabel("Bitte alle zu installierende Drucker auswählen:", 10, 10, 500, 17)

    [/autoit][autoit][/autoit][autoit]

    $GUI_text_Modell = GUICtrlCreateLabel("Modell:", 10, 30, 250, 17)
    $GUI_checkbox_Drucker1 = GUICtrlCreateCheckbox("Drucker1", 10, 50, 97, 17)
    $GUI_checkbox_Drucker2 = GUICtrlCreateCheckbox("Drucker2", 10, 70, 97, 17)
    $GUI_checkbox_Drucker3 = GUICtrlCreateCheckbox("Drucker3", 10, 90, 97, 17)
    $GUI_checkbox_Drucker4 = GUICtrlCreateCheckbox("Drucker4", 10, 110, 97, 17)

    [/autoit][autoit][/autoit][autoit]

    GUISetState(@SW_SHOW)

    [/autoit][autoit][/autoit][autoit]

    #EndRegion ### END Koda GUI section ###

    [/autoit][autoit][/autoit][autoit]

    GUISetState()
    While 1
    Switch GUIGetMsg()
    Case $GUI_button_installieren
    If GUICtrlRead($GUI_checkbox_Drucker1) = $GUI_CHECKED Then
    MsgBox(262144, "OK!", 'Drucker1 wird installiert')
    ElseIf GUICtrlRead($GUI_checkbox_Drucker2) = $GUI_CHECKED Then
    MsgBox(262144, "OK!", 'Drucker2 wird installiert')
    ElseIf GUICtrlRead($GUI_checkbox_Drucker3) = $GUI_CHECKED Then
    MsgBox(262144, "OK!", 'Drucker3 wird installiert')
    ElseIf GUICtrlRead($GUI_checkbox_Drucker4) = $GUI_CHECKED Then
    MsgBox(262144, "OK!", 'Drucker4 wird installiert')
    Else
    MsgBox(262144, "Achtung!", 'Kein Drucker gewählt')
    EndIf
    Case $GUI_EVENT_CLOSE
    ExitLoop
    EndSwitch
    WEnd

    [/autoit][autoit][/autoit][autoit]

    GUIDelete()
    Exit

    [/autoit][autoit][/autoit][autoit]

    Func _exit()
    Exit
    EndFunc

    [/autoit]

    statt der Testweise MsgBox sollte er eigentlich nur einen Pfad öffnen, nur das habe ich auch nicht gefunden wie das geht. Quasi nur "\\server\druckerfreigabe", dadurch wird der Drucker installiert.

    Wenn ich jetzt mehrere Drucker auswähle, dann kommt immer nur 1 MsgBox und zwar die erste. Er Sollte aber weiterlaufen bis alle checkboxen abgearbeitet sind.

    Bin über jede Hilfe dankbar!

    Grüße

Spenden

Jeder Euro hilft uns, Euch zu helfen.

Download

AutoIt Tutorial
AutoIt Buch
Onlinehilfe
AutoIt Entwickler
  1. Datenschutzerklärung
  2. Impressum
  3. Shoutbox-Archiv
Community-Software: WoltLab Suite™