VBS to inventory your workstations or servers

Sometimes you just need a clear picture of what is in your environment.

Sometimes you just need to see how much disk space, RAM and CPU capacity a few dozen workstations have available.

Sometimes you walk into an office and you haven’t a clue what’s live, what’s turned off and what is very out of date.

This script fixes all of that. Give it a text file with as many Windows workstations or servers as you like and let it go off and get the version of Windows, the license type, the RAM, CPU, Hard disk capacity, the software and hardware serial number and the Windows installation directory. It saves this into a CSV file that you can then open in Excel to sort and play with as much as you want.

I wrote this to create an inventory of the servers in use here so I could see what version of windows they have, ensure they are using the most recent service pack and ensure they were all using the enterprise skew. I then expanded it to give me more information. Mainly so I can save it somewhere for use on a later date.

On Error Resume Next

Const ForReading = 1
Const ForWriting = 2
Const Forappend = 8
filecomputer = “.\computer.txt” ‘ -> File that contains the computers list
strComputer = “.”
Star = “*”
InventoryOutputFile = “inventory.txt”
logfilename = “.\inventory.log”

Dim hostname,OSType,CSDVersion,WinSerialNumber,Version,Windir,Timewritten,sw,Make,Model,CPU,Drives,TotalMemory,SerialNumber

sw = 0

‘—————————————
‘ Call the routine for log file creation
‘—————————————

createlogfile logfilename

‘————————
‘ Read computer.txt file
‘————————

Set objFSO = CreateObject(“Scripting.FileSystemObject”)
Set objTextFile = objFSO.OpenTextFile(filecomputer,ForReading)
Do While objTextFile.AtEndOfStream <> True
strLinetoParse = objTextFile.ReadLine
First_char = Left(strLinetoParse, 1)
if (First_char <> star) And (First_char <> ” “) then ‘ Bypass the row starting with * and blank char
hostname = Trim(strLinetoParse)

Get_user_info hostname
If WinSerialNumber > 0 then ‘ If the computer exist or is UP
hostname = strLinetoParse

AddLineToOutputFile hostname,OSType,CSDVersion,WinSerialNumber,Version,Windir,TotalMemory,Make,Model,CPU,Drives,SerialNumber,Forappend
WinSerialNumber = 0
Else
msg = “=====> Hostname ” & hostname & ” not found or Down”

writetofile msg,Forappend
End if
End if
Loop
objTextFile.Close

‘————————————————–
‘ Retrieve the information from the remote computer
‘————————————————–

Function Get_user_info(strComputer)
Set objWMIService = GetObject(“winmgmts:\\” & strComputer & “\root\cimv2”)

Set colItems = objWMIService.ExecQuery(“Select * from Win32_OperatingSystem”,,48)
For Each objItem in colItems
OSType = objItem.Caption
CSDVersion = objItem.CSDVersion
WinSerialNumber = objItem.SerialNumber
Version = objItem.Version
Windir = objItem.WindowsDirectory
TotalMemory = Round(Trim(objItem.TotalVisibleMemorySize) / 1024, 2 /1024) /1024
Next

Set colItems = objWMIService.ExecQuery(“SELECT * FROM Win32_Processor”,,48)
For Each objItem in colItems
CPU = Trim(objItem.Name)
Next

Set colItems = objWMIService.ExecQuery(“SELECT * FROM Win32_LogicalDisk WHERE DriveType=3″,,48)
For Each objItem in colItems
Drives = Drives & Trim(objItem.DeviceID) & ” ” & Round(Trim(objItem.Size) / (1024^2), 2) & “;”
Next

Set colItems = objWMIService.ExecQuery(“SELECT * FROM Win32_ComputerSystem”,,48)
For Each objItem in colItems
Make = Trim(objItem.Manufacturer)
Model = Trim(objItem.Model)
Next

Set colItems = objWMIService.ExecQuery(“SELECT * FROM Win32_BIOS”,,48)
For Each objItem in colItems
SerialNumber = Trim(objItem.SerialNumber)
Next
End function

‘————————
‘ Add/Update the records
‘————————

function AddLineToOutputFile(hostname,OSType,CSDVersion,WinSerialNumber,Version,Windir,TotalMemory,Make,Model,CPU,Drives,SerialNumber,forwriting)
‘WScript.Echo hostname
Set objFSO = CreateObject(“Scripting.FileSystemObject”)
Set WriteInventory = objFSO.OpenTextFile(InventoryOutputFile,forwriting, True)
WriteInventory.WriteLine(hostname & “,” & OSType & “,” & CSDVersion & “,” & WinSerialNumber & “,” & Version & “,” & Windir & “,” & TotalMemory & “,” & Make& “,” & Model & “,” & CPU & “,” & Drives & “,” & SerialNumber)
WriteInventory.Close
End function

‘———————
‘ Create the log file
‘———————

function createlogfile(logfilename)
Dim objFileSystem, objOutputFile
Dim strOutputFile
strOutputFile = logfilename
Set objFileSystem = CreateObject(“Scripting.fileSystemObject”)
Set objOutputFile = objFileSystem.CreateTextFile(strOutputFile, TRUE)
objOutputFile.WriteLine(“——————— Inventory Report ” & now() & ” ———————“)
objOutputFile.WriteLine(” “)
objOutputFile.Close
Set objFileSystem = Nothing
End function

‘——————-
‘ Write to log file
‘——————-

function writetofile(msg,forwriting)
Set myFSO = CreateObject(“Scripting.FileSystemObject”)
Set WriteStuff = myFSO.OpenTextFile(logfilename,forwriting, True)
WriteStuff.WriteLine(“—————————————————————————“)
WriteStuff.WriteLine(” “)
WriteStuff.WriteLine(msg)
WriteStuff.WriteLine(” “)
WriteStuff.Close
End function

Yella Hoose

While preparing some music for a wedding I recorded this. I hope you enjoy listening as much as I enjoyed playing it.

[podcast]https://audioboom.com/boos/4583942-yella-hoose.mp3[/podcast]

Listen or Download

Yella Hoose

While preparing some music for a wedding I recorded this. I hope you enjoy listening as much as I enjoyed playing it.

[podcast]https://audioboom.com/posts/4583942-yella-hoose.mp3[/podcast]

Listen or Download

Yella Hoose

While preparing some music for a wedding I recorded this. I hope you enjoy listening as much as I enjoyed playing it.

[podcast]https://audioboom.com/posts/4583942.mp3[/podcast]

Listen or Download

Script to delete Chrome cache on all PC’s listed in a text file

Another problem that could be fixed with a script today. Moving machines and users to a different domain resulted in a problem for some people. Chrome is a very popular browser but a number of people have reported to support that Chrome takes a very long time to start and then open the first page after log in to windows.

It was determined that deleting the cache directory from within the users Chrome application data folder resolved this.

Waiting for every effected user to report the problem wouldn’t be a great course of action of course. It would be a lot better to proactively go after all Chrome installations and remove the cache directory.

So that’s what I’ve done. The script does the following:

  1. Check to see if the computer is on the network by pinging it.
  2. List all the user directories in c:\users on each computer.
  3. Check to see if the Chrome cache directory exists.
  4. Deletes the cache directory.
  5. Logs the result including any encountered errors to a file called results.txt.

I could have searched Active Directory directly of course but I want to be able to easily add and remove computers when needed. It also allows me to run the script on 10 computers to start off and ramp up to a few thousand by the end.

It should go without saying that as the script uses the admin share, you need to have access to the workstations that you intend to administer.

Option Explicit
Const ForReading = 1
Const ForAppending = 8
Dim objFSO : Set objFSO = CreateObject(“Scripting.FileSystemObject”)
Dim objFile : Set objFile = objFSO.OpenTextFile(“Z:\Scripts\Chrome cleanup\AccountingsectionComputers.txt”, ForReading, False)
Dim objWriteFile : Set objWriteFile = objFSO.OpenTextFile(“Z:\Scripts\Chrome cleanup\Result.txt”, ForAppending)

Do Until objFile.AtEndOfStream
Dim strComputer : strComputer = Trim(objFile.ReadLine)
If PingMachine(strComputer) Then
‘Computer is pinging
Dim objFolder : Set objFolder = objFSO.GetFolder(“\\” & strComputer & “\c$\users\”)
Dim strUserParentPath : Set strUserParentPath = objFolder.SubFolders
Dim strUserFolder
For Each strUserFolder in strUserParentPath
Dim strRemoteBasePath : strRemoteBasePath = “\\” & strComputer & “\c$\users\” & strUserFolder.name & “\AppData\Local\Google\Chrome\User Data\Default\Cache”
If objFSO.FolderExists(strRemoteBasePath) Then
On Error Resume Next
objFSO.DeleteFolder strRemoteBasePath, True
If Err.Number = 0 Then
objWriteFile.WriteLine strRemoteBasePath & vbTab & ” DELETE SUCCESSFUL”
Else
objWriteFile.WriteLine strRemoteBasePath & vbTab & ” DELETE FAILED: ” & Err.Number & ” ” & Err.Description
End If
On Error GoTo 0
Else
objWriteFile.WriteLine strRemoteBasePath & vbTab & ” FOLDER DOES NOT EXIST”
End If
Next
Else
objWriteFile.WriteLine strComputer & vbTab & ” PING FAILED”
End If
Loop
objFile.Close

Function PingMachine(device_name)
PingMachine = False
Dim colItems : Set colItems = GetObject(“winmgmts:root\cimv2”).ExecQuery _
(“Select StatusCode from Win32_PingStatus Where Address = ‘” & device_name & “‘”)
Dim objItem
For Each objItem in colItems
If objItem.StatusCode = 0 Then PingMachine = True
Next
End Function

If there are other scripts that you would like to see, please let me know in the comments section.

New Job. New Freedom. New Challenge. New Rewards.

Hey blogger’s, blog reader’s, lurker’s, search engines and spammers. How are you all keeping?

I’m in an absolutely fantastic mood. That’s because I’m in an absolutely fantastic place. Not geographically. I mean psychologically and in life. I parted ways with my previous employer DCSDocs on the 15th of April so just a day over a month ago and since then life has taken a huge turn for the better.

I’m absolutely loving what I’m doing. Getting back into system administration has been like putting on a comfortable pair of shoes after wearing a pair of stilettos that are two sizes too small with a rusty male sticking at an angle into one of your toes. Not that I have experience of wearing stilettos but I’d imagine that as they aren’t the most comfortable footwear for a woman they would be twice as bad for a man. My mother in law has been at me for ten years now about cross dressing but I absolutely refuse. That’s a story for another day.

I’m now working for St. Patricks College Drumcondra in Dublin as the senior system administrator. This is an enormously interesting time to work for St. Patrick’s college as we are nearing the end of a project called incorporation which is a fancy word to describe the merge of St. Patrick’s, Mater dei and DCU. I will be working on the IT infrastructure aspect of this project for the next few months before moving to DCU to continue as a senior system administrator there.

Let me say again that I’m loving this job. I’m there just under a month now but I really enjoy the community spirit among the staff and students in the college. There’s a lot to do in terms of the infrastructure but the previous system administrator had the same high standards as I have so overall I’m very happy with the set up.

I’m also really enjoying the people I’m working with in the IT department. It’s the same kind of friendly working environment that made my time in Fujitsu so enjoyable.

Let’s take a break from all the fully stuff.

I’ll post up a few technical posts in the next few weeks. I have some interesting scripts on the go at the moment so I’ll add them to the blog so people can use them when needed.

See who is logging onto your domain

I was looking a migration from one domain to another a short while ago. Almost all the users accounts had been migrated over but there were a few hanging on.

The migration tool wasn’t doing a great job of picking them up so I wrote a small script and added it to group policy for all servers and workstations. Now when someone logs in to the old domain a line is written to the log with their username, computer name and IP address.

Using this the person responsible for the migration can get through the last few people on the old domain. This has saved a lot of time as before I wrote this th eprocess was very manual.


Const ForAppending = 8
Set WshShell = CreateObject("WScript.Shell")
Set WshNetwork = CreateObject("WScript.Network")
Set objFSO = CreateObject("Scripting.FileSystemObject")
Set objFile = objFSO.OpenTextFile("\\ServerName.DomainName.TLD\RemainingComputer\log.txt", ForAppending)
objFile.WriteLine WshNetwork.ComputerName & "," & WshNetwork.UserName & "," & GetIpAddress
objFile.Close

Function GetIPAddress
strComputer = "."
Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\cimv2")
Set IPConfigSet = objWMIService.ExecQuery _
("Select IPAddress from Win32_NetworkAdapterConfiguration WHERE IPEnabled = 'True'")

For Each IPConfig in IPConfigSet
If Not IsNull(IPConfig.IPAddress) Then
For i = LBound(IPConfig.IPAddress) to UBound(IPConfig.IPAddress)
If Not Instr(IPConfig.IPAddress(i), ":") > 0 Then
strIPAddress = strIPAddress & IPConfig.IPAddress(i) & " "
End If
Next
End If
Next
GetIPAddress = strIPAddress
End Function

VBScript to arrange files into folders.

A few days ago I was presented with just over seven thousand PDF files. I had waited six weeks for these files so I was in a horrid mood when they arrived in one big batch with just ID’s in the file name. I had no way of processing them by customer.

I had a spreadsheet that had the billing period, the customer name and the bil number in columns A, B and C respectively so I decided to write up a short script to process these files.

Here’s a cut down version with a little bit removed to protect the various companies involved.


Set FSO = CreateObject("Scripting.FileSystemObject")
Set objExcel = CreateObject("Excel.Application")
Set objWorkbook = objExcel.Workbooks.Open ("D:\Home\Workarea\Invoices_PDF\invoices.xlsx")

' Starting at row 2 because row 1 is used for the column headings.
intRow = 2
strNewParentPath = "ByETB\"
strOldParentPath = "Combined\"
strBasePath = "D:\Home\Workarea\Invoices_PDF\"
Do Until objExcel.Cells(intRow,1).Value = ""
strPeriod = ConvertPeriod(objExcel.Cells(intRow, 1).Value)
strProcessedCompanyName = ConvertCompanyToDirectoryName(objExcel.Cells(intRow, 2).Value)
strFileName = "billno-" & objExcel.Cells(intRow, 3).Value & ".pdf"
' WScript.Echo "Moving " & strOldParentPath & strFileName & " To " & strNewParentPath & strProcessedCompanyName & "\" & strPeriod & "\"

If NOT (FSO.FolderExists(strBasePath & strNewParentPath & strProcessedCompanyName)) Then
WScript.echo "Folder " & strBasePath & strNewParentPath & strProcessedCompanyName & " didn't exist."
FSO.CreateFolder strBasePath & strNewParentPath & strProcessedCompanyName
End If

If NOT (FSO.FolderExists(strBasePath & strNewParentPath & strProcessedCompanyName & "\" & strPeriod)) Then
WScript.echo "Folder " & strBasePath & strNewParentPath & strProcessedCompanyName & "\" & strPeriod & " didn't exist."
FSO.CreateFolder strBasePath & strNewParentPath & strProcessedCompanyName & "\" & strPeriod
End If

WScript.Echo "Copying from: " & strBasePath & strOldParentPath & strFileName & " Copying to: " & strBasePath & strNewParentPath & strProcessedCompanyName & "\" & strPeriod& "\"
FSO.CopyFile strBasePath & strOldParentPath & strFileName, strBasePath & strNewParentPath & strProcessedCompanyName & "\" & strPeriod& "\"
intRow = intRow + 1
Loop
objExcel.Quit

Function ConvertCompanyToDirectoryName (CompanyName)
if CompanyName = "" Then
WScript.Echo "No ETB Name passed to ConvertCompanyToDirectoryName function"
Exit Function
End If

If InStr(1, CompanyName, "DUBLIN") <> 0 Then
CompanyName = "Dublin"
End If

If InStr(1, CompanyName, "LOUTH") <> 0 Then
CompanyName = "Louth"
End If

If InStr(1, CompanyName, "DONEGAL") <> 0 Then
CompanyName = "Donegal"
End If

If InStr(1, CompanyName, "LIMERICK") <> 0 Then
CompanyName = "Limerick"
End If

If InStr(1, CompanyName, "GALWAY") <> 0 Then
CompanyName = "Galway"
End If

If InStr(1, CompanyName, "CORK") <> 0 Then
CompanyName = "Cork"
End If

If InStr(1, CompanyName, "CARLOW") <> 0 Then
CompanyName = "Carlow"
End If

If InStr(1, CompanyName, "KERRY") <> 0 Then
CompanyName = "Kerry"
End If

If InStr(1, CompanyName, "MEATH") <> 0 Then
CompanyName = "WestMeath"
End If

If InStr(1, CompanyName, "KILDARE") <> 0 Then
CompanyName = "Kildare"
End If

If InStr(1, CompanyName, "TIPPERARY") <> 0 Then
CompanyName = "Tipperary"
End If

If InStr(1, CompanyName, "TIPP") <> 0 Then
CompanyName = "Tipperary"
End If

If InStr(1, CompanyName, "LAOIS") <> 0 Then
CompanyName = "Laois"
End If

If InStr(1, CompanyName, "MONAGHAN") <> 0 Then
CompanyName = "Monaghan"
End If

' Replace spaces with under lines.
If InStr(1, CompanyName, " ") <> 0 Then
CompanyName = Replace(CompanyName, " ", "_")
End If

' Replaces / character with nothing.
If InStr(1, CompanyName, "/") <> 0 Then
CompanyName = Replace(CompanyName, "/", "")
End If

ConvertCompanyToDirectoryName = CompanyName
End Function

Function ConvertPeriod (Period)
If Period = "" Then
WScript.Echo "Period passed to ConvertPeriod function is blank."
Exit Function
end If

If Period = "01/01/2016" Then
Period = "Jan2016"
End If

If Period = "01/02/2016" Then
Period = "Feb2016"
End If

If Period = "01/03/2016" Then
Period = "Mar2016"
End If

If Period = "01/04/2016" Then
Period = "Apr2016"
End If
ConvertPeriod = Period
End Function

Gall bladder removal. The whole story. 

Way back in September I went to bed on a normal night after a particularly difficult day at work. I had been working for at least twenty hours and nothing was going right. As I fell into bed a pain in my torso began to build. Within half an hour the pain was so bad I couldn’t lie still. Half an hour after that I was on my feet pacing around the house trying to regain some composure . I have never felt pain like it and with Judo I’ve had some very painful injuries so that’s saying something! The pain was so bad that I actually called my mother to ask her what I should do. Now, I know what you’re probably thinking. Irish man. Call his mother when things go wrong. You would probably be right however. My mother has a great way of thinking through potential medical problems. It probably comes with raring four children and growing up in a family of 11. Either way, I was desperate so would have done anything to make the pain go away. 
Anyway, a few weeks later, I had another very difficult day and when I went to bed the pain hit again. This night I had such irrational thought’s that I even considered just plunging a knife in to the sore area just to try to stop the pain. I know that wouldn’t have improved things. I know that was an incredibly stupid idea but at the time the only thought going through my mind was that something needed to stop the pain. 

A few more nights like this and I knew that I had to get medical intervention. I spoke to my GP and asked him if it was stress related. He didn’t think so and instead sent me for an ultra sound. A few months later and I got the results.
I was told that I had several stones in my gall bladder and as the gall bladder contracted it was pushing these stones into the neck. I won’t go into the whole thing, but I was told that the only solution was to have the gall bladder removed.  
There are a few disadvantages to this. There’s a potential of digestion problems and generally it can cause you to put on some weight. Both potential problems aren’t too appealing to me so I put off getting anything done about this for about two or three weeks.  
Back in early March I had five days of discomfort. It wasn’t bad in terms of pain but I couldn’t eat, I had absolutely no energy and I generally felt unwell. after the five days I was talked into going to the hospital to get it checked out. The doctors explained that it was the gall bladder causing problems and they offered me what they deemed to be an emergency appointment for the following month to have the gall bladder removed.  
That wouldn’t really suit me as I’m starting a new job in April so taking time off at the start of this wouldn’t present the greatest first impression. I therefore decided to go private. On the 12th of March I arranged an appointment for the 21st of March. When the doctor in the Hermatage saw me he booked me in for the surgery on the 23rd of March.  
That’s the background of this story.  
It’s now a week and a half after the surgery and I’m doing absolutely brilliantly. Let me give you a general idea of how it went. 
Firstly, the day of the surgery was interesting. I was in the Hermatage hospital by 9AM. They gave me a private room within a few minutes of arriving and within the first twenty minutes they had asked me to change into the gown, they had taken a blood sample and they had explained the plan for the day.  
After that I was left alone in the room to get comfortable. Every so often doctors and nurses came in to verify information and check the state of my gall bladder. They needed to ensure that there was no inflamation or other potential problems before beginning the surgery.  
A few hours later two nurses came down to tell me the surgeon was ready. They asked me to lie on the bed to be transported down. I hate that though. I find it very disorientating. Once I can get there on my own, that’s what I’m going to do. So, as they wheeled the bed down, I grabbed onto one side and followed along. They thought I was a bit strange I think as most people would be happy to just take the easy way.  
We got to the operating theatre and again, they asked me the same questions a few times. Name, date of birth, address, procedure and doctors name. Like before, they also checked both identification bands on both my wrists to ensure all the information matched.  
I was finally allowed to go into the theatre. The doors on the way in were very large electronic sliding doors. The floor was very smooth and the air was actually a little cool. From what I could gather, the room was very large with a lot of electronic fans for cooling equipment. There was very little noise within the room other than this quiet hum. I was led over to a very narrow bed that was up at chest height. The sheet on it felt like thick paper. The mattress was minimalist and the frame was thin metal with plenty of electronics below it. Obviously I didn’t have a lot of time to explore the room but instead of being nervous, I found myself very curious about the technology in the room.  
They decreased the height of the bed so I could get onto it. When I lay down I was instructed to shuffle over slightly to my right so I was centered. Once that was done, an anesthetist on my left and his assistant on my right got to work. The man on my left put in the line. This went into my left arm at my elbow. The man on my right strapped a blood pressure monitor to my arm and put an oxygen tester on my index finger. As this was happening, the man on my left asked me to pump my fist a few times. Then the man on my right moved a solid side into position. This enclosed the right side of the bed perfectly so that my right side was securely leaning on it. The man on my left was mean while pumping some kind of drug into my system. This caused me to feel cold and light headed. While this was happening I could hear the static of a large electronic instrument right above me. When all of this was done the person to my right held a mask that smelled of clean plastic over my face. I was becoming groggy so without thinking I put my hand up to feel what I could smell.The person on my left was placing something over my legs and he put my hand back down by my side. I don’t remember a single thing after this until I woke up after the surgery.  
When I woke up I could hear the blood pressure monitor on my right buz to life and soon after I felt the squeeze on my arm. It kind of reminded me of a friend of mine who tightly grabs my forearm when he’s saying hello. At the same time a female voice to my left asked me how I was. In a very cheery voice, I happily responded that I was fantastic. I followed this up by asking her how her day was. Hahahaha. It is funny thinking back on it. I hadn’t yet figured out that I was just waking up and my first answer to her was still in auto pilot. “I’m fantastic! How are you keeping? Are you having a good day?” 
Anyway, nothing interesting happened after that. I was left there in the recovery room under close supervision for about 45 minutes. They then wheeled me back to my room. I had absolutely no problem staying in the bed at that stage! 
I felt incredibly weak for the remainder of the day after the surgery. Even pouring a glass of water seemed too much for me to handle. Fair play to the nurses and doctors though. They couldn’t have been more attentive.
My parents came up that night. I have never been as appreciative to have visitors before! Having people there who can see makes such a difference! I consider myself to be very independent but before the surgery I didn’t feel comfortable enough in the environment to independently explore the room. There were too many people just checking in and asking a lot of questions. After the surgery there was no way I could have explored independently. I wasn’t actually that bad. I was able to get up and walk about three hours after the surgery but I was a bit disorientated so needed a bit more help than normal. When my parents arrived at around 8PM they went over and sat on a couch. I didn’t know there was a couch there. I was just delighted to hear this! Lying in the bed for so many hours was uncomfortable so sitting up right was a nice temporary reprieve. I also didn’t know there was a fridge in the room, there was also another reclining chair and a locker that I could leave stuff in. Even something as simple as plugging in my phone. The sockets were up just above head height. There was no way I would have found them independently at the best of times! Never mind after surgery! 
I told Emma, my wife that she wasn’t to visit. With two kids it wasn’t practical for her to come up. There was no need as I was only in hospital for one night. 
Moving on, the night of the surgery I didn’t sleep much at all. I just couldn’t get comfortable. I also think I had slept too much after the surgery so simply wasn’t tired. I got up and sat on the couch for a few hours listening to podcasts and some training material that I want to study over the next few weeks. I also had a lot more energy so went exploring around that are of the hospital. 
That morning the doctor in charge of the night shift called in at 6AM to check the bandages and all that kind of thing. I was checked again by another doctor at 8AM and just before 9 I was checked a third time by the surgeon. As everything went as well as expected, I was discharged and home just before 11.  
That day came and went. I spent almost all of it in bed either a sleep or just taking it easy listening to podcasts, training material and interesting ted talks on Youtube. Sleeping that day wasn’t particularly comfortable. I spent all of my time on my back.  
Friday, I.E. Day two after the surgery was much better. I couldn’t really stand up straight and getting in and out of chairs was hard but it was really not that bad. I certainly had no problems eating. By later on the previous day I was able to eat normally and this continued. The pain in my stomach where the stitches were healing was annoying but it wasn’t particularly limiting. What was limiting me was the advice given by everyone around me to take it easy.  
Saturday was a continual progression on the previous day. One thing I’ll say though is after this surgery, going for a poo can be really uncomfortable! You’d be surprised at how much you use your stomach muscles when pooing! I went between two stages of very constipated and very ….. Not constipated up to that point. Sorry to be too descriptive but one of the purposes of this blog post is to help someone that is at the start of this process.  
By Saturday night I could comfortably sleep on both sides. On the previous night I could sleep for a short time on each side but it wasn’t comfortable. One tip I would have is to drink Sprite. Yes! Sprite! They pump you full of air when they are removing the gall bladder. I don’t know how or why but sprite helps the air move. A glass or two of sprite and I felt like an entirely new person.  
On Sunday I made a really stupid mistake. Firstly, I showered for the first time since the surgery. I was nervous about this as stepping into the bath on Saturday would have been uncomfortable. However, on sunday it was absolutely fine. It surprised me how much I improved from day to day. After the shower I attended a church service for the commemeration of the 1916 rising. Following this I participated in a march for just over a mile to a local monument. This was very hard work. I still wasn’t standing up straight at this point. It was the walk back that really started to get difficult though. I made it about half way back but I had to call Emma to ask her to collect me. I just ran out of energy. There was no way I could have made it back. Oh. I should explain that I also hadn’t had breakfast that morning. I also didn’t take the anti-inflammatory that had been proscribed either. I really should have know that this wasn’t going to end well.  
I got back to the house, took the tablet, eat some food and felt like myself again.  
Later that day as tradition requires we took the kids to my parents house for the afternoon so they could play with their cousins . This was tiring probably because the morning had been more of a challenge than I would have liked but it was still very enjoyable. Sorry. I should say to people reading this that the Sunday I’m referring to was Easter Sunday.  
Knowing that life needed to return to normal on Tuesday, I spent Monday doing very little. I slept until about 1PM then did nothing else other than enjoy the company of my wife, son and daughter for the remainder of the day.  

By Tuesday I was able to stand up completely straight. I’ve been able to get in and out of the car with absolutely no struggle at all and life really has returned to normal.  
I removed the bandages on Wednesday and I’ve begun lifting things again today 9 days after the surgery.  
People keep warning me to take it easy but I like to think I know my own body. I don’t feel sore other than the occasional twinge. I’m being careful to take things a little slower than normal but I’m not shying away from anything.  
This surgery has been a great success I think. I no longer feel any small pain in the evening under my left lung and just over a week after life is back to normal. a picture of me on the hospital bed giving a thumbs up 

Vegan week challenge podcast

I’ve done it!

Seven days. One week of no meet, dairy or any other product made from animal products.

Thanks to Jenny from Paws for thought for suggesting this.

This challenge fulfilled the objective of looking for thirty challenges for 2016. It’s to force me to try something that I’ve never done before and maybe expand my mind a little bit.

The podcast that summarises this week is here. I@m sorry I didn’t keep blogging every day but I’m out of the habbit of doing this and some nights I’ve just been too tired.

Listen to my Vegan week challenge podcast. Special guest: Emma.

Actually, I wonder if this tiredness has been related to the Vegan challenge. Come 9PM I’ve been falling a sleep. I could be doing some work or relaxing in the living room but when it reaches the end of the day I cant function any more.

Maybe someone could comment to suggest if this is a possible cause?