Solved

Automated Logoff Remote PC's in batch or vbscript

Posted on 2013-05-28
12
495 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
[X]
Welcome to Experts Exchange

Add your voice to the tech community where 5M+ people just like you are talking about what matters.

  • Help others & share knowledge
  • Earn cash & points
  • Learn & ask questions
  • 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 25

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
Webinar: Aligning, Automating, Winning

Join Dan Russo, Senior Manager of Operations Intelligence, for an in-depth discussion on how Dealertrack, leading provider of integrated digital solutions for the automotive industry, transformed their DevOps processes to increase collaboration and move with greater velocity.

 

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 25

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 25

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 25

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

DevOps Toolchain Recommendations

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

Question has a verified solution.

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

Suggested Solutions

Batch, VBS, and scripts in general are incredibly useful for repetitive tasks.  Some tasks can take a while to complete and it can be annoying to check back only to discover that your script finished 5 minutes ago.  Some scripts may complete nearly …
It’s been over a month into 2017, and there is already a sophisticated Gmail phishing email making it rounds. New techniques and tactics, have given hackers a way to authentically impersonate your contacts.How it Works The attack works by targeti…
In this video, we discuss why the need for additional vertical screen space has become more important in recent years, namely, due to the transition in the marketplace of 4x3 computer screens to 16x9 and 16x10 screens (so-called widescreen format). …
The viewer will learn how to count occurrences of each item in an array.

730 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