jueves, 14 de agosto de 2014

Batch file to seal Citrix PVS gold server and execute NGEN for sealing gold server

***Save this as main sealing batch

@echo off


rem ***STEP 1: Clear all event logs

wevtutil cl System
wevtutil cl Application
wevtutil cl Security
wevtutil cl Setup


SET /P ANSWER=You want to DELETE profiles (Y/N)?
if /i {%ANSWER%}=={y} (goto :yes)
if /i {%ANSWER%}=={Y} (goto :yes)
goto no
:yes
rem ***STEP 2: Clear user profiles

rem Place a copy of delprof on a shared forlder in the network
rem Link to download delprof tool: 
rem http://www.microsoft.com/en-us/download/details.aspx?id=5405


\\SharedFolder\delprof /p

EVENTCREATE /T Information /so CitrixSealing /L Application /ID 1 /D "CitrixSealing: User Profiles reviewed"

:no
EVENTCREATE /T Information /so CitrixSealing /L Application /ID 1 /D "CitrixSealing: User Profiles deletion skipped"


rem ***STEP 3: Set .NET services to Atumatic(delayed) start

:CALLBATCH
sc config clr_optimization_v4.0.30319_64 start= delayed-auto

if %ERRORLEVEL% == 0 goto SUCCESS1
EVENTCREATE /T ERROR /so CitrixSealing /L Application /ID 2 /D "CitrixSealing: Result for Net optimization x64 service set to delatey-auto: FAILED"
GOTO BREAKEND
:SUCCESS1
EVENTCREATE /T Information /so CitrixSealing /L Application /ID 2 /D "CitrixSealing: Result for Net optimization x64 service set to delatey-auto: SUCCEDED"


sc config clr_optimization_v4.0.30319_32 start= delayed-auto

if %ERRORLEVEL% == 0 goto SUCCESS2
EVENTCREATE /T ERROR /so CitrixSealing /L Application /ID 1 /D "CitrixSealing: Result for Net optimization x86 service set to delatey-auto: FAILED"
GOTO BREAKEND
:SUCCESS2
EVENTCREATE /T Information /so CitrixSealing /L Application /ID 1 /D "CitrixSealing: Result for Net optimization x86 service set to delatey-auto: SUCCEDED"




rem ***STEP 4: Set Windows Automatic Updates service to disable


sc config wuauserv start= disabled

if %ERRORLEVEL% == 0 goto SUCCESS4
EVENTCREATE /T ERROR /so CitrixSealing /L Application /ID 1 /D "CitrixSealing: Result for windows Update Service to Disabled: FAILED"
GOTO BREAKEND
:SUCCESS4
EVENTCREATE /T Information /so CitrixSealing /L Application /ID 1 /D "CitrixSealing: Result for windows Update Service to Disabled: SUCCEDED"




rem ***STEP 5: Run NGEN for both x86 and x84 and log execution results

start \\SharedFolder\NGENx86.bat

if %ERRORLEVEL% == 0 goto SUCCESS5
EVENTCREATE /T ERROR /so CitrixSealing /L Application /ID 1 /D "CitrixSealing: NGEN x86 Process initialization: FAILED"
GOTO BREAKEND
:SUCCESS5
EVENTCREATE /T Information /so CitrixSealing /L Application /ID 1 /D "CitrixSealing: NGEN x86 Process initialization: SUCCEDED"


start \\SharedFolder\NGENx64.bat

if %ERRORLEVEL% == 0 goto SUCCESS6
EVENTCREATE /T ERROR /so CitrixSealing /L Application /ID 1 /D "CitrixSealing: NGEN x64 Process initialization: FAILED"
GOTO BREAKEND
:SUCCESS6
EVENTCREATE /T Information /so CitrixSealing /L Application /ID 1 /D "CitrixSealing: NGEN x64 Process initialization: SUCCEDED"


Echo WARNING (1 of 2): Continue ONLY after BOTH NGEN batch files are completed
Echo WARNING (1 of 2): Continue ONLY after BOTH NGEN batch files are completed
Echo WARNING (1 of 2): Continue ONLY after BOTH NGEN batch files are completed
pause

Echo WARNING (2 of 2): Continue ONLY after BOTH NGEN batch files are completed
pause




rem ***STEP 6: SET .NET Services to disable



sc config clr_optimization_v4.0.30319_64 start= disabled

if %ERRORLEVEL% == 0 goto SUCCESS7
EVENTCREATE /T ERROR /so CitrixSealing /L Application /ID 1 /D "CitrixSealing: Result for Net optimization x86 service set to disabled: FAILED"
GOTO BREAKEND
:SUCCESS7
EVENTCREATE /T Information /so CitrixSealing /L Application /ID 1 /D "CitrixSealing: Result for Net optimization x86 service set to disabled: SUCCEDED"

sc config clr_optimization_v4.0.30319_32 start= disabled

if %ERRORLEVEL% == 0 goto SUCCESS8
EVENTCREATE /T ERROR /so CitrixSealing /L Application /ID 1 /D "CitrixSealing: Result for Net optimization x86 service set to disabled: FAILED"
GOTO BREAKEND
:SUCCESS8
EVENTCREATE /T Information /so CitrixSealing /L Application /ID 1 /D "CitrixSealing: Result for Net optimization x86 service set to disabled: SUCCEDED"



rem ***STEP 7: ipconfig /flushdns


ipconfig /flushdns

if %ERRORLEVEL% == 0 goto SUCCESS9
EVENTCREATE /T ERROR /so CitrixSealing /L Application /ID 1 /D "CitrixSealing: ipconfig /flushdns: FAILED"
GOTO BREAKEND
:SUCCESS9
EVENTCREATE /T Information /so CitrixSealing /L Application /ID 1 /D "CitrixSealing: ipconfig /flushdns occurred"



rem ***STEP 8: Prepare image to seal

cd C:\Program Files (x86)\Citrix\XenApp\ServerConfig\
XenAppConfigConsole.exe /ExecutionMode:ImagePrep /RemoveCurrentServer:False /PrepMsmq:True

if %ERRORLEVEL% == 0 goto SUCCESSa

rem ***STEP X: Break if error found during execution.
:BREAKEND
EVENTCREATE /T ERROR /so CitrixSealing /L Application /ID 1 /D "CitrixSealing: XenAppConfigConsole.exe /ExecutionMode:ImagePrep /RemoveCurrentServer:False /PrepMsmq:True: FAILED"
@ECHO AN ERROR OCCURRED, re run imageprep from XenApp console.
pause


:SUCCESSa
EVENTCREATE /T Information /so CitrixSealing /L Application /ID 1 /D "CitrixSealing: XenAppConfigConsole.exe /ExecutionMode:ImagePrep /RemoveCurrentServer:False /PrepMsmq:True: SUCCEDED"

rem ***STEP 9: Turn off the server

shutdown -s -t 30
cls
@echo Sealing completed, this server now being turned off in 30 secs.
pause
exit

*** end of main Selaing batch

*** start of NGENx64 update

cd C:\Windows\Microsoft.NET\Framework64\v4.0.30319
NGEN update /force
EVENTCREATE /T Warning /L APPLICATION /ID 1 /D "Citrix Sealing: NGEN x64 EXECUTION: END WITH ERRORS"
@ECHO AN ERROR OCCURRED, RE RUN NGEN Update on this server, then continue this batch file execution.
pause
:SUCCESS1
EVENTCREATE /T Information /L APPLICATION /ID 1 /D "Citrix Sealing: NGEN x64 EXECUTION: SUCCEDED"
NGEN eqi
if %ERRORLEVEL% == 0 goto SUCCESS2
EVENTCREATE /T ERROR /L APPLICATION /ID 1 /D "Citrix Sealing: NGEN x64 EQI EXECUTION: END WITH ERRORS"
@ECHO AN ERROR OCCURRED, RE RUN NGEN EQI on this server, then continue this batch file execution.
pause
:SUCCESS2
EVENTCREATE /T Information /L APPLICATION /ID 1 /D "Citrix Sealing: NGEN x64 EQI EXECUTION: SUCCEDED"
cls
@ECHO NGEN completed for x64, you can close this window and go back to main batch file.
pause
exit
***save this as NGENx64.bat and place it on \\sharedfolder
*** end of NGENx64 update

*** start of NGENx86 update
cd C:\Windows\Microsoft.NET\Framework\v4.0.30319
NGEN update /force
if %ERRORLEVEL% == 0 goto SUCCESS1
EVENTCREATE /T Warning /L APPLICATION /ID 1 /D "Citrix Sealing: NGEN x86 EXECUTION: END WITH ERRORS"
@ECHO AN ERROR OCCURRED, RE RUN NGEN Update on this server, then continue this batch file execution.
pause
:SUCCESS1
EVENTCREATE /T Information /L APPLICATION /ID 1 /D "Citrix Sealing: NGEN x86 EXECUTION: SUCCEDED"
NGEN eqi
if %ERRORLEVEL% == 0 goto SUCCESS2
EVENTCREATE /T ERROR /L APPLICATION /ID 1 /D "Citrix Sealing: NGEN x86 EQI EXECUTION: END WITH ERRORS"
@ECHO AN ERROR OCCURRED, RE RUN NGEN EQI on this server, then continue this batch file execution.
pause
:SUCCESS2
EVENTCREATE /T Information /L APPLICATION /ID 1 /D "Citrix Sealing: NGEN x86 EQI EXECUTION: SUCCEDED"
cls
@ECHO NGEN completed for x86, you can close this window and go back to main batch file.
pause
exit
***save this as NGENx86.bat and place it on \\sharedfolder
*** end of NGENx86 update

VBS para obtener las propiedades de cuentas anonimas locales desde multiples computadoras




Set objFSO = CreateObject("Scripting.FileSystemObject")
Set objFile = objFSO.CreateTextFile("UserProperties.txt", True)
Set objServerlist = objFSO.OpenTextFile("c:\Servers.txt", 1)

On Error Resume Next
Dim Counter, Counter2

Do Until objServerList.AtEndOfStream
strComputer = objServerList.ReadLine
objFile.WriteLine "Server: " & strComputer
objFile.WriteLine ""
Counter = 0
Counter2 = 0

Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\cimv2")
Set colItems = objWMIService.ExecQuery _
    ("Select * from Win32_UserAccount Where LocalAccount = True ")
For Each objItem in colItems

If InStr(objItem.Name, "Anon") Then
        Counter = Counter +1
if objItem.PasswordExpires = True Then
Counter2 = Counter2 +1
  objFile.WriteLine "Caption: " & objItem.Caption
    objFile.WriteLine "Disabled: " & objItem.Disabled
    objFile.WriteLine "Lockout: " & objItem.Lockout
    objFile.WriteLine "Password Changeable: " & objItem.PasswordChangeable
    objFile.WriteLine "Password Required: " & objItem.PasswordRequired
    objFile.WriteLine ""
End If
End If
Next
objFile.WriteLine "Anonymous users found:" & Counter
objFile.WriteLine "Anonymous users found with password to expire:" & Counter2
objFile.WriteLine ""
objFile.WriteLine "----------------------------------------"
Loop
wscript.echo "Local account query properties complete"

VBS para renombrar un drive en multiples computadoras en un TXT


Set objFSO = CreateObject("Scripting.FileSystemObject")
Set objFile = objFSO.CreateTextFile("ServersRenamed.txt", True)
Set objServerlist = objFSO.OpenTextFile("c:\serverstorename.txt", 1)

On Error Resume Next
Dim Counter, Counter2

Do Until objServerList.AtEndOfStream
strComputer = objServerList.ReadLine
objFile.WriteLine "Server: " & strComputer
objFile.WriteLine ""
Counter = 0
Counter2 = 0

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

Set colDrives = objWMIService.ExecQuery _
    ("Select * from Win32_LogicalDisk where DeviceID = 'D:'")

For Each objDrive in colDrives
    objDrive.VolumeName = "0DNM_Pagefile"
    objDrive.Put_
Next
objFile.WriteLine "Server edited: " & strComputer
    objFile.WriteLine ""

Loop
wscript.echo "Drive re-label complete"

VBS para obtener el estado de un servicio de una lista de computadoras en un TXT



strService = "SpoolSv"
srtCitrixServerListLocation  = "c:\ServerNames.txt"

Set objFSO = CreateObject("Scripting.FileSystemObject")
Set objFile = objFSO.CreateTextFile("ServiceQueryResults.txt", True)
Set objServerlist = objFSO.OpenTextFile(srtCitrixServerListLocation, 1)


Do Until objServerList.AtEndOfStream
strComputer = objServerList.ReadLine

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


Set colListOfServices = objWMIService.ExecQuery _
("Select * from Win32_Service ")
For Each objService in colListOfServices
If objService.name = strService then
objFile.WriteLine strComputer & "," & objService.name & "," & objservice.state
End if
Next
Loop

wscript.echo "Service query completed"

VBS que obtiene las propiedades de red de una lista de servers TXT

***Inicio del script

On Error Resume Next

Set objFSO = CreateObject("Scripting.FileSystemObject")
Set objFile = objFSO.CreateTextFile("NICProperties.txt", True)
Set objServerlist = objFSO.OpenTextFile("c:\citrixservers.txt", 1)


Do Until objServerList.AtEndOfStream
strComputer = objServerList.ReadLine
objFile.WriteLine "Server: " & strComputer
objFile.WriteLine ""



Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\CIMV2")
Set colItems = objWMIService.ExecQuery( _
    "SELECT * FROM Win32_NetworkAdapterConfiguration",,48)
For Each objItem in colItems
    'objFile.WriteLine "-----------------------------------"
    'objFile.WriteLine "Win32_NetworkAdapterConfiguration instance"
    'objFile.WriteLine "-----------------------------------"
     If isNull(objItem.DNSHostName) Then
    '    objFile.WriteLine "DNSHostName: "
     Else
        'objFile.WriteLine "DNS Host Name: " & objItem.DNSHostName
         objFile.WriteLine "Description: " & objItem.Description
    ' objFile.WriteLine "IP Address: " & Join(objItem.IPAddress, ",")
       ' objFile.WriteLine "IP Subnet: " & Join(objItem.IPSubnet, ",")
    objFile.WriteLine "DNS Server Search Order: " & Join(objItem.DNSServerSearchOrder, " , ")
    objFile.WriteLine "DNS Suffix: " & objItem.DNSDomain

     End If
Next
Loop


wscript.echo "End"

***Fin del script

VBS que obtiene los numeros de serie de una lista de computadoras en un archivo TXT



***Inicio del script

On Error Resume Next

Dim System

if Wscript.Arguments.Count >0 then
sSystem=Wscript.Arguments(0)
end if

Set objFSO = CreateObject("Scripting.FileSystemObject")
Set objFile = objFSO.CreateTextFile("ArchivoDeSalida_SerialNumber.txt", True)
Set objServerlist = objFSO.OpenTextFile("c:\ServerNames.txt", 1)


Do Until objServerList.AtEndOfStream
strComputer = objServerList.ReadLine
'objFile.WriteLine "Server: " & strComputer
'objFile.WriteLine ""


'ComputerName = InputBox("Enter the name of the computer you wish to query")
ComputerName = strComputer
winmgmt1 = "winmgmts:{impersonationLevel=impersonate}!//"& ComputerName &""
Set SNSet = GetObject( winmgmt1 ).InstancesOf ("Win32_BIOS")

for each SN in SNSet
   'MsgBox "The serial number for the specified computer is: " & SN.SerialNumber
    objFile.WriteLine ComputerName & "," & SN.SerialNumber
Next
Loop

wscript.echo "End"

***Fin del script