Jul 222013
 

Just a quick snippet of code to convert seconds to hours, minutes, and seconds, with the hours shown optionally.


function fromSeconds(seconds, showHours = false) {
if(showHours) {
var hours = Math.floor(seconds / 3600);
seconds = seconds - hours * 3600;
}
var minutes = (Math.floor(seconds/60) < 10) ? "0" + Math.floor(seconds/60) : Math.floor(seconds/60); var seconds = (seconds % 60 > 9) ? seconds % 60 : "0" + seconds % 60;
if(showHours) {
var timestring = hours+":"+minutes+":"+seconds;
} else {
var timestring = minutes+":"+seconds;
}
return timestring;
}

Share
Jul 162012
 

I’ve used this script to create a To-Do list based on the tasks I have in Outlook.

First up, we create the Outlook ActiveX Object

outlookApp = new ActiveXObject("Outlook.Application");
nameSpace = outlookApp.getNameSpace("MAPI");
nameSpace.logon("","",false,false);

Then we specify the default folder as the “Tasks” in Outlook

Tasks = nameSpace.getDefaultFolder(13);

Then we create the myTasks object from the items within the Outlook task list.

myTasks = Tasks.Items;

I have used a for loop here to go through all the tasks, however a while loop can also be used.
The first line gets the amount of tasks that exist, and then I create a variable to store all the tasks that I have, and then the for loop then goes through them all.

count = myTasks.Count;
result = '';
for(x = 1; x <= count; x++) { result += "-"+myTasks(x)+ "\n"; }

Now at the end I log off Outlook and clear all the variables.

nameSpace.logoff();
olLoggedOn = false;
nameSpace = null;
outlookApp = null;

Placing that code into a JScript file for execution from another program, e.g. Samurize, or creating a little HTML application will then allow you to look at your Outlook tasks without needing Outlook open.

If you have multiple categories which you want multiple lists for, you can restrict them using "Categories" property.
For example, if I only wanted Tasks that had the category of "blog", I could restrict it via the categories property.

myTasks = Tasks.Items;
myTasks.Restrict("[Categories] = blog");

The myTasks object will now only contain items that has the category blog.

The same can be done with the "Completed" flag

myTasks = Tasks.Items;
myTasks.Restrict("[Complete] = false");

Now the myTasks item will only contain items that aren't marked as completed.

Hopefully this helps someone out there !
Happy Coding !

Share
Jul 132012
 

Recently, I wanted to make a script to read the subjects from a set of emails that I was receiving that was telling me what jobs I’d been assigned in the internal ticketing system at work.
Each time I got assigned a job, it would send me an email. Using this little scriptlet, I made a display to show me what the subjects were so I could see what jobs I had.

First step is to create the ActiveX object that taps into Outlook, and set that object up.

outlookApp = new ActiveXObject("Outlook.Application");
nameSpace = outlookApp.getNameSpace("MAPI");
nameSpace.logon("","",false,false);

Once the object has been setup, we can select the desired folder.
The getDefaultFolder(6) selects the Inbox as the folder start from.
The Inbox object then has all the folders under the Inbox assigned to it.

mailFolder = nameSpace.getDefaultFolder(6);
var Inbox = mailFolder.Folders;

Next up, I’m selecting the subfolder that I want the email subjects from, and assigning it to the box variable.

var box = Inbox.Item("SRs Assigned To Me").Items;

This bit is where we read the subjects from the emails themselves.
We get the first item in the folder using the GetFirst method, then we use a while loop to keep getting the subjects until there are no more emails. In this example, all the subjects are appended to the list variable, but you can choose to put them into an array, or echo them out directly using WScript.Echo. The choice is up to you.

var boxmail = box.GetFirst;
var list = '';
while(boxmail != null) {
list += boxmail.subject+"\n";
boxmail = box.GetNext;
}

Lastly, we tell the script to tell outlook to close all the connections that it opened to read the emails.

nameSpace.logoff();
olLoggedOn = false;
nameSpace = null;
outlookApp = null;

With this script, you can view other properties of the emails, or count how many emails you have in a specific folder, or even in the Inbox itself. Putting this snippet into an HTA will even allow you to make a little email counter window.

Share
Oct 132011
 

Recently I’ve had to pull out sites and subnets from AD in order to match an IP Address against the subnet that I pulled out to determine whether a workstation is in that site.
I ran into some issues trying to do it in JScript because for some strange reason, the Description attribute for all the subnets is an array, so I had to convert it from a VB array to a Javascript array.

Now, onto the code I used –

First up, is setting up the ADO Connection.

var objRootDSE = GetObject("LDAP://RootDSE");
var strDomain = objRootDSE.Get("configurationNamingContext");
var objConnection = new ActiveXObject("ADODB.Connection");
objConnection.Provider="ADsDSOObject";
objConnection.Open("ADs Provider");
var objCommand = new ActiveXObject("ADODB.Command");
objCommand.ActiveConnection = objConnection;

All that does is setup the connection to AD and open up the connection using the ADs Provider.

Next up, is to run the query which will return all the Subnets within AD.

var Dom = "LDAP://CN=subnets,CN=Sites,"+strDomain;
objCommand.CommandText = "select cn,Name,Location,Description from '"+Dom+"'";
objSiteRecordSet = objCommand.Execute();

This will return a recordset with all subnets and their descriptions and locations.

After that, a simple case of enumerating the recordset to get what we need out of it.
In this example, I have returned just Name and Description, which means that in the earlier query, I needn’t have query all 4 attributes.

while(!(objSiteRecordSet.EoF)) {
var Desc = '';
var IPRange = objSiteRecordSet.Fields('Name').Value;
var Desc = objSiteRecordSet.Fields('Description').Value;
if(Desc == null) {
Desc = IPRange;
} else {
Desc = VBArray(Desc).toArray();
}
var result = [IPRange,Desc];
arrSites.push(result);
objSiteRecordSet.MoveNext;
}

In that code, the results are pushed into the arrSites array to be used elsewhere or to be returned depending on what you’re doing with the data.

Share