Microsoft — Desligar Workstations via Script

Quantos administradores não precisaram em algum momento algum script que desligasse os computadores da rede por algum motivo em específico, seja ele pra bonito, poupar energia ou por simples vontade de brincar com scripts.

 Eis que a mim chegou esta necessidade visto que alguns dos computadores estavam conectados ao mesmo no-break dos servidores e que em períodos de falta de energia acabavam ocasionando paradas não planejadas nos servidores por estarem diversas dessas estações de trabalho ligadas durante finais de semana ou madrugadas.

 O script consiste em dois arquivos: Um no formato .vbs e outro em formato .bat

 Esses dois arquivos devem ser salvos em um local onde o Active Directory possa enxergar e você lembre depois para poder configurar uma tarefa agendada através deles.

lst_comp.vbs

O script lst_comp.vbs lista as máquinas adicionadas a uma “OU” anteriormente criada para Desligar as estações. No caso do script abaixo eu criei uma “OU” na seguinte árvore e usei a seguinte Base dn no mesmo:

“OU=Desligar,OU=Computadores,DC=empresa,DC=local


Os computadores na OU Desligar serão os listados para desligar pelo script lst_comp.vbs. Para alterar este caminho verifique a linha 56 e altere conforme sua necessidade de Base dn.

 Crie o script abaixo no bloco de notas(ou outro editor de vbs) com o nome “lst_comp.vbs”:

'_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/
'
'
' Script Name: GetMachineNames.vbs
'
' Date: January 15, 2006
'
' Purpose: Pulls object information out of AD
'
' Author: Marlon Meiklejohn
'
'
' Revision History
' ----------------
'
'
Option Explicit
'   Define Variables
Dim fso
Dim WshShell
Dim oOu
Dim oItem
Dim fsOutputFile
Dim sOutputText
Dim sOutputFileName
Dim sOUPath
Dim sSearch
Dim bRunByCScript
Dim iPos
'   Set up the system variables
Set WshShell = wscript.CreateObject("WScript.Shell")
Set fso = CreateObject("Scripting.FileSystemObject")
' Check if run from wscript or cscript - Used for debugging.
sSearch = "cscript"
iPos = InStr(Wscript.FullName, sSearch)
If iPos > 0 Then
bRunByCScript = True
Else
bRunByCScript = False
End If
'   Define the output file name
sOutputFileName = ".MachineList.txt"
'   Create the output file
Call CreateOutputFile()
'   Define the OU path
sOUPath = "OU=Desligar,OU=Computadores,DC=empresa,DC=com"
'_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/
'
' Main Logic
'
'   Define the OU object
Set oOu = GetObject("LDAP://" & sOUPath & "")
'   Filter for only the objects you want.
oOu.Filter = Array("Computer")
'   Loop through all objects and grab the
' information you're looking for.
For Each oItem In oOu
'   Strip out the "CN=" at the beginning of the line.
sOutputText = Right(oItem.Name, Len(oItem.Name) - 3)

' If script was run by CScript, then echo the information to the user.
If bRunByCScript = True Then
Wscript.Echo sOutputText
End If

' Write to the output file
Call WriteOutputFile (sOutputText)
Next
'   Close the output file.
Call CloseOutputFile()
'   Notify the user that the script is finished.
' WScript.echo "File created: " & sOutputFileName
'   Cleanup and get out.
Call Cleanup()
Wscript.Quit
'_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/
'
' SubRoutines
'
'_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/
'_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/
'
' Creates the output file.
'
Sub CloseOutputFile()
fsOutputFile.Close
End Sub
'_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/
'
' Creates the output file.
'
Sub CreateOutputFile()
Set fsOutputFile = fso.CreateTextFile(sOutputFileName)
End Sub
'_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/
'
' Writes to the output file
'
Sub WriteOutputFile(sText)
fsOutputFile.WriteLine sText
End Sub
'_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/
'
' Clean up the variables
'
Sub Cleanup()
On Error Resume Next
Set fso = Nothing
Set WshShell = Nothing
Set oOu = Nothing
Set oItem = Nothing
Set fsOutputFile = Nothing
Set sOutputText = Nothing
Set sOutputFileName = Nothing
Set sOUPath = Nothing
Set sSearch = Nothing
Set bRunByCScript = Nothing
Set iPos = Nothing
End Sub
'_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/
'
' End of Script
'
'_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/


Este script vasculhará a OU informada na linha 56 e criará um arquivo .txt de nome "MachineList.txt" no mesmo diretório onde o script está armazenado todas as vezes que a tarefa agendada rodar apagando o arquivo antigo e criando um novo com o mesmo nome.
desliga.bat
O script desliga.bat é o responsável direto pela execução do script anterior. Ele é quem "chama" o script lst_comp.vbs, que por sua vez lista as máquinas para que o desliga.bat execute o desligamento baseado na lista MachineList.txt.

Neste caso eu havia salvos os dois arquivos em D:supportscripts e abaixo é possível verificar que o .bat navega até o diretório acima, "chama" o lst_comp.vbs e depois executa o comando de desligamento com a lista dos computadores em MachineList.txt.
@echo off
d:
cd supportscripts
call d:supportscriptslst_comp.vbs
FOR /F %%a IN (MachineList.txt) DO (
shutdown /f /s /m %%a
)
Depois de criar os scripts, lembre-se de criar a tarefa agendada pelo Windows Server para o horário desejado apontando a tarefa para o script desliga.bat.


Add a Comment

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *