Category Archives: Scripting

Enable or Disable Client For Microsoft Networks and other Lan Settings using script

Yesterday I was searching the web for a script that would disable the client for Microsoft networks and some other protocols.
I could not find it in the first 10 pages of my search on Google.
Finally I found a great solution that i would like to share with you, and tag my post well so anyone can find it more quickly than I did :-)

I found the application nvspbind that I could use to disable or enable the following stuff:

  • Broadcom Advanced Server Program Driver
  • Brocade 10G Ethernet Service
  • Intel(R) Advanced Network Services Protocol
  • Link-Layer Topology Discovery Mapper I/O Driver
  • Client for Microsoft Networks
  • NetBIOS Interface
  • WINS Client(TCP/IP) Protocol
  • QoS Packet Scheduler
  • Link-Layer Topology Discovery Responder
  • File and Printer Sharing for Microsoft Networks
  • Microsoft NetbiosSmb
  • Internet Protocol Version 4 (TCP/IPv4)
  • Internet Protocol Version 6 (TCP/IPv6)
  • Microsoft Virtual Network Switch Protocol

I’ve put them all together in a batch script:

REM Configure Network Settings

set lan="LAN Verbinding"

REM brcm_blfp (Broadcom Advanced Server Program Driver)
"%~DP0nvspbind.exe" /d "%lan%" brcm_blfp

REM bnad_imp (Brocade 10G Ethernet Service)
"%~DP0nvspbind.exe" /d "%lan%" bnad_imp

REM iansprotocol (Intel(R) Advanced Network Services Protocol)
"%~DP0nvspbind.exe" /d "%lan%" iansprotocol

REM ms_lltdio (Link-Layer Topology Discovery Mapper I/O Driver)
"%~DP0nvspbind.exe" /d "%lan%" ms_lltdio

REM ms_msclient (Client for Microsoft Networks)
"%~DP0nvspbind.exe" /d "%lan%" ms_msclient

REM ms_netbios (NetBIOS Interface)
"%~DP0nvspbind.exe" /d "%lan%" ms_netbios

REM ms_netbt (WINS Client(TCP/IP) Protocol)
"%~DP0nvspbind.exe" /d "%lan%" ms_netbt

REM ms_pacer (QoS Packet Scheduler)
"%~DP0nvspbind.exe" /d "%lan%" ms_pacer

REM ms_rspndr (Link-Layer Topology Discovery Responder)
"%~DP0nvspbind.exe" /d "%lan%" ms_rspndr

REM ms_server (File and Printer Sharing for Microsoft Networks)
"%~DP0nvspbind.exe" /d "%lan%" ms_server

REM ms_smb (Microsoft NetbiosSmb)
"%~DP0nvspbind.exe" /d "%lan%" NetbiosSmb

REM ms_tcpip (Internet Protocol Version 4 (TCP/IPv4))
"%~DP0nvspbind.exe" /d "%lan%" ms_tcpip

REM ms_tcpip6 (Internet Protocol Version 6 (TCP/IPv6))
"%~DP0nvspbind.exe" /d "%lan%" ms_tcpip6

REM vms_pp (Microsoft Virtual Network Switch Protocol)
"%~DP0nvspbind.exe" /d "%lan%" vms_pp

That’s it!

Enable Sound Icon Windows XP using script

Today my customer wanted to have the volume icon in the taskbar enabled.
Easy, was the first thought. But during my search i investiogated it was a bit harder.

Here’s the solution:
Import the following registry key:

reg add "HKCU\Software\Microsoft\Windows\CurrentVersion\Applets\SysTray" /v Services /t REG_DWORD /d 31 /f

Start the following program:
c:\WINDOWS\system32\systray.exe

VoilĂ  !

Show Dell Asset tag / part number / serial number using VB-script

This little vb-script shows the Asset tag / part number of serial number of your Dell computer.

strComputer = "."
Set objWMIService = GetObject("winmgmts:" _
& "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")

Set colSMBIOS = objWMIService.ExecQuery _
("Select * from Win32_SystemEnclosure")

For Each objSMBIOS in colSMBIOS
Wscript.Echo "Part Number: " & objSMBIOS.PartNumber
Wscript.Echo "Serial Number: " & objSMBIOS.SerialNumber
Wscript.Echo "Asset Tag: " & objSMBIOS.SMBIOSAssetTag
Next

SCRIPT: Change Home-directory field in Active Directory

Use this script to change the Home-directory field in Active Directory

'on error resume next must be enabled, otherwise the search will fail on accounts which do not have a
'homedirectory/homedrive defined.
on error resume next

CONST ForReading = 1
CONST ForWriting = 2
CONST ForAppending = 8
CONST Create = true

UitwijkHomeDirServer = "cc-afsr-01"
OriginalHomeDirServer = "fvs-01"

Set objConnection = CreateObject("ADODB.Connection")
objConnection.Open "Provider=ADsDSOObject;"
Set objCommand = CreateObject("ADODB.Command")
objCommand.ActiveConnection = objConnection
'objCommand.CommandText = ";(objectCategory=User)" & ";adspath;subtree"
'Onderstaande CommandText is om mee te testen.
objCommand.CommandText = ";(objectCategory=User)" & ";adspath;subtree"
Set objRecordSet = objCommand.Execute

Set objShell = CreateObject("WScript.Shell")
Set objFso = CreateObject("scripting.filesystemobject")

Set changehomedirlogtxt = objFso.OpenTextFile("ChangeHomeDir_log.txt", ForAppending, Create)

'Append de datum en tijd in het tekstbestan met een witregel ervoor en erna.
changehomedirlogtxt.WriteBlankLines 1
changehomedirlogtxt.WriteLine(Date & " " & Time)
changehomedirlogtxt.WriteBlankLines 1

'Loop door het recordset en verander van iedere gebruiker die een homedrive op J heeft naar de fvs-01 de homedirectory.
'Schrijf alle usernames en homedirectories die aan de gebruikte if statement voldoen naar een tekstbestand.
Do Until objRecordset.EOF
'Zet de te gebruiken waardes weer op nul, anders worden de waardes gebruikt voor accounts die geen homeDirectory hebben.
currentHomeDir = ""
currentHomeDrive = ""
currentUserName = ""
Set objUser = GetObject(objRecordset.Fields("adspath"))
currentHomeDir = objUser.Get("homeDirectory")
currentHomeDrive = objuser.Get("homeDrive")
currentUserName = objUser.Get("name")
if currentHomeDrive = "J:" and left(currentHomeDir, 8) = "\\" & OriginalHomeDirServer then
'WScript.echo "Gebruiker " & currentUserName & " heeft de gewenste homedir in " & currentHomeDir
changehomedirlogtxt.WriteLine(currentUserName & " " & currentHomeDir)
objUser.Put "homeDirectory", "\\" & UitwijkHomeDirServer & "\Home\" & currentUserName
objUser.SetInfo
end if
objRecordset.MoveNext
Loop

changehomedirlogtxt.Close()

objConnection.Close

MsgBox("Klaar. Alle HomeDirectories zouden nu moeten verwijzen naar de " & UitwijkHomeDirServer)

Set objShell = Nothing
Set objFso = Nothing

SCRIPT: Create a folder in every homedirectory

Last week i needed to create a folder in the home directory of every user. I used a simple batch script to accomplish this:
@echo off
REM
H:
for /F "usebackq delims==" %%i in (`dir *.* /B`) DO md "H:\%%i\favorites

SCRIPT: Change Provider Order Windows XP

For my unattended XP installation i was searching for a script which could easily change the provider order. My cutomers use the Novell client a lot, but i want the Microsoft Client to be used first. Here’s the great script created by Anders Olsson, Kentor Teknik AB. Thanx for the great work man!!


' ChangeProviderOrder.vbs, by Anders Olsson, Kentor Teknik AB, 2006-10-31
'
' Reads the "Network provider order" from the registry and reorders it putting
' the "Microsoft Windows Networking" provider on top.
'
' Example: Before - "NCredMgr,NetwareWorkstation,RDPNP,LanmanWorkstation,WebClient"
' would become "LanmanWorkstation,NCredMgr,NetwareWorkstation,RDPNP,WebClient" after
' running this script.
'
Set WshShell = WScript.CreateObject("WScript.Shell")

' Read the reg value of the providers
strKey = WshShell.RegRead("HKLM\SYSTEM\CurrentControlSet\Control\NetworkProvider\Order\ProviderOrder")

' Split the strings up using comma (ASCII #44) as the delimiter
arrProvs = Split(strKey, chr(44), -1, 1)

' If LanmanWorkstation is already first, we don't have to do anything
If arrProvs(0) = "LanmanWorkstation" Then
Wscript.Quit(0)
end if

' "LanmanWorkstation" should always start the string
strNewProvs = "LanmanWorkstation"

' Loop through the old provider strings, and add them to the new string. Don't
' write LanmanWorkstation, since it's already written at the start of the string.
For Each strProv In arrProvs
Select Case strProv
Case "LanmanWorkstation"
Case Else strNewProvs = strNewProvs & "," & strProv
End Select
Next

' Write the new string back to the registry
WshShell.RegWrite "HKLM\SYSTEM\CurrentControlSet\Control\NetworkProvider\Order\ProviderOrder", strNewProvs, "REG_SZ"

SCRIPT: Share and unshare printers automatically

Share local printers:

strComputer = "."
Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\cimv2")

Set colInstalledPrinters = objWMIService.ExecQuery _
("Select * from Win32_Printer Where Network = FALSE")

i = 1

For Each objPrinter in colInstalledPrinters
objPrinter.Shared = TRUE
objPrinter.ShareName = objPrinter.Name
objPrinter.Put_
i = i + 1
Next

Unshare local printers:

strComputer = "."
Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\cimv2")

Set colInstalledPrinters = objWMIService.ExecQuery _
("Select * from Win32_Printer Where Network = FALSE")

i = 1

For Each objPrinter in colInstalledPrinters
objPrinter.Shared = FALSE
objPrinter.ShareName = objPrinter.Name
objPrinter.Put_
i = i + 1
Next

SCRIPT: Exclude files and directories read from a single file using Robocopy

Use this script and 2 textfiles which can be used to exclude files and folders.

robocopy.vbs
EXCLUDEDIRS = "C:\robocopy\excludedirs.txt"
EXCLUDEFILES = "C:\robocopy\excludefiles.txt"
ROBOCOPYLOCATION = "C:\robocopy\robocopy.exe"
SOURCELOCATION = "Y:\"
TARGETLOCATION = "D:\"
Const FOR_READING = 1
Set WshShell = WScript.CreateObject("WScript.Shell")
Set objFSO = CreateObject("Scripting.FileSystemObject")
Set objFile = objFSO.OpenTextFile(EXCLUDEDIRS, FOR_READING)
strDirExclude = objFile.ReadAll
objFile.Close
Set objFile = objFSO.OpenTextFile(EXCLUDEFILES, FOR_READING)
strFileExclude = objFile.ReadAll
objFile.Close
arrDirExclude = Split(strDirExclude, vbCrLf)
arrFileExclude = Split(strFileExclude, vbCrLf)
For Each dir In arrDirExclude
dirs = dirs + " /xd " + chr(34) + dir + chr(34)
Next
For Each bestand In arrFileExclude
bestanden = bestanden + " /xf " + chr(34) + bestand + chr(34)
Next
mycommand = ROBOCOPYLOCATION & chr(32) & SOURCELOCATION & chr(32) & TARGETLOCATION & " /COPYALL /S /mir /R:5 /W:10 /IPG:10 /TBD /ETA /LOG+:C:\ictivity\robo.log /TEE " & dirs & bestanden
WshShell.Run(mycommand)

Excludedirs.txt
y:\Program Files
y:\Profiles
y:\TSprofiles

Excludefiles.txt
y:\Application Partitions.vsd
y:\Domains.vsd
y:\Groups.csv
y:\AD\TEST\pagefile.sys

SCRIPT: Delete network printer

Use this script to delete a network printer:

Option Explicit
Dim objNetwork, strUNCPrinter
strUNCPrinter = "\\server\mprinter"

Set objNetwork = CreateObject("WScript.Network")
objNetwork.RemovePrinterConnection strUNCPrinter

Wscript.Quit

SCRIPT: Install Networkprinter and make it default

Use this VB script to install a network printer and make it default:

Set objNetwork = CreateObject("WScript.Network")
objNetwork.AddWindowsPrinterConnection "\\server\printer"

Dim objPrinter
Set objPrinter = CreateObject("WScript.Network")
objPrinter.SetDefaultPrinter "\\server\printer"

SCRIPT: Remove Installed Windows Updates

With the following script you can easily remove files and uninstall information of Windows Updates on your computer.
This script can by example run on a local computer as a scheduled task. This will assure that old update-leftovers are deleted.

This is the script:


Option Explicit
Dim o, oShell, nConfirm
Set o = WScript.Application
o.Interactive = True
Set oShell = CreateObject("WScript.Shell")

Dim oFSO, sWinDir, oFolder, oDictionary, oSubFolder, sFolderName, sFolderPath, sUpdateName, sDeleted
Set oFSO = CreateObject("Scripting.FileSystemObject")
sWinDir = oFSO.GetSpecialFolder(0)
sDeleted = vbNullString
Set oFolder = oFSO.GetFolder(sWinDir)
Set oDictionary = CreateObject("Scripting.Dictionary")
For Each oSubFolder In oFolder.SubFolders
sFolderName = LCase(oSubFolder.Name)
sFolderPath = LCase(oSubFolder.Path)
'change days here
If (DateDiff("D", oSubFolder.DateCreated, Date()) > 90) And Left(sFolderName, 12) = "$ntuninstall" And Mid(sFolderName, 13, 2) = "kb" Or Mid(sFolderName, 13, 2) = "q" Then
sUpdateName = Mid(sFolderName, 13, Len(sFolderName) - 13)
oDictionary.Add sUpdateName, sFolderPath
End If
Next

For Each sUpdateName in oDictionary.Keys
sDeleted = sDeleted & vbCrLF & sUpdateName
sFolderPath = oDictionary.Item(sUpdateName)
On Error Resume Next
oShell.RegDelete "HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\" & sUpdateName & "\"
On Error Goto 0
oShell.Run "%ComSpec% /C RD /S /Q " & Chr(34) & sFolderPath & Chr(34), 0, True
Next
' Uncomment the following if you want a visual comfirmation what has been deleted
'If Len(sDeleted) > 0 Then
' MsgBox "The uninstall data for the following updates are now removed:" & vbCrLf & UCase(sDeleted), vbOKOnly + vbInformation, "Files Removed"
' sDeleted = vbNullString
'Else
' MsgBox "No Windows Update Folders found for removal", vbOKOnly + vbInformation, "Nothing To Do"
'End If
o.Quit 0

SCRIPT: Simple Delete Script

I needed to delete one file in every home directory of the users. For this i used an easy script using ‘for’.

@echo off
REM DELETE Powerfuse Printer Settings

E:
cd \users\Home
for /F "usebackq delims==" %%i in (`dir *.* /B`) DO del /F /Q e:\users\home\%%i\PwrMenu\UserPref\PrinterPreferences.dat

Command line printer control in Windows XP / 2000

Many, but not all, printer settings can be done from Windows 2000′s command line using PRINTUI.DLL and RUNDLL32.EXE.

The list of functions on this page was generated using the following command in Windows 2000 (Professional):

RUNDLL32 PRINTUI.DLL,PrintUIEntry /?

Note: I certainly did not test each of these switches myself!
To be honest, I usually prefer to use the (VBScript) printer management scripts that come with Windows 2000 and later (%windir%\System32\*prn*.vbs).

More information is available at Microsoft’s TechNet under Q189105.

Download Microsoft’s PrintUI.DLL User’s Guide and Reference for more detailed, task oriented explanations of command line options.

Usage:

RUNDLL32 PRINTUI.DLL,PrintUIEntry [ options ] [ @commandfile ]

/a[file]
binary file name
/b[name]
base printer name
/c[name]
unc machine name if the action is on a remote machine
/dl
delete local printer
/dn
delete network printer connection
/dd
delete printer driver
/e
display printing preferences
/f[file]
either inf file or output file
/ga
add per machine printer connections
/ge
enum per machine printer connections
/gd
delete per machine printer connections
/h[arch]
driver architecture, one of the following:
Alpha | Intel | Mips | PowerPC
/ia
install printer driver using inf file
/id
install printer driver using add printer driver wizard
/if
install printer using inf file
/ii
install printer using add printer wizard with an inf file
/il
install printer using add printer wizard
/in
add network printer connection
/j[provider]
print provider name
/k
print test page to specified printer, cannot be combined with command when installing a printer
/l[path]
printer driver source path
/m[model]
printer driver model name
/n[name]
printer name
/o
display printer queue view
/p
display printer properties
/q
quiet mode, do not display error messages
/r[port]
port name
/s
display server properties
/Ss
Store printer settings into a file
/Sr

Restore printer settings from a file

Store or restore printer settings option flags that must be placed at the end of command:

2 PRINTER_INFO_2
7 PRINTER_INFO_7
c Color Profile
d PrinterData
s Security descriptor
g Global DevMode
m Minimal settings
u User DevMode
r Resolve name conflicts
f Force name
p Resolve port

/u
use the existing printer driver if it’s already installed
/t[#]
zero based index page to start on
/v[version]
driver version, one of the following:
Windows 95 or 98 | Windows NT 3.1 | Windows NT 3.5 or 3.51 | Windows NT 3.51 | Windows NT 4.0 | Windows NT 4.0 or 2000 | Windows 2000
/w
prompt the user for a driver if specified driver is not found in the inf
/y
set printer as the default
/Xg
get printer settings
/Xs
set printer settings
/z
do not auto share this printer
/Z
share this printer, can only be used with the /if option
/?
help this message
@[file]
command line argument file

Examples:

Run server properties:
RUNDLL32 PRINTUI.DLL,PrintUIEntry /s /t1 /n\\machine
Run printer properties
RUNDLL32 PRINTUI.DLL,PrintUIEntry /p /n\\machine\printer
Run add printer wizard localy
RUNDLL32 PRINTUI.DLL,PrintUIEntry /il
Run add printer wizard on \\machine
RUNDLL32 PRINTUI.DLL,PrintUIEntry /il /c\\machine
Run queue view
RUNDLL32 PRINTUI.DLL,PrintUIEntry /o /n\\machine\printer
Run inf install
RUNDLL32 PRINTUI.DLL,PrintUIEntry /if /b “Test Printer” /f %windir%\inf\ntprint.inf /r “lpt1:” /m “AGFA-AccuSet v52.3″
Run add printer wizard using inf
RUNDLL32 PRINTUI.DLL,PrintUIEntry /ii /f %windir%\inf\ntprint.inf
Add per machine printer connection
RUNDLL32 PRINTUI.DLL,PrintUIEntry /ga /c\\machine /n\\machine\printer /j”LanMan Print Services”
Delete per machine printer connection
RUNDLL32 PRINTUI.DLL,PrintUIEntry /gd /c\\machine /n\\machine\printer
Enumerate per machine printer connections
RUNDLL32 PRINTUI.DLL,PrintUIEntry /ge /c\\machine
Add printer driver using inf
RUNDLL32 PRINTUI.DLL,PrintUIEntry /ia /c\\machine /m “AGFA-AccuSet v52.3″ /h “Intel” /v “Windows 2000″ /f %windir%\inf\ntprint.inf
Remove printer driver
RUNDLL32 PRINTUI.DLL,PrintUIEntry /dd /c\\machine /m “AGFA-AccuSet v52.3″ /h “Intel” /v “Windows 2000″
Set printer as default
RUNDLL32 PRINTUI.DLL,PrintUIEntry /y /n “printer”
Set printer comment
RUNDLL32 PRINTUI.DLL,PrintUIEntry /Xs /n “printer” comment “My Cool Printer”
Set printer port
RUNDLL32 PRINTUI.DLL,PrintUIEntry /Xs /n “printer” PortName “port:”
Get printer settings
RUNDLL32 PRINTUI.DLL,PrintUIEntry /Xg /n “printer”
Get printer settings saving results in a file
RUNDLL32 PRINTUI.DLL,PrintUIEntry /f “results.txt” /Xg /n “printer”
Set printer settings command usage
RUNDLL32 PRINTUI.DLL,PrintUIEntry /Xs /n “printer” ?
Store all printer settings into a file
RUNDLL32 PRINTUI.DLL,PrintUIEntry /Ss /n “printer” /a “file.dat”
Restore all printer settings from a file
RUNDLL32 PRINTUI.DLL,PrintUI /Sr /n “printer” /a “file.dat”
Store printer information on level 2 into a file
RUNDLL32 PRINTUI.DLL,PrintUIEntry /Ss /n “printer” /a “file.dat” 2
Restore from a file printer security descriptor
RUNDLL32 PRINTUI.DLL,PrintUIEntry /Sr /n “printer” /a “file.dat” s
Restore from a file printer global devmode and printer data
RUNDLL32 PRINTUI.DLL,PrintUIEntry /Sr /n “printer” /a “file.dat” g d
Restore from a file minimum settings and resolve port name
RUNDLL32 PRINTUI.DLL,PrintUIEntry /Sr /n “printer” /a “file.dat” m p

More to explore:

Microsoft Knowledge Base articles:
How to add printers with no user interaction in Windows XP and
How to add printers with no user interaction in Windows (2000/2003).

How to print files from the command line (or batch files).

A tip from Iain Hamilton:

I found this excellent page that gives a LOT of
additional functionality to the rundll command (it’s near the bottom of
the page).

zacky.cleverits.com/IT/printer.htm

For example, there are commands for:

  • changing the sharename for the printer
  • switching the share on/off
  • adding comments and location fields to the printer!

Also, I might add: when you’re using the /Z switch to auto-share a printer,
it truncates the name to 8 characters. By using the syntax included on this
webpage, you can change the share to be longer than 8. This command is
especially useful, since it’s cluster-aware.

Iain Hamilton

Thanks Iain

More RUNDLL and RUNDLL32 commands can be found on my RUNDLL page.

An overview of

Registry Entries for Printing by Microsoft.

If RUNDLL32 just won’t do the job:

Sometimes we need to do just alittle more than RUNDLL32 is capable of,
like installing a TCP/IP printer port.

In that case, consider buying yourself a copy of the
Windows 2000 Server/Windows Server 2003
Resource Kit
and use PRNADMIN.DLL and the accompanying sample
scripts written in VBScript.

My own AddIPPrn.bat
uses these VBScripts to install a printer, its driver and a TCP/IP printer
port on a remote computer.

If all you need is to backup/restore, clone or migrate existing printers:

Often the printer configurations of existing computers need to be
cloned to other computers, or restored after reinstalling Windows.

In those cases, a backup/export and restore/import with Microsoft’s
PrintMig 3.1 may be the best (and easiest) solution.

Though earlier versions of PrintMig were GUI only, version 3.1 can also be
run without user interaction from the command line or in a batch file:

Microsoft (R) Windows (TM) Printer Migrator 3.1
Copyright (C) 1997-2002 Microsoft Corp. All rights reserved

usage: PRINTMIG [options] [server]
       [-?] Display this message
       [-b] Backup - followed by CAB file name
       [-r] Restore - followed by CAB file name
       [-l] Attempt to convert LPR Ports to SPM
       [-i] Suppress warning popups.  Info still written to log file.

If server is not specified then the local machine is implied.

Example command line to restore an existing config to a server:
  printmig -r d:\print\ps1.cab \\prt-srvr1

Example command line to backup a server to the specified file:
  printmig -b "\\filesrv\store\print server 2.cab" \\prt-srvr2

Related Stuff

  • Print files

    Print files using their registered print commands

  • Command Line Switches
    Print (or open, convert, etc.) files using third party viewers/editors and their command line switches
Follow

Get every new post delivered to your Inbox.