Buuuut, AT.EXE (in Win2K) doesn't run as the currently-logged-in user. I know I can change that, but it doesn't appear to be programmatically changeable (and I don't want to go around to all of these machines).
But yes it is programmatically changeable. The following is a snippet of a hack I did...
#!/usr/bin/perl -w
# Modules
use strict;
use Win32::API;
# Variables
use vars qw($host $user $password $success $OpenSCManager $LockService
+Database);
use vars qw($lock $OpenService $ChangeServiceConfig $SChandle $Shandle
+);
use vars qw($UnlockServiceDatabase $CloseServiceHandle);
# Constants
use constant SC_MANAGER_ALL_ACCESS => 0x000F0000|0x0001|0x0002
|0x0004|0x0008|0x0010|0x0020;
use constant SERVICE_CHANGE_CONFIG => 0x0002;
use constant SERVICE_NO_CHANGE => 0xffffffff;
# Change theese...
$host="SOME_COMPUTER";
$user=".\\local_user_account";
$password="password_for_user";
# Import stuff
$OpenSCManager = new Win32::API(
"advapi32",
"OpenSCManager",
["P", "N", "N"],
"I");
if (! defined $OpenSCManager) {
die "Can't import OpenSCManager";
}
$LockServiceDatabase = new Win32::API(
"advapi32",
"LockServiceDatabase",
["I"],
"I");
if (! defined $LockServiceDatabase) {
die "Can't import LockServiceDatabase";
}
$OpenService = new Win32::API(
"advapi32",
"OpenService",
["I", "P", "N"],
"I");
if (! defined $OpenService) {
die "Can't import OpenService";
}
$ChangeServiceConfig = new Win32::API(
"advapi32",
"ChangeServiceConfig",
["I", "N", "N", "N", "P", "P", "N", "P", "P", "P", "P"],
"N");
if (! defined $ChangeServiceConfig) {
die "Can't import ChangeServiceConfig";
}
$UnlockServiceDatabase = new Win32::API(
"advapi32",
"UnlockServiceDatabase",
["I"],
"I");
if (! defined $UnlockServiceDatabase) {
die "Can't import UnlockServiceDatabase";
}
$CloseServiceHandle = new Win32::API(
"advapi32",
"CloseServiceHandle",
["I"],
"I");
if (! defined $CloseServiceHandle) {
die "Can't import CloseServiceHandle";
}
$SChandle=$OpenSCManager->Call(
$host,
0,
SC_MANAGER_ALL_ACCESS);
die "Failed to open service manager on $host" unless $SChandle;
$lock=$LockServiceDatabase->Call(
$SChandle);
die "Failed to lock service database on $host" unless $lock;
$Shandle=$OpenService->Call(
$SChandle,
"Schedule",
SERVICE_CHANGE_CONFIG);
die "Failed to open Task Scheduler on $host" unless $Shandle;
$success=$ChangeServiceConfig->Call(
$Shandle,
SERVICE_NO_CHANGE,
SERVICE_NO_CHANGE,
SERVICE_NO_CHANGE,
0,
0,
0,
0,
$user,
$password,
"Task Scheduler");
print "Change status: ";
print $success?"OK\n":"Failed\n";
$UnlockServiceDatabase->Call(
$lock);
$CloseServiceHandle->Call(
$SChandle);
/brother t0mas