lmilesuk Posted October 10, 2011 Share Posted October 10, 2011 Hello, I'm having issues when running the following code on Windows 2003 Server; #include <WinAPI.au3> Global $sFile, $hFile, $nBytes, $tBuffer, $Addr, $PNumber $sFile = @ScriptDir & '\port.txt' $tBuffer = DllStructCreate("byte[15]") $hFile = _WinAPI_CreateFile($sFile, 2, 2) _WinAPI_ReadFile($hFile, DllStructGetPtr($tBuffer), 15, $nBytes) _WinAPI_CloseHandle($hFile) $Addr = BinaryToString(DllStructGetData($tBuffer, 1)) ;Create an IP Port $PNumber = "9100" MakeNewPort($Addr, $PNumber) Func MakeNewPort($Address, $PortNumber) $objWMIService = ObjGet("winmgmts:\\" & @ComputerName & "\root\cimv2") $objNewPort = $objWMIService.Get("Win32_TCPIPPrinterPort").SpawnInstance_ $objNewPort.Name = ""&$Address $objNewPort.Protocol = 1 $objNewPort.HostAddress = $Address $objNewPort.PortNumber = $PortNumber $objNewPort.SNMPEnabled = False $objNewPort.Put_ EndFunc This code works on XP, Vista, 7 and 2008 Server however when I attempt to use it on 2003 Server I get an Error message; Error: The requested action with this object has failed. Does anyone have any ideas?? Many Thanks for your time! Link to comment Share on other sites More sharing options...
UEZ Posted October 10, 2011 Share Posted October 10, 2011 (edited) Maybe this link helps you: http://forums.windrivers.com/showpost.php?p=673522&postcount=9 Or try this:Global $sFile, $hFile, $nBytes, $tBuffer, $Addr, $PNumber $Addr = "169.254.110.14" ;Create an IP Port $PNumber = "9100" MakeNewPort($Addr, $PNumber) Func MakeNewPort($Address, $PortNumber, $srv = ".") $objWMIService = ObjGet("winmgmts:{impersonationLevel=impersonate,(LoadDriver)}!\\" & $srv & "\root\cimv2") $objNewPort = $objWMIService.Get("Win32_TCPIPPrinterPort").SpawnInstance_ $objNewPort.Name = "IP_" & $Address $objNewPort.Protocol = 1 $objNewPort.HostAddress = $Address $objNewPort.PortNumber = $PortNumber $objNewPort.SNMPEnabled = False $objNewPort.Put_ EndFunc Br,UEZ Edited October 10, 2011 by UEZ Please don't send me any personal message and ask for support! I will not reply! Selection of finest graphical examples at Codepen.io The own fart smells best! ✌Her 'sikim hıyar' diyene bir avuç tuz alıp koşma!¯\_(ツ)_/¯ ٩(●̮̮̃•̃)۶ ٩(-̮̮̃-̃)۶ૐ Link to comment Share on other sites More sharing options...
lmilesuk Posted October 12, 2011 Author Share Posted October 12, 2011 Thanks for the response, How would I go about reading the IP address in from a text file? If I add the code from my first file, the program fails again? Does that have anything to do with the WinApi being added? Link to comment Share on other sites More sharing options...
UEZ Posted October 12, 2011 Share Posted October 12, 2011 (edited) Is the code from post#2 working or not? That means can you see the ip port? If yes then it is easy to load a text file and the ports. If not then download the Windows Resource Kit for Server 2003, install it and register with regsvr32 prnadmin.dll from the install folder and try to run the script from post#2 again. Br, UEZ Edited October 12, 2011 by UEZ Please don't send me any personal message and ask for support! I will not reply! Selection of finest graphical examples at Codepen.io The own fart smells best! ✌Her 'sikim hıyar' diyene bir avuç tuz alıp koşma!¯\_(ツ)_/¯ ٩(●̮̮̃•̃)۶ ٩(-̮̮̃-̃)۶ૐ Link to comment Share on other sites More sharing options...
lmilesuk Posted October 13, 2011 Author Share Posted October 13, 2011 It is working, thanks! It's just the reading from file. Link to comment Share on other sites More sharing options...
lmilesuk Posted October 13, 2011 Author Share Posted October 13, 2011 Is the code from post#2 working or not? That means can you see the ip port? If yes then it is easy to load a text file and the ports. If not then download the Windows Resource Kit for Server 2003, install it and register with regsvr32 prnadmin.dll from the install folder and try to run the script from post#2 again. Br,UEZ It does work however I cannot read in the ip address from a text file without the Win-API??? Link to comment Share on other sites More sharing options...
UEZ Posted October 13, 2011 Share Posted October 13, 2011 How does your IP file look like? Br, UEZ Please don't send me any personal message and ask for support! I will not reply! Selection of finest graphical examples at Codepen.io The own fart smells best! ✌Her 'sikim hıyar' diyene bir avuç tuz alıp koşma!¯\_(ツ)_/¯ ٩(●̮̮̃•̃)۶ ٩(-̮̮̃-̃)۶ૐ Link to comment Share on other sites More sharing options...
lmilesuk Posted October 14, 2011 Author Share Posted October 14, 2011 It's just a blank .txt and from another application i input the numbers so before being set the file will be 0.0.0.0. Link to comment Share on other sites More sharing options...
UEZ Posted October 14, 2011 Share Posted October 14, 2011 (edited) Try this: Global $i, $sFile, $PNumber, $aIPs $sFile = "ip.txt" $PNumber = "9100" $aIPs = StringSplit(StringStripCR(FileRead($sFile)), @LF, 2) For $i = 0 To UBound($aIPs) - 1 MakeNewPort($aIPs[$i], $PNumber) Next Func MakeNewPort($Address, $PortNumber, $srv = ".") $objWMIService = ObjGet("winmgmts:{impersonationLevel=impersonate,(LoadDriver)}!\" & $srv & "rootcimv2") $objNewPort = $objWMIService.Get("Win32_TCPIPPrinterPort").SpawnInstance_ $objNewPort.Name = "IP_" & $Address $objNewPort.Protocol = 1 $objNewPort.HostAddress = $Address $objNewPort.PortNumber = $PortNumber $objNewPort.SNMPEnabled = False $objNewPort.Put_ EndFunc ip.txt should have following content as an example: 10.10.10.10 192.178.0.1 10.20.30.40 Br, UEZ Edited October 14, 2011 by UEZ Please don't send me any personal message and ask for support! I will not reply! Selection of finest graphical examples at Codepen.io The own fart smells best! ✌Her 'sikim hıyar' diyene bir avuç tuz alıp koşma!¯\_(ツ)_/¯ ٩(●̮̮̃•̃)۶ ٩(-̮̮̃-̃)۶ૐ Link to comment Share on other sites More sharing options...
lmilesuk Posted October 15, 2011 Author Share Posted October 15, 2011 Try this: Global $i, $sFile, $PNumber, $aIPs $sFile = "ip.txt" $PNumber = "9100" $aIPs = StringSplit(StringStripCR(FileRead($sFile)), @LF, 2) For $i = 0 To UBound($aIPs) - 1 MakeNewPort($aIPs[$i], $PNumber) Next Func MakeNewPort($Address, $PortNumber, $srv = ".") $objWMIService = ObjGet("winmgmts:{impersonationLevel=impersonate,(LoadDriver)}!\" & $srv & "rootcimv2") $objNewPort = $objWMIService.Get("Win32_TCPIPPrinterPort").SpawnInstance_ $objNewPort.Name = "IP_" & $Address $objNewPort.Protocol = 1 $objNewPort.HostAddress = $Address $objNewPort.PortNumber = $PortNumber $objNewPort.SNMPEnabled = False $objNewPort.Put_ EndFunc ip.txt should have following content as an example: 10.10.10.10 192.178.0.1 10.20.30.40 Br, UEZ Hi thanks for your help bu that doesn't work, I keep getting the following error; Line 10 (File "C:\Add_Port.exe"); Error: Variable must be of type "Object". Link to comment Share on other sites More sharing options...
lmilesuk Posted October 20, 2011 Author Share Posted October 20, 2011 Any Ideas Uez?? Link to comment Share on other sites More sharing options...
UEZ Posted October 20, 2011 Share Posted October 20, 2011 (edited) Probably you have blank lines in your ip.txt file. The code above has no error check whether $Address is a valid ip address token or not! Btw, did you register the prnadmin.dll from post#4? Try this:expandcollapse popup#include <Array.au3> Global Const $oErrorHandler = ObjEvent("AutoIt.Error", "ObjErrorHandler") Global $i, $sFile, $PNumber, $aIPs $sFile = "ip.txt" $PNumber = 9100 $aIPs = StringSplit(StringStripCR(FileRead($sFile)), @LF, 2) For $i = 0 To UBound($aIPs) - 1 MakeNewPort($aIPs[$i], $PNumber) Next Func MakeNewPort($Address, $PortNumber, $srv = ".") ;coded by UEZ 2011 If Not IsInt(Number($PortNumber)) Then Return SetError(1, 0, 0) If Number($PortNumber) < 0 Or Number($PortNumber) > 0xFFFF Then Return SetError(2, 0, 0) StringRegExp($Address, "^(\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3})$", 3) If @error Then Return SetError(3, 0, 0) $objWMIService = ObjGet("winmgmts:{impersonationLevel=impersonate,(LoadDriver)}!\\" & $srv & "\root\cimv2") If @error Then Return SetError(4, 0, 0) $objNewPort = $objWMIService.Get("Win32_TCPIPPrinterPort").SpawnInstance_ $objNewPort.Name = "IP_" & $Address $objNewPort.Protocol = 1 $objNewPort.HostAddress = $Address $objNewPort.PortNumber = $PortNumber $objNewPort.SNMPEnabled = False $objNewPort.Put_ EndFunc Func ObjErrorHandler() MsgBox(16, "Error", _ "A COM Error has occured!" & @CRLF & @CRLF & _ "err.description is: " & @TAB & $oErrorHandler.description & @CRLF & _ "err.windescription:" & @TAB & $oErrorHandler & @CRLF & _ "err.number is: " & @TAB & Hex($oErrorHandler.number, 8) & @CRLF & _ "err.lastdllerror is: " & @TAB & $oErrorHandler.lastdllerror & @CRLF & _ "err.scriptline is: " & @TAB & $oErrorHandler.scriptline & @CRLF & _ "err.source is: " & @TAB & $oErrorHandler.source & @CRLF & _ "err.helpfile is: " & @TAB & $oErrorHandler.helpfile & @CRLF & _ "err.helpcontext is: " & @TAB & $oErrorHandler.helpcontext & @CRLF _ ) EndFunc ;==>ObjErrorHandler Br,UEZ Edited October 20, 2011 by UEZ Please don't send me any personal message and ask for support! I will not reply! Selection of finest graphical examples at Codepen.io The own fart smells best! ✌Her 'sikim hıyar' diyene bir avuç tuz alıp koşma!¯\_(ツ)_/¯ ٩(●̮̮̃•̃)۶ ٩(-̮̮̃-̃)۶ૐ Link to comment Share on other sites More sharing options...
lmilesuk Posted March 8, 2012 Author Share Posted March 8, 2012 HI Again Uez it appears that this issue hasn't gone away on 2003 server, the script is working in regards to not getting any error messages however, the port isn't being added; #include <Array.au3> Global Const $oErrorHandler = ObjEvent("AutoIt.Error", "ObjErrorHandler") Global $i, $sFile, $PNumber, $aIPs $sFile = 'port.txt' $PNumber = "9100" $aIPs = StringSplit(StringStripCR(FileRead($sFile)), @LF, 2) For $i = 0 To UBound($aIPs) - 1 MakeNewPort($aIPs[$i], $PNumber) Next Func MakeNewPort($Address, $PortNumber, $srv = ".") StringRegExp($Address, "^(d{1,3}.d{1,3}.d{1,3}.d{1,3})$", 3) If @error Then Return SetError(1, 0, 0) $objWMIService = ObjGet("winmgmts:{impersonationLevel=impersonate,(LoadDriver)}!" & $srv & "rootcimv2") $objNewPort = $objWMIService.Get("Win32_TCPIPPrinterPort").SpawnInstance_ $objNewPort.Name = "" & $Address $objNewPort.Protocol = 1 $objNewPort.HostAddress = $Address $objNewPort.PortNumber = $PortNumber $objNewPort.SNMPEnabled = False $objNewPort.Put_ EndFunc Func ObjErrorHandler() MsgBox(16, "Error", _ "A COM Error has occured!" & @CRLF & @CRLF & _ "err.description is: " & @TAB & $oErrorHandler.description & @CRLF & _ "err.windescription:" & @TAB & $oErrorHandler & @CRLF & _ "err.number is: " & @TAB & Hex($oErrorHandler.number, 8) & @CRLF & _ "err.lastdllerror is: " & @TAB & $oErrorHandler.lastdllerror & @CRLF & _ "err.scriptline is: " & @TAB & $oErrorHandler.scriptline & @CRLF & _ "err.source is: " & @TAB & $oErrorHandler.source & @CRLF & _ "err.helpfile is: " & @TAB & $oErrorHandler.helpfile & @CRLF & _ "err.helpcontext is: " & @TAB & $oErrorHandler.helpcontext & @CRLF _ ) EndFunc ;==>ObjErrorHandler This is true for Server 2003 and win XP x32, however if I run the following code on xp x32 it works; #include <WinAPI.au3> Global $sFile, $hFile, $nBytes, $tBuffer, $Addr, $PNumber $sFile = @ScriptDir & 'port.txt' $tBuffer = DllStructCreate("byte[15]") $hFile = _WinAPI_CreateFile($sFile, 2, 2) _WinAPI_ReadFile($hFile, DllStructGetPtr($tBuffer), 15, $nBytes) _WinAPI_CloseHandle($hFile) $Addr = BinaryToString(DllStructGetData($tBuffer, 1)) ;Create an IP Port $PNumber = "9100" MakeNewPort($Addr, $PNumber) Func MakeNewPort($Address, $PortNumber) $objWMIService = ObjGet("winmgmts:" & @ComputerName & "rootcimv2") $objNewPort = $objWMIService.Get("Win32_TCPIPPrinterPort").SpawnInstance_ $objNewPort.Name = "IP_"&$Address $objNewPort.Protocol = 1 $objNewPort.HostAddress = $Address $objNewPort.PortNumber = $PortNumber $objNewPort.SNMPEnabled = False $objNewPort.Put_ EndFunc But I get an error on server 2003. Sorry to be pain but I don't really understand how or what the issue can be. Link to comment Share on other sites More sharing options...
UEZ Posted March 8, 2012 Share Posted March 8, 2012 I just tested the script again on Win2k3 R2 standard and it seems to work properly! I cannot say what's going wrong on your server! Br, UEZ Please don't send me any personal message and ask for support! I will not reply! Selection of finest graphical examples at Codepen.io The own fart smells best! ✌Her 'sikim hıyar' diyene bir avuç tuz alıp koşma!¯\_(ツ)_/¯ ٩(●̮̮̃•̃)۶ ٩(-̮̮̃-̃)۶ૐ Link to comment Share on other sites More sharing options...
lmilesuk Posted March 13, 2012 Author Share Posted March 13, 2012 I'm not doing anything stange just trying to run the add port with text file in the same folder and I keep getting the same message; Link to comment Share on other sites More sharing options...
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now