Solved

Automated Logoff Remote PC's in batch or vbscript

Posted on 2013-05-28
12
493 Views
Last Modified: 2013-05-31
I have about 50 PC's that I need to logoff the users in order to perform a backup of their profiles. I have a TXT file that contains OS - IP - Computername (WIN_7 - 10.10.10.10 - MYPC) in that format. I'm still in the process of learning VB and batch scripts. I need to be able to log off the remote PC's before launching the backup so I can get a clean backup of their PST files.  I'm looking for either VB or batch file to

1) Read the txt file to populate "computername" variable
2) pass the variable to process to logoff the remote PC
3) Loop until EOF


I have tried successfully with psshutdown with my XP systems, but this command seems to not work with Windows 7 computers. I can use shutdown to restart the computer, but I would rather just log the user off.
Can someone help me with some code to make this happen.
0
Comment
Question by:rraymond1130
  • 5
  • 4
  • 3
12 Comments
 
LVL 15

Assisted Solution

by:ZabagaR
ZabagaR earned 250 total points
ID: 39202703
I just tried this and it worked for me.  I auto-logged off 3 remote machines.
My text file of computers is c:\servers.txt (change to your liking below).
You need to edit the username & password too so you have the right credentials in your domain/workgroup to do it.

mytest.vbs
-----------------------------------------------------------------

Const ForReading = 1
sUser = "username"
sPassword = "password"

Set objFSO = CreateObject("Scripting.FileSystemObject")
Set objTextFile = objFSO.OpenTextFile _
    ("c:\servers.txt", ForReading)

Do Until objTextFile.AtEndOfStream
    strNextLine = objTextFile.Readline
    arrServiceList = Split(strNextLine , ",")
    sClient= arrServiceList(0)
 Set oLocator = CreateObject("WbemScripting.SWbemLocator")
 On error resume next
 Set oConnection = oLocator.ConnectServer(sClient, _
   "root\cimv2", sUser, sPassword)
 Set oWindows = oConnection.ExecQuery("Select " & _
   "Name From Win32_OperatingSystem")
 For Each oSys In oWindows
   oSys.Win32ShutDown(4)
 Next
Loop
ObjTS.Close
0
 
LVL 15

Expert Comment

by:ZabagaR
ID: 39202721
forgot to say : my text file c:\servers.txt just had a list of IP addresses of the machine's I wanted to log off. Is that okay?
0
 
LVL 24

Expert Comment

by:Lionel MM
ID: 39204212
If you goal is to copy their profiles then if you only do a logoff some of the files will not be copied and will show up as in use. As such you will be better served with doing a reboot. All you will need is a list of all your PC names (system names--works on servers too) and then run this
for /F "skip=1 tokens=1 delims=," %%i in (C:\Utils\PC-Names.Txt) do shutdown -f -r -t 240 -m %%i
As long as the user that runs this has the required privileges this is all that is needed. I run this from my server once a week (for a different reason) and it works--has for years. This will cause a reboot in 2 minutes (-t 240) if you want it to happen immediately change that to -t 0. You can also add -c "and any comment you want to show up on their pc" (enclose in quotes).
0
DevOps Toolchain Recommendations

Read this Gartner Research Note and discover how your IT organization can automate and optimize DevOps processes using a toolchain architecture.

 

Author Comment

by:rraymond1130
ID: 39204441
ZabagaR I tried you code this morning on a workstation running Windows 7 64Bit. It doesn't log off the computer. I have several Win 7 64bit systems. I will run this test on a Win XP system which we have a majority of.

 Lionelmm thanks for your input. Ultimately I would like to just logoff the user. But if I can't get ZabagaR's solution to work I may have to go your route. I will check back later.
0
 
LVL 15

Expert Comment

by:ZabagaR
ID: 39204449
Do the credentials you're using apply to the Windows 7 64-bit machine(s)?
I tested with three Windows 2008 64-bit servers, running the command from my desktop PC. I think as long as you have the proper rights on those systems it will log you off.
0
 

Author Comment

by:rraymond1130
ID: 39204652
OK Update ZaBagaR your code worked logging off a Windows XP workstation but not a Windows 7 64bit workstations. If there is something that has to be tweaked to make it work with Windows 7 64bit systems that will be a great help.

Lionelmm your code works with both XP and 7, I figured out that you had to add \\ to the system name or IP Address for your code to work. I ultimately would like to Logoff the systems not restart them. The restart code would help to restart the systems once a week, but restarting them every night to run a backup is a little much.
0
 
LVL 24

Accepted Solution

by:
Lionel MM earned 250 total points
ID: 39204840
You can just as easy use a batch file to create a one-time or a daily scheduled task. You can run this from any system  and setup a scheduled task on a  remote system.
http://www.robvanderwoude.com/schtasks.php (see options and examples)

 for /F "skip=1 tokens=1 delims=," %%i in (C:\Utils\PC-Names.Txt) do SCHTASKS /Create /S %%i /U username /P password /SC once /TN Logoff PCs /ST time SD Start date /TR C:\Windows\System32\shutdown.exe -l

This will run once so you can run the batch file whenever or you can run this once and setup the scheduled task to run wherever you want it to.k
0
 

Author Comment

by:rraymond1130
ID: 39205180
Lionelmm Your above solution works Windows 7 64bit computers but I get access denied running it on a Windows XP PC and I'm using the domain admin information.
0
 

Author Comment

by:rraymond1130
ID: 39205188
I'm even running this from a CMD prompt with elevated privileges and still access denied on WinXP. Windows 7 64bit goes straight through. This is crazy..
0
 
LVL 24

Expert Comment

by:Lionel MM
ID: 39205255
try /ru and /rp on XP instead of /u  and /p. and try using /U Domain-Name\username instead of just /U username
0
 
LVL 24

Expert Comment

by:Lionel MM
ID: 39205272
this shows you that these commands should work on XP--these are for XP options
http://www.microsoft.com/resources/documentation/windows/xp/all/proddocs/en-us/schtasks.mspx?mfr=true
0
 

Author Closing Comment

by:rraymond1130
ID: 39211335
Ok, I'm going to have to split this one because I was able to use both solutions. Thanks for the help guys.
0

Featured Post

Master Your Team's Linux and Cloud Stack!

The average business loses $13.5M per year to ineffective training (per 1,000 employees). Keep ahead of the competition and combine in-person quality with online cost and flexibility by training with Linux Academy.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

Have you ever had a hard drive that you can't boot into, but need to change the registry? Here is the solution! This article guides you through accessing and editing a registry of a non-primary drive. To read registry information on a non-prim…
It is a general practice to get rid of old user profiles on a computer  in a LAN environment. As I have been working with a company in a LAN environment where users move from one place to some other place at times. This will make many user profil…
The viewer will learn how to count occurrences of each item in an array.
The viewer will learn how to create and use a small PHP class to apply a watermark to an image. This video shows the viewer the setup for the PHP watermark as well as important coding language. Continue to Part 2 to learn the core code used in creat…

832 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question