SyntaxHighlighter

Tuesday 28 June 2011

Using Office 365 Web Interface for Contact Sharing

In a recent deployment of Office 365 that I did for a customer, they were particularly interested in the ability to share contacts.


No problem, with an Exchange back-end you are able to share Calendars, Contacts and even whole mailboxes. The real problem in getting it done is the web-interface.

  • User1 has just been upgraded to Outlook 2010, he right-clicks his contacts, selects properties and then on the permissions tab selects the user and then the desired permissions.
  • User2 is a subcontractor and brings his own Macbook into work.  He has to buy his own copy of Outlook 2011 but this only comes bundled with Office 2011 so he chooses not to do it.  Outlook Web Access (owa) should be sufficient for his needs anyway.... shouldn't it?
It turns out that in Office 365 you can very simply view a shared calendar, or you can open another user's mailbox, what you can't do is open anything else very easily, but there is a work-around.  Thanks to Amit Tank for this tip which pointed me in the right direction: http://exchangeshare.wordpress.com/2009/06/15/how-to-open-shared-calendar-in-owa/

So the work-around for displaying shared contacts using owa is to enter the following address into a browser:

https://<server name>/owa/<SMTP address>/?cmd=contents&module=contacts

So you replace <server name> with the Office365 server which can be found in a few ways, I found it by Ctrl-Clicking on the Outlook system-tray icon for the machine running Outlook, and then selecting "Connection Status".  This brings up a box showing the server address.

You also replace the <SMTP address> with the email address of the user whose contacts you are trying to view.

Thursday 23 June 2011

Troubleshooting Internet issues

A lot of Small businesses that we work with have regular Internet problems, which is often why they call The PC Support Group.  Either their previous one-man-band did not solve the problem or they couldn't get a fast response from them to solve the problem.

The PC Support Group have a team of experts waiting to solve problems just like this.  But suppose you want to solve the problem yourself, where do you start?
  1. Do you have a network connection? 
    • Press Windows-R then type cmd
    • type ipconfig
    • Look through the list for "Default Gateway" - note the value (e.g. 192.168.1.1)  
    • If there is no value or if your IPv4 address begins 169.x.x.x then you are not properly connected to the network.
  2. Can you reach the Internet gateway?
    • Press Windows-R then type cmd
    • type ping -t defaultgateway (defaultgateway is the value noted above e.g. 192.168.1.1)
    • A good result is: Reply from 192.168.1.1: bytes=32 time<1ms TTL=64
    • If you get any other result then you cannot contact the router.  Sometimes rebooting the broadband router, or rebooting the computer can solve this.
  3. If you can reach the Internet gateway but cannot get to the Internet then the problem could be the Internet service, or the Domain Naming service (DNS).
    • Press Windows-R then type cmd 
    • type ping -t 8.8.8.8
    • A good result is: Reply from 8.8.8.8: bytes=32 time=32ms TTL=64
    • The time is not so important but it should be less than 100ms and if you watch it for about 30 seconds you shouldn't see any "no replies".  No replies, or times of greater than 100ms mean you have a poor Internet connection.
    • Connect to the broadband router through a cable instead of by wireless to confirm it is not a WiFi problem and see if the previous results improve.
    • If the results look good but the Internet will still not work reliably then it could be a DNS problem
  4. You can diagnose a DNS problem by pinging an IP address without problem, but being unable to ping a domain name.
    • Press Windows-R then type cmd
    • type ping -t www.google.com
    • A good result is: Pinging www.l.google.com [173.194.66.104] with 32 bytes of data:
      Reply from 173.194.66.104: bytes=32 time=43ms TTL=46
    • Any other result indicates a DNS problem
    • Change the DNS server you use by typing:
    • netsh interface ip set dns "Local Area Connection" static 8.8.8.8
    • The above will change the DNS server on the wired connection and set it to google's public DNS server.

The above steps are just some general tests to perform for troubleshooting your internet connection.  This may not resolve your problem and there may be slight differences in your set up which require slight changes.  For help with any of the above please contact us at The PC Support Group or on +44 (0) 845 2233116
 

Wednesday 22 June 2011

How to Blog source code

In my first blog post earlier today I had to find a way to post some code for a script that I'd written.  I found a few suggestions, some of the popular ones being:

  1. http://alexgorbatchev.com/SyntaxHighlighter/
  2. https://gist.github.com/
  3. http://codeformatter.blogspot.com
After trying option 1, I eventually settled on option 3.  Why?  Because all I want to do is copy and paste a script into a blog without context highlighting.  The other thing I want is for people to be able to copy and paste the code into notepad again.  Option 3, the code formatter, is perfect for this requirement.

Does your computer start-up too slowly?

Does your computer start up too slowly?
This could be down to a number of things but there are a few standard places to check:
  1. Amount of RAM in the computer – is there enough?
  2. Amount of free hard-disk space – is there more than 10% free?
  3. Is the Anti-Virus set to run upon startup – if so disable that option.
  4. Size of the user profile (my documents and desktop) – primarily a problem for domain users.
  5. Number of programmes loading at startup – the fewer the better.


The number of programmes loading at startup can yield a quick fix for older computers, and that’s where I’m focussing in Today’s blog, but I would not recommend jumping straight in and changing it as any changes here are likely to change the way some programmes work.  Once the other options have been ruled out and you (or the user) are aware of the effect, then you can go ahead and make the change.  But how will you make that change?

In Person
If you have sufficient knowledge to make the change and the computer is in front of you then by all means make the changes by running msconfig or the ever useful ccleaner.  Hide any Microsoft items and then usually you can disable most of the other items safely.  It’s probably worthwhile leaving the AntiVirus running though!  Offending items can be present in both “Startup Programs” and “Services”.

Using Remote Control
You could have a qualified IT Professional (such as at The PC Support Group), carry this out for you using their remote control technology.  Remote control technology enables an IT Professional to control your computer over the Internet without being physically present.  You, the user, need to stop whatever you’re doing and give them perhaps 30 minutes to carry out the above.  From the IT Professional’s perspective, this is a fairly common request .  Looking for bottlenecks can be done fairly quickly but then getting a list of startup items and investigating which ones to disable and which ones to leave can be quite time consuming and may inconvenience the user if they’re left waiting while this is done.  That’s where scripts come to the rescue.

KaseyaTM Scripts
KaseyaTM is by no means the only way of automating part of this speed-up but it forms the basis for The PC Support Group managed service, and scripting is just one part of it’s functionality.  When one of our customers says that their computer is starting up slowly then we can draw on this scripting engine to help.  First the usual bottlenecks, as listed above, are checked via the “system audit” function.  Then a list of startup items is retrieved – this allows The PC Support Group to confirm what to disable and what to leave.  We have two scripts to do this:
  • Export services
  • Export startupitems
These scripts are run, then the files retrieved (e.g. C:\exportserviceslist.txt) and reviewed.  Finally the cleanup script is customized to disable the necessary startup items.  The XML should be edited directly in an editor like Notepad++ and the relevant services/programs just copied & pasted over.  This script is then imported back into Kaseya again and scheduled to run on the user’s computer. 
This makes the work totally invisible to the user so that they can continue to work on their computer while we work on it in the background.  More productivity for them and more productivity for us J

NB: The inspiration for the script came from http://www.on-sitetechsupport.com/category/kaseya-scripts/  In the future the script could be modified to make it generic so that it includes all programmes likely to be encountered and skips those not relevant to that computer. The PC Support Group accepts no responsibility for the use of these scripts.

Export Services Script
 <?xml version="1.0" encoding="utf-8"?>  
 <ScriptExport xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns="http://www.kaseya.com/vsa/2008/12/Scripting">  
  <Procedure name="ListServicesExport" treePres="3" id="35789810">  
   <Body description="Export list of services to a file then upload the file to the KServer.">  
    <If description="Export list of services to a file then upload the file to the KServer.">  
     <Condition name="True" />  
     <Then>  
      <Statement name="ExecuteShellCommand" continueOnFail="false">  
       <Parameter xsi:type="StringParameter" name="Command" value="sc query &gt;&gt; c:\ServicesList.txt" />  
       <Parameter xsi:type="EnumParameter" name="ExecuteAccount" value="User" />  
       <Parameter xsi:type="BooleanParameter" name="Is64Bit" value="False" />  
      </Statement>  
      <Statement name="GetFile" continueOnFail="false">  
       <Parameter xsi:type="StringParameter" name="RemoteFileName" value="c:\ServicesList.txt" />  
       <Parameter xsi:type="StringParameter" name="KServerFileName" value="ServicesList.txt" />  
       <Parameter xsi:type="EnumParameter" name="Action" value="OverwriteSendAlert" />  
      </Statement>  
     </Then>  
    </If>  
   </Body>  
  </Procedure>  
 </ScriptExport>  

Export Startup Items Script
 <?xml version="1.0" encoding="utf-8"?>  
 <ScriptExport xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns="http://www.kaseya.com/vsa/2008/12/Scripting">  
  <Procedure name="ListStartupAppsExport" treePres="3" id="71790046">  
   <Body description="Exports the registry keys relating to Startup tasks and then Uploads the file using &amp;#34;Get File&amp;#34;&#xD;&#xA;See Scripts --&gt; Get File --&gt; Machine, in order to retrieve uploaded file.">  
    <If description="Exports the registry keys relating to Startup tasks and then Uploads the file using &amp;#34;Get File&amp;#34;&#xD;&#xA;See Scripts --&gt; Get File --&gt; Machine, in order to retrieve uploaded file.">  
     <Condition name="True" />  
     <Then>  
      <Statement name="ExecuteShellCommand" continueOnFail="false">  
       <Parameter xsi:type="StringParameter" name="Command" value="regedit /E c:\StartupTaskList.txt &quot;HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run\&quot;" />  
       <Parameter xsi:type="EnumParameter" name="ExecuteAccount" value="User" />  
       <Parameter xsi:type="BooleanParameter" name="Is64Bit" value="False" />  
      </Statement>  
      <Statement name="GetFile" continueOnFail="false">  
       <Parameter xsi:type="StringParameter" name="RemoteFileName" value="c:\StartupTaskList.txt" />  
       <Parameter xsi:type="StringParameter" name="KServerFileName" value="StartupTaskList.txt" />  
       <Parameter xsi:type="EnumParameter" name="Action" value="OverwriteSendAlert" />  
      </Statement>  
     </Then>  
    </If>  
   </Body>  
  </Procedure>  
 </ScriptExport>  

Remove Startup Items Script
 <?xml version="1.0" encoding="utf-8"?>  
 <ScriptExport xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns="http://www.kaseya.com/vsa/2008/12/Scripting">  
  <Procedure name="removeStartupTasks" treePres="3" id="1505946189">  
   <Body description="Removes applications from the Registry RUN key. Removes services not required on startup.">  
    <If description="Removes applications from the Registry RUN key. Removes services not required on startup.">  
     <Condition name="True" />  
     <Then>  
      <Statement description="" name="DeleteRegistryValue" continueOnFail="true">  
       <Parameter xsi:type="StringParameter" name="Path" value="HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run\ISUSPM Startup" />  
      </Statement>  
      <Statement description="" name="DeleteRegistryValue" continueOnFail="true">  
       <Parameter xsi:type="StringParameter" name="Path" value="HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run\ISUSScheduler" />  
      </Statement>  
      <Statement description="" name="DeleteRegistryValue" continueOnFail="true">  
       <Parameter xsi:type="StringParameter" name="Path" value="HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run\MSKDetectorExe" />  
      </Statement>  
      <Statement description="" name="DeleteRegistryValue" continueOnFail="true">  
       <Parameter xsi:type="StringParameter" name="Path" value="HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run\YBrowser" />  
      </Statement>  
      <Statement description="" name="DeleteRegistryValue" continueOnFail="true">  
       <Parameter xsi:type="StringParameter" name="Path" value="HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run\Adobe Photo Downloader" />  
      </Statement>  
      <Statement description="" name="DeleteRegistryValue" continueOnFail="true">  
       <Parameter xsi:type="StringParameter" name="Path" value="HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run\LogMeIn GUI" />  
      </Statement>  
      <Statement description="" name="DeleteRegistryValue" continueOnFail="true">  
       <Parameter xsi:type="StringParameter" name="Path" value="HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run\iTunesHelper" />  
      </Statement>  
      <Statement description="" name="DeleteRegistryValue" continueOnFail="true">  
       <Parameter xsi:type="StringParameter" name="Path" value="HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run\SunJavaUpdateSched" />  
      </Statement>  
      <Statement description="" name="DeleteRegistryValue" continueOnFail="true">  
       <Parameter xsi:type="StringParameter" name="Path" value="HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run\Adobe Reader Speed Launcher" />  
      </Statement>  
      <Statement description="" name="DeleteRegistryValue" continueOnFail="true">  
       <Parameter xsi:type="StringParameter" name="Path" value="HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run\Adobe ARM" />  
      </Statement>  
      <Statement description="" name="ExecuteShellCommand" continueOnFail="true">  
       <Parameter xsi:type="StringParameter" name="Command" value="sc stop JavaQuickStarterService &amp;&amp; sc config JavaQuickStarterService start= demand &gt;&gt;&gt;&gt; c:\scriptlog.txt" />  
       <Parameter xsi:type="EnumParameter" name="ExecuteAccount" value="User" />  
       <Parameter xsi:type="BooleanParameter" name="Is64Bit" value="False" />  
      </Statement>  
      <Statement description="" name="ExecuteShellCommand" continueOnFail="true">  
       <Parameter xsi:type="StringParameter" name="Command" value="sc stop OrangeMobileBroadband_Service &amp;&amp; sc config OrangeMobileBroadband_Service start= demand &gt;&gt;&gt;&gt; c:\scriptlog.txt" />  
       <Parameter xsi:type="EnumParameter" name="ExecuteAccount" value="User" />  
       <Parameter xsi:type="BooleanParameter" name="Is64Bit" value="False" />  
      </Statement>  
      <Statement description="" name="ExecuteShellCommand" continueOnFail="true">  
       <Parameter xsi:type="StringParameter" name="Command" value="sc stop WTGService &amp;&amp; sc config WTGService start= demand &gt;&gt;&gt;&gt; c:\scriptlog.txt" />  
       <Parameter xsi:type="EnumParameter" name="ExecuteAccount" value="User" />  
       <Parameter xsi:type="BooleanParameter" name="Is64Bit" value="False" />  
      </Statement>  
      <Statement description="" name="GetFile" continueOnFail="false">  
       <Parameter xsi:type="StringParameter" name="RemoteFileName" value="c:\scriptlog.txt" />  
       <Parameter xsi:type="StringParameter" name="KServerFileName" value="scriptlog.txt" />  
       <Parameter xsi:type="EnumParameter" name="Action" value="OverwriteNoAlert" />  
      </Statement>  
     </Then>  
    </If>  
   </Body>  
  </Procedure>  
 </ScriptExport>