473,854 Members | 1,554 Online
Bytes | Software Development & Data Engineering Community
+ Post

Home Posts Topics Members FAQ

MOM script for Citrix idle sessions: ? about running shell commands

At the end of this message I've pasted a script we're trying to modify
slightly. I don't believe it is VBscript or javascript but these are
the closest groups I could find with my limited programming knowledge.
Basically, we are trying to add a few lines to this script that will
execute a few shell commands (see comments at the very end of the
code). We think this may be ActionScript2 but aren't sure.

If you can offer any help, or know of a more approrpriate place for me
to post this message, please let me know. Thanks!

=============== ============

/ event constants
var EVENT_TYPE_SUCC ESS = 0;
var EVENT_TYPE_ERRO R = 1;
var EVENT_TYPE_WARN ING = 2;
var EVENT_TYPE_INFO RMATION = 4;

// WMI constants
var WBEM_IMPERSONAT E = 3;

// Citrix WMI constants
var SESSION_ACTIVE = 0;
function GenerateEvent(E ventNo, EventType, Message) {
var MyEvent = ScriptContext.C reateEvent();
MyEvent.Message = Message;
MyEvent.EventNu mber = EventNo;
MyEvent.EventTy pe = EventType;
MyEvent.EventSo urce = "Citrix MetaFrame";

ScriptContext.S ubmit(MyEvent);
}

function logError(messag e, error)
{
var str = SCRIPT_NAME + ":\n" + message;

if (error)
{
var num = (error.number<0 ) ? error.number+0x 100000000 :
error.number;
var estr = error.descripti on;

if (num == 0x80010105)
estr += " [RPC_E_SERVERFAU LT: The server threw an
exception.]";
else if (num == 0x80041001)
estr += " [WBEM_E_FAILED]";
else if (num == 0x80010108)
estr += " [RPC_E_DISCONNEC TED]";
else if (num == 0x8007007e)
estr += " [ERROR_MOD_NOT_F OUND: The specified module could
not be found.]";
else if (num == 0x80041010)
estr += " [WBEM_E_INVALID_ CLASS]";
else if (num == 0x8004100e)
estr += " [WBEM_E_INVALID_ NAMESPACE]";

if (estr == "")
estr = "<error description not given>";
str += ":\n\tRecei ved error: 0x" + num.toString(16 ) + ": " +
estr;
}

GenerateEvent(2 , EVENT_TYPE_ERRO R, str); }

function ConvertWMITime( wmitime)
{
var year = wmitime.substri ng(0, 4);
var month = wmitime.substri ng(4, 6) - 1;
var day = wmitime.substri ng(6, 8);
var hour = wmitime.substri ng(8, 10);
var minute = wmitime.substri ng(10, 12);
var second = wmitime.substri ng(12, 14);

var date = new Date(year, month, day, hour, minute, second);
return date;
}

function Main()
{
// script should only be run in response to a timed event
if (!ScriptContext .IsEvent()) {
GenerateEvent(1 , EVENT_TYPE_ERRO R, SCRIPT_NAME +
": this script can only be run in response to an event");
return;
}

// parse parameters: 'limit' is the number of minutes the session
// must have been idle before an event is generated
var limit;
try {
limit = ScriptContext.P arameters.Get(" limit");
} catch (e) {
logError("Can't retrieve script parameter", e);
return;
}

// coerce into an integer
var nrminutes = parseInt(limit) ;
if (isNaN(nrminute s) || nrminutes <= 0) {
logError("`limi t' parameter (" + limit +
") is not a valid positive number");
return;
}

// first, retrieve all instances of MetaFrame_Sessi on
var locator, service, sessionobj;
try {
locator = new ActiveXObject(" WbemScripting.S WbemLocator");
service = locator.Connect Server("", "root/Citrix");
sessionobj = service.Get("Me taFrame_Session ");
sessionobj.Secu rity_.impersona tionLevel = WBEM_IMPERSONAT E;
} catch (e) {
logError("WMI error retrieving session object", e);
return;
}

var instances;
try {
instances = sessionobj.Inst ances_();
} catch (e) {
logError("WMI error retrieving session instances", e);
return;
}
// next check the idle time of active sessions and raise an event
// if it exceeds the limit given in the parameter
try {
// gratuitous access to Count to generate error if instances
// can't be retrieved
var nrsessions = instances.Count ;

var e = new Enumerator(inst ances);
for (; !e.atEnd(); e.moveNext()) {
var session = e.item();
if (session.Sessio nState != SESSION_ACTIVE)
continue;

var last = ConvertWMITime( session.LastInp utTime);
var now = ConvertWMITime( session.Current Time);

var diff = (now.getTime() - last.getTime()) / (1000 * 60);

if (diff > nrminutes) {

var user = "(unknown user)";
try {
var userobj = service.Get(ses sion.SessionUse r);
userobj.Securit y_.impersonatio nLevel =
WBEM_IMPERSONAT E;
user = userobj.UserNam e;
} catch (e) {
}

var ev = ScriptContext.C reateEvent();
ev.EventNumber = EVENT_ID;
ev.EventType = EVENT_TYPE_ERRO R;
ev.EventSource = "Citrix MetaFrame";
ev.Message = "Session " + session.Session ID + " for
user " +
user + " has been idle for too long.";
ev.UserName = user;
ev.SetEventPara meter(session.S essionID);
ev.SetEventPara meter(Math.roun d(diff));
ev.SetEventPara meter(nrminutes );
ScriptContext.S ubmit(ev);

// XXXXXXXXXXXXXXX CHANGE TO INSERT HERE XXXXXXXXXXXXXXX XXXXXXX
// We need to change this script so that instead of running the
// commands above (that write an entry to the Event Log), it instead
// executes some external shell commands. It would look something
like
// this in VB script:
//
// oShell.Run("c:\ utils\pskill winword.exe %username%")
// oShell.Run("c:\ utils\pskill excel.exe %username%")
//
// XXXXXXXXXXXXXXX XXXXXXXXXXXXXXX XXXXXXXXXXXXXXX XXXXXXXXXXXXXXX
}
Jul 17 '05 #1
0 6035

This thread has been closed and replies have been disabled. Please start a new discussion.

Similar topics

15
7399
by: Ashot | last post by:
This is sort of both Python and Vim related (which is why I've posted to both newsgroups). Python related: ---------------------- I have been frustrated for quite some time with a lack of a history command in IDLE (in fact with IDLE in general). Often I'll develop new code at the command line, testing each line as I go. Currently I have to copy and paste, removing outputs and the ">>>" at each line. Is it perhaps possible to make...
4
8229
by: Bill Davy | last post by:
To make life easier for my users, I'd like to colour my prompt string (as handed to raw_input()) a different colour to that produced by print. I'm using Python 2.4.1 and IDLE 1.1.1 on Windows XP. Is it possible, and if so, how? tia, Bill
11
78148
by: KathyB | last post by:
Hi, I have an asp.net app running on an Intranet. From one of my aspx pages I would like to run a javascript that will run the following command OUTSIDE of the IIS/asp.net environment on the CLIENT machine (remember, a controlled Intranet!). Is this possible? This windows program needs to be opened and data entered periodically while using the asp.net app as well. The exe runs in a dos command window, tied to a Citrix ica file.
8
38149
by: Harlin Seritt | last post by:
I have a remote linux server where I can only access it via ssh. I have a script that I need to have run all the time. I run like so: python script.py & It runs fine. When I log off ssh I notice that the script died when I logged off. How do I make sure it stays running? thanks,
1
2729
by: dumbandjaded | last post by:
Hey everyone, just a quick general question about using the main python shell (I'm using IDLE on Windows to be exact). Whenever I print some really long output to the screen (> 3000 characters or so), my shell will start lagging very badly. I'm not sure if the shell keeps some memory dedicated to this already outputted data or what, but either way I can't seme to unlock these resources. Restarting just the shell doesn't help, so I end...
5
11296
by: Art | last post by:
Hi, We have some applications that run on a Citrix server. I would like to run one of them, a reporting app, from within a VB.net application. If I log into the Citrix server with remote desktop, I can type a command line that will do what I want. My VB.net application is not on that Citrix server. I'm afraid that if I map a drive to the Citrix box and shell out to the reporting app that I'll take it over -- that is, my use of the...
6
1801
by: MrBlueSky | last post by:
Hi, I'm trying to use IDLE to develop My First Python App and my head hurts... I've a file called spalvi.py with this in it: from Test import * firstTest("Mike") And a file called Test.py with this in it: def firstTest(name): print "Yo",name
3
1946
by: Mark | last post by:
Hello, What I need to know is if there is a better method to run/edit modules on my pc. I'm currently running the IDLE shell under Python 2.5, on Windows XP. Every time I edit my .txt or .py file, I have to restart the IDLE shell for the changes to take effect. It's pretty annoying. Assuming IDLE is already open, here are the steps that I typically take:
5
5086
by: inetquestion | last post by:
I am looking for a web interface for shell commands or shell scripts. Does anyone know of any exexisting php scripts which would solve this requirement? PHP form accepts input from a user, then passes these as arguments to a configurable shell script or OS command. I would like for the output generated from the shell script/command shall be displayed in a new javascript window once the form is submitted. Optimally a user should not...
0
9751
by: Hystou | last post by:
Most computers default to English, but sometimes we require a different language, especially when relocating. Forgot to request a specific language before your computer shipped? No problem! You can effortlessly switch the default language on Windows 10 without reinstalling. I'll walk you through it. First, let's disable language synchronization. With a Microsoft account, language settings sync across devices. To prevent any complications,...
0
11024
Oralloy
by: Oralloy | last post by:
Hello folks, I am unable to find appropriate documentation on the type promotion of bit-fields when using the generalised comparison operator "<=>". The problem is that using the GNU compilers, it seems that the internal comparison operator "<=>" tries to promote arguments from unsigned to signed. This is as boiled down as I can make it. Here is my compilation command: g++-12 -std=c++20 -Wnarrowing bit_field.cpp Here is the code in...
1
10751
by: Hystou | last post by:
Overview: Windows 11 and 10 have less user interface control over operating system update behaviour than previous versions of Windows. In Windows 11 and 10, there is no way to turn off the Windows Update option using the Control Panel or Settings app; it automatically checks for updates and installs any it finds, whether you like it or not. For most users, this new feature is actually very convenient. If you want to control the update process,...
0
10367
tracyyun
by: tracyyun | last post by:
Dear forum friends, With the development of smart home technology, a variety of wireless communication protocols have appeared on the market, such as Zigbee, Z-Wave, Wi-Fi, Bluetooth, etc. Each protocol has its own unique characteristics and advantages, but as a user who is planning to build a smart home system, I am a bit confused by the choice of these technologies. I'm particularly interested in Zigbee because I've heard it does some...
0
9512
agi2029
by: agi2029 | last post by:
Let's talk about the concept of autonomous AI software engineers and no-code agents. These AIs are designed to manage the entire lifecycle of a software development project—planning, coding, testing, and deployment—without human intervention. Imagine an AI that can take a project description, break it down, write the code, debug it, and then launch it, all on its own.... Now, this would greatly impact the work of software developers. The idea...
0
7079
by: conductexam | last post by:
I have .net C# application in which I am extracting data from word file and save it in database particularly. To store word all data as it is I am converting the whole word file firstly in HTML and then checking html paragraph one by one. At the time of converting from word file to html my equations which are in the word document file was convert into image. Globals.ThisAddIn.Application.ActiveDocument.Select();...
1
4557
by: 6302768590 | last post by:
Hai team i want code for transfer the data from one system to another through IP address by using C# our system has to for every 5mins then we have to update the data what the data is updated we have to send another system
2
4153
muto222
by: muto222 | last post by:
How can i add a mobile payment intergratation into php mysql website.
3
3185
bsmnconsultancy
by: bsmnconsultancy | last post by:
In today's digital era, a well-designed website is crucial for businesses looking to succeed. Whether you're a small business owner or a large corporation in Toronto, having a strong online presence can significantly impact your brand's success. BSMN Consultancy, a leader in Website Development in Toronto offers valuable insights into creating effective websites that not only look great but also perform exceptionally well. In this comprehensive...

By using Bytes.com and it's services, you agree to our Privacy Policy and Terms of Use.

To disable or enable advertisements and analytics tracking please visit the manage ads & tracking page.