Professional Geek
RSS icon Email icon Bullet (black)
  • Employee Hiring

    I still find it weird how blog posts seem to turn up just when they are relevant to me. It happens on a regular basis. I’ll be thinking about a change i want to make in the business and within days someone has posted about. It’s like the blog-o-sphere force knows what I’m thinking!

    So while the post Vlad made about hiring strategies is now a couple of weeks old I’ve only just got around to blogging about it because I’ve been preparing for our new starter!

    The business has got to the level where we needed someone else. We have enough work to keep us going at the current level but the business wont grow in it’s current state and if we started taking on any more work it wouldn’t be fair on the customers we do have as we’d be too stretched and that’s not the sort of business I’m interested in on both of those areas. We also need to free up more time to get in front of new prospects, develop new services and execute the “master plan”

    So we had to make the decision about what kind of person to get.

    We eventually decided we needed some to help ease the day to day problems. Someone to help the end users when they need a print spooler restarting, explain how to login to Outlook Web Access and find out why there is nothing on the screen when the power cable has been unplugged.

    After we’d done the interviews there was a wide range of skill sets and experience to choose from.

    The person who seemed to stick out was the guy who was confident and articulate, smartly dressed and had made the effort to put the effort into the tiny details. Also he’s keen and eager and was actually willing to make a lot of sacrifices to come and work for us (I wont detail those here though as it’s his personal business)

    But the initial problem was his lack of experience. He was very open about the fact he wanted to “break into IT” but was in the classic catch 22 situation

    Can’t get job without the experience, can’t get the experience without a job

    Every time we reviewed it again we came back to the same conclusion

    “If he had a bit more experience he’d be perfect”

    We knew straight away he’d fit in with us and wouldn’t have a problem dealing with our clients

    It finally dawned on us that we needed to get the right person for the company not the right person for the role

    So we offered him the job.

    If I’m being honest if we were looking to fill the role he would have been bottom of the list

    But he could get his experience for us. We know he’s a perfect fit for our company and if you want to learn about the IT industry I think the SMB area is a pretty good place to start! He’s been with us for a week and a half and I can see the difference already and I’m looking forward to the next six months

    I’ve mentioned the blog to him a couple of times but not sure if he’s reading

    But if you are,

    Welcome to the business…we hope you enjoy the ride!

  • Clearing Exchange 2003 SMTP Queues

    Earlier this week we had a client whose junior sales person decided to do a mail shot to some of their customer base. He wanted to send some attachments with information. The attachments totaled about 5mb in size (the default outgoing size limit had been changed at their request some time ago)

    So the sales guy clicked the send button and the 5mb message was submitted to exchange to send out to 150 recipients

    See the problem here? The exchange server was busy trying to send over 750MB of email which was stopping everything else from going out

    When I logged onto the server and viewed the queues I was a bit that annoyed that I’d have to go into every queue (one per domain), click “find messages”, then “find”, then delete all the offending messages. I knew there must be a better way but decided to look into it later as the problem needed sorting. It took me about half an hour but I cleaned up and all was well

    Until the day after.

    The same guy did exactly the same thing but to over 200 recipients. After late time I’d suggested he uploaded the attachments to his website and had a link in the email but that advice fell on deaf ears

    So I had no wish to go through all the queues again

    I found this post by Chrissy LeMaire most helpful. She has a vbscript that you can use to completely wipe out ALL the messages in ALL queues.

    I didn’t want to be quite so destructive as there were legitimate messages still in the queue so I made some changes so that the script asks you who sent the message and only deletes the specific messages. It also has a “report” mode which is it a bit like a “are you really sure” message. This will just let you know how many message would have been deleted

    Here is the script. I’ve marked my changes so that the script can be returned to it’s original state

    On reflection my changes are a bit rough and ready and when I get some more time I may change the WMI query so that it returns just the messages I want instead of returning all the messages and then checking to see which ones to delete though that’s just me being picky I guess

    Also take a look at Chrissy’s site. It’s very useful and has been added to my feed list!

    'Original Author: Chrissy LeMaire
    ' Copyright 2003 NetNerds Consulting Group
    ' Script is provided AS IS with no warranties or guarantees and assumes no liabilities.
    ' Website:
    ' Description: This scripts empties out the entire Exchange queue. USE WITH CAUTION.

    ' Modified by Andy Parkes - Changes indicated below

    ' Andy's new section 1
    dim txtemailAddress
    dim mailcounter
    dim deletemode
    mailcounter = 0
    txtemailAddress = LCASE(INPUTBOX("Please enter the email address SENDER to clear"))

    if txtemailAddress = "" then
    end if
    deletemode=MSGBOX("Click YES for DELETE MODE or NO for REPORT MODE",vbYesNo)
    ' End of new section 1

    Set objWMIExch = GetObject("winmgmts://./root/MicrosoftExchangeV2")
    Set objLinksList = objWMIExch.ExecQuery ("Select * from Exchange_SMTPLink")
    For each objLinkInst in objLinksList
    strSQL = "Select * from Exchange_SMTPQueue where "
    strSQL = strSQL & "LinkID='" & objLinkInst.LinkID
    strSQL = strSQL & "' and LinkName='" & objLinkInst.LinkName
    strSQL = strSQL & "' and ProtocolName='" & objLinkInst.ProtocolName
    strSQL = strSQL & "' and VirtualMachine='" & objLinkInst.VirtualMachine
    strSQL = strSQL & "' and VirtualServerName='" & objLinkInst.VirtualServerName & "'"
    Set objQueuesList = objWMIExch.ExecQuery (strsql)
    For each objQueueInst in objQueuesList
    i = i +1
    If i > 7 And InStr(objQueueInst.QueueName,".") > 0 Then 'make sure its not the built in stuff
    strSQL = "Select * from Exchange_QueuedSMTPMessage where " '<-- This class requires that you pass ALL the variables below in the where buy brand ativan clause
    strSQL = strSQL & "LinkID='" & objLinkInst.LinkID
    strSQL = strSQL & "' and LinkName='" & objLinkInst.LinkName
    strSQL = strSQL & "' and ProtocolName='" & objLinkInst.ProtocolName
    strSQL = strSQL & "' and QueueID='" & objQueueInst.QueueID
    strSQL = strSQL & "' and QueueName='" & objQueueInst.QueueName
    strSQL = strSQL & "' and VirtualMachine='" & objLinkInst.VirtualMachine
    strSQL = strSQL & "' and VirtualServerName='" & objLinkInst.VirtualServerName & "'"
    Set objQueuesList1 = objWMIExch.ExecQuery (strsql)
    For each objQueueInst1 in objQueuesList1
    If i > 7 And InStr(objQueueInst1.QueueName,".") > 0 Then
    ' Andy's new section 2
    if LCASE(objQueueInst1.sender)=txtemailAddress then
    mailcounter = mailcounter + 1
    if deletemode=6 then
    end if
    end if
    ' End of new section 2
    End If
    End If
    ' Andy's new section 3
    WScript.echo "Operation completed - " & i & " queues scanned - " & mailcounter & " messages processed"
    ' End of new section 3

  • Sharepoint Question…HELP!?

    A while back I was experimenting with e-mail enabled lists and workflows

    I had it setup so that when an email was received (a backup failure alert for example) it would go straight into a sharepoint email enabled list where it would then examine the contents and set some column information

    The experiment went well and I left it at that with the plan to do something with it at a later date

    That date ended up being today.

    I create an email enabled list and had a workflow that examined the email and performed actions after. While I was testing I fired the workflow off manually and it all worked fine

    I set it to run automatically and that’s where I had a problem. The workflow just wouldn’t fire

    I found a knowledgebase article that indicates a security fix in service pack 1 stops workflows starting automatically

    I followed the instructions and reset the application pool logon account which stopped SharePoint picking my emails up from the “drop folder”

    So i set the Sharepoint timer service to the same logon account and this fixed that problem but it still wasn’t firing off the workflow

    If I create a new item myself the workflow starts automatically as expected

    So it’s only incoming emails it has a problem with

    Further research suggests that it’s the anonymous nature of external e-mails (that are marked as created by the “SYSTEM ACCOUNT”) but this isn’t the case in this situation because if i send a message internally the workflow still doesn’t fire (and yes it is marked as created by the internal user)

    Said research can be found here (read the comments) (read the troubleshooting system)

    I found an entry on the managed newsgroups (do a search for “Workflow doesn’t start” and MANTAS) which recognised the problem. The end user suggested he could create an event handler to manually fire the workflow but this isn’t an option for me for two reasons

    1) I’m not a sharepoint developer – this is a “no-code” solution

    2) This needs to be easily deployable for other installations as it’s a really useful feature that used to work..and doesn’t now

    Any help would be appreciated if you have run into this before. I’ll update the post of I find out anything else

  • Restore a list or library in WSS v2

    This might be a pretty obvious tip but hopefully it will help someone!

    The version of SharePoint that comes with SBS is a little unforgiving if you delete something. Out of the box there is no recycle bin so if something is gone it’s gone.

    On the backup section of there is document (also available here) that explains how to setup the following command as a scheduled task to backup the sharepoint on a daily basis (you are doing this? right?)

    “%SystemDrive%\Program files\Common files\Microsoft shared\Web server extensions\60\Bin\Stsadm.exe” -o backup -url http://Companyweb -filename target path -overwrite

    Where target path is where you save the backup of your internal Web site. You must type the quotation marks.

    I’ve wrapped this in a vbscript to give me five days worth of backups, just in case and i’ll post this another time

    The idea then is if you need to retrieve a document or a list item you restore the whole site to a temporary location and copy back what you need using this command

    “%SystemDrive%\Program files\Common files\Microsoft shared\Web server extensions\60\Bin\Stsadm.exe” -o createsiteinnewdb -url http://companyweb/sites/RestoredSite -ownerlogin DOMAIN\administrator -ownere-mail administrator@DOMAIN.local -databasename STS_RESTORE

    where DOMAIN is your server domain and administrator@DOMAIN.local is your administrator’s e-mail address.

    Once your finished you tidy up after yourself by deleting the restored site using Sharepoint central administration and deleting the SQL database (the exact details for this are in the document i mentioned above)

    I did this last week and it’s a pretty straightforward thing to do

    However my client wasn’t after a specific document or list item. They were after the whole thing as they had “accidentally” deleted an important list

    Once i’d restored the site i initially thought i’d have to re-create the list by hand, adding all the columns and the views then copy the items back

    I thought there had to be an easier way and this what i did

    Go to the restored version of the list (or library) and click “Modify settings and columns”

    Then click the “save as a template” option. Enter a filename and title and most importantly ensure the “include content” checkbox is checked and click OK. This saves the template to the site templates gallery

    Then click on the “Site Settings” option, then “Go to Site Administration” and finally “Manage list template gallery”.

    In here you will see your saved item. Click on the file name and save the STP file to file location of your choosing

    Go to the production site and repeat the steps to get into the List Template Gallery.

    From here you can now upload the saved STP file

    The click on the CREATE item at the top and you will see you can create a new list based on your restored item.

    Once created everything will be back in place including all the content inside! (I’m guessing security will need to reset by hand if it originally didn’t inherit from the site)

    You can then delete the list template as it’s not needed


    As i said from the start on reflection this seemed pretty obvious but in the past i’ve done plenty of things that seemed obvious only for them to turn up in another blog a couple of days later so hopefully someone will get some use from this!

  • Calendars and Content Types in SharePoint 2007

    Two SharePoint posts in one day!

    I only recently “got” content types in SharePoint. I’m not exactly sure why I had such a mental block about it but the penny finally dropped and I got quite excited about the possibilities (I’m such a geek)

    So what I wanted to do was create some content types to use in calendars

    In the previous version of SharePoint I had a company calendar that I used to track everything from meetings, to on-site support visits, to holidays and sick days

    Once single form to try and figure all that out. Very ugly and difficult to use

    For example, if your going to a client site, the customer name, a contact and a ticket reference are all pretty useful pieces of information. But if I’m just taking a couple of days off those fields become very pointless

    Enter the content type!

    I had the bright idea to create a content type for each of these “event types”

    I pretty quickly ran into a problem. When creating a content type it has to be based on a parent type and the EVENT content type was no where to be seen.

    So I had a poke through the help files and it mentioned that you could hide content types by adding them to the _HIDDEN group. That seemed oddly familiar so I went to an existing calendar, ensured content types were enabled and found the EVENT content type specified for the list

    By drilling down onto the content type I was able to get the parent content type (also called event) and where it showed the group as _HIDDEN

    After that it’s a two second job to put it in your own group

    But that got me thinking

    “It must be hidden for a reason”

    After some quick searches I came up with two other posts

    This one basically details the same steps I’ve outlined here

    Working with SharePoint events lists

    and this one talks about doing by getting in behind the scenes and changing the content type by hand in the ctypeswss.xml file

    Calendar Content Types in SharePoint 2007 – Blog

    Neither of them really go into any detail about if this will cause any problems or if it’s even a supported configuration

    My only thinking is to do with how the calendar interacts with Outlook? and if you start making changes it could break it? Though I’m probably completely guessing on that to be honest

    But I’ve done it and I now have this and everything seems ok so i’m happy for now!

    Though I may need to change the title for the sick day content type 🙂











  • Back from a week off

    Today was my first day back in the office after a week off in the run up to my daughter’s second birthday (where has the time gone!)

    It was a week at home so i was still connected to the goings on in the blog-o-sphere (and i even attended an AMITPRO meeting (Vijay already blogged about Richard Tubb’s move to linux)

    As well as being the week of my daughters birth another milestone passed (come on i couldn’t think of any other way to blog about this….)

    Microsoft finally ended extended support for Visual Basic 6

    I know there has been an effort to keep VB6 alive but it’s final passing was pretty quiet (i only found this article)

    It’s done pretty well to keep going since 1999 to present day and Microsoft have said they’ll continue to support the runtime for the time being. I’m not sure how long that will last past the next version of windows (unofficially windows 7 at the moment?) though

    Anyway back to the day job.

    Our new employee started today so this marks another milestone in the history of the company!

  • April Meeting of AMITPRO – Tuesday 8th

    Just spreading the word a little,

    The next meeting of AMITPRO will be on Tue 8th April at the Arden Hotel ( meeting at 5.00pm for a 5.30pm start. We have Jeff Ravell of Kaseya ( presenting on the Kaseya Managed Services solution so should be interesting.

    If you’ve never been to a user group meeting before but are interested give it a go this month!

  • Remotely disconnecting a Terminal Services Session

    I tried to logon to one of my clients servers this morning and once I’d entered the user name and password I just got a blank screen.

    I tried connecting to the console session and had similar luck. I’ve seen this one or two times before and normally a reboot sorts it out and I put it down to Terminal Services getting itself or confused

    But I didn’t want to restart the server during the day as I’d have all the hassle of getting everyone to stop what they were doing and this particular site has lots of remote users

    You can’t restart the terminal services service so what was I supposed to do?

    I found this blog post,

    Ingo Rammer’s Weblog : Remotely disconnecting a Terminal Services Session

    I used

    QWINSTA /Server: name/IP

    to list the sessions

    Once I’d identified the session I wanted to boot I used

    RWINSTA sessionid /SERVER: name/IP

    To remove the session

    I was then able to log back into the server!