Wednesday, May 25, 2016

SQL Query for Device Information

Lovely query for your Device information overview

SET NOCOUNT ON;

-- Declaration

  
--Devices
SELECT 
             COALESCE(Computer_System_DATA.Name0, '') AS DeviceName,
COALESCE(v_gS_operating_system.Caption0, '') + ' ' + COALESCE(v_gS_operating_system.CSDVersion0, '') + ' ' + COALESCE(v_gS_operating_system.Version0, '') AS OperatingSystem,
CASE
when v_gS_operating_system.Caption0 like '%server%' then 'Server'
  when System_Enclosure_data.ChassisTypes0 = 1 then 'Other'
when System_Enclosure_data.ChassisTypes0 = 2 then 'Unknown'
when System_Enclosure_data.ChassisTypes0 = 3 then 'Desktop'
when System_Enclosure_data.ChassisTypes0 = 4 then 'Desktop'
when System_Enclosure_data.ChassisTypes0 = 5 then 'Desktop'
when System_Enclosure_data.ChassisTypes0 = 6 then 'Desktop'
when System_Enclosure_data.ChassisTypes0 = 7 then 'Desktop'
when System_Enclosure_data.ChassisTypes0 = 8 then 'Desktop'
when System_Enclosure_data.ChassisTypes0 = 9 then 'Laptop'
when System_Enclosure_data.ChassisTypes0 = 10 then 'Laptop'
when System_Enclosure_data.ChassisTypes0 = 11 then 'Hand Held'
when System_Enclosure_data.ChassisTypes0 = 12 then 'Docking Station'
when System_Enclosure_data.ChassisTypes0 = 13 then 'All in One'
when System_Enclosure_data.ChassisTypes0 = 14 then 'Sub Notebook'
when System_Enclosure_data.ChassisTypes0 = 15 then 'Space-Saving'
when System_Enclosure_data.ChassisTypes0 = 16 then 'Lunch Box'
when System_Enclosure_data.ChassisTypes0 = 17 then 'Main System Chassis'
when System_Enclosure_data.ChassisTypes0 = 18 then 'Expansion Chassis'
when System_Enclosure_data.ChassisTypes0 = 19 then 'SubChassis'
when System_Enclosure_data.ChassisTypes0 = 20 then 'Bus Expansion Chassis'
when System_Enclosure_data.ChassisTypes0 = 21 then 'Peripheral Chassis'
when System_Enclosure_data.ChassisTypes0 = 22 then 'Storage Chassis'
when System_Enclosure_data.ChassisTypes0 = 23 then 'Rack Mount Chassis'
when System_Enclosure_data.ChassisTypes0 = 24 then 'Sealed-Case PC'
end as 
  DeviceType,
'' as ServicePack,
coalesce(Network_DATA.IPAddress0,'') as IPAddress,
  case
when System_Enclosure_DATA.SerialNumber0 like 'VMware%' then 'Virtual'
when Computer_System_DATA.Model0 like 'VMWare%' then 'Virtual'
when Computer_System_DATA.Manufacturer0 like 'VMWare%' then 'Virtual'
when System_Enclosure_DATA.SerialNumber0 is not null then 'Physical'
when Computer_System_DATA.Manufacturer0 is not null then 'Physical'
when System_Enclosure_DATA.Model0 is not null then 'Physical'
else null
 end as PhysicalOrVirtual,
             COALESCE(Computer_System_DATA.Manufacturer0, '') AS Make,
             COALESCE(Computer_System_DATA.Model0, '') AS Model,
             COALESCE(System_Enclosure_DATA.SerialNumber0, '') AS serial_number,
COALESCE(LTRIM(Processor_DATA.Name0), 'Unknown') AS CPUName,
             COALESCE(cpus.cpu_count, '') AS NumberPhysicalCPUs,
sum(cpus.corecounts) as NumberLogicalCPUs,
             COALESCE(PC_Memory_DATA.TotalPhysicalMemory0 / 1024, '') AS RAMinBytes,
RS.User_Name0 as LastLoggedOnUser,
WS.LastHWScan as LastSeenDate,
null as Environment,
null as PhysicalHost
FROM         v_gs_Computer_System Computer_System_DATA
LEFT JOIN    v_GS_NETWORK_ADAPTER_CONFIGUR Network_DATA
                 ON (Computer_System_DATA.Resourceid = Network_DATA.Resourceid AND Network_DATA.Index0 = 1)

LEFT JOIN    v_gS_operating_system 
                 ON (Computer_System_DATA.Resourceid = v_gS_operating_system.Resourceid
                     AND v_gS_operating_system.BootDevice0 like '\Device\HarddiskVolume%')
LEFT JOIN    v_gs_Processor Processor_DATA
                 ON (Computer_System_DATA.Resourceid = Processor_DATA.Resourceid AND Processor_DATA.DeviceID0 = 'CPU0')
LEFT JOIN    v_GS_X86_PC_MEMORY pc_memory_DATA
                 ON (Computer_System_DATA.Resourceid = PC_Memory_DATA.Resourceid)
LEFT JOIN    v_gs_Disk disk_DATA
                 ON (Computer_System_DATA.Resourceid = Disk_DATA.Resourceid AND Disk_DATA.Index0 = 0)
LEFT JOIN    v_gs_Video_Controller Video_Controller_DATA
                 ON (Computer_System_DATA.Resourceid = Video_Controller_DATA.Resourceid
                     AND Video_Controller_DATA.DeviceID0 = 'VideoController1')
LEFT JOIN    v_gs_PC_BIOS PC_BIOS_DATA
                 ON (Computer_System_DATA.Resourceid = PC_BIOS_DATA.Resourceid)
LEFT JOIN    (
                 SELECT ResourceID,
                        COUNT(*) AS cpu_count,
sum(numberofCores0) as corecounts
                 FROM v_gs_Processor
                 GROUP BY resourceID
             ) cpus ON (Computer_System_DATA.Resourceid = cpus.Resourceid)
LEFT JOIN    v_gs_System_Enclosure System_Enclosure_data
                 ON (Computer_System_DATA.Resourceid = System_Enclosure_DATA.Resourceid AND System_Enclosure_DATA.GroupID = 1)
LEFT JOIN    v_R_System_valid RS
                 ON (Computer_System_DATA.Resourceid = RS.ResourceID)
LEFT JOIN    v_GS_WORKSTATION_STATUS WS
                 ON (RS.ResourceID = WS.ResourceID)
GROUP BY     Computer_System_DATA.Resourceid,
             COALESCE(Computer_System_DATA.Name0, ''),
             Computer_System_DATA.UserName0,
             Network_DATA.IPAddress0,
             v_gS_operating_system.InstallDate0,
             Processor_DATA.Name0,
             Processor_DATA.NormSpeed0,
             PC_Memory_DATA.TotalPhysicalMemory0,
             Disk_DATA.Size0,
             Video_Controller_DATA.Description0,
             PC_BIOS_DATA.Description0,
             System_Enclosure_DATA.ChassisTypes0,
            v_gS_operating_system.Caption0,
v_gS_operating_system.organization0,
             v_gS_operating_system.CSDVersion0,
             v_gS_operating_system.Version0,
             cpus.cpu_count,
             System_Enclosure_DATA.SMBIOSAssetTag0,
             Processor_DATA.DeviceID0,
             Computer_System_DATA.Manufacturer0,
             Computer_System_DATA.Model0,
             System_Enclosure_DATA.SerialNumber0,
             PC_BIOS_DATA.SerialNumber0,
             WS.LastHWScan,
System_Enclosure_DATA.Model0,
RS.User_Name0

Wednesday, May 04, 2016

Useful SQL Reports

Last Logon (since xxtime):

SELECT 
       [Netbios_Name0] AS 'Computer Name'
 ,[Full_Domain_Name0] AS 'Domain'
 ,[Last_Logon_Timestamp0] AS 'Last Logon'
 ,[Distinguished_Name0] AS 'Distinguished Name'
      ,[User_Domain0] AS 'User Logon Domain'
      ,[User_Name0] AS 'User Name'
      ,[Operating_System_Name_and0] AS 'OS'
  
  FROM [CM_I01].[dbo].[v_R_System] 

  WHERE convert(varchar(10),Last_Logon_Timestamp0,121)>='2016-01-01' AND Client0 = '1'

SQL Reports: Microsoft Office Suites

The difficulty in creating a report from the out-of-box reports in ConfigMgr is the wonderful array of product names that Microsoft uses. That is, one size doesn't fit all. You can't just use LIKE 'Microsoft Office%':

  • Microsoft Office 97 Professional Edition
  • Microsoft Office 365 ProPlus - en-us
  • Microsoft Office 365 ProPlus - ko-kr
  • Microsoft Office OSM MUI (English) 2013
  • Microsoft Office OSM UX MUI (English) 2013
  • Microsoft Office Shared Setup Metadata MUI (English) 2013
  • Microsoft Office Shared 64-bit Setup Metadata MUI (English) 2013
  • Microsoft Office 64-bit Components 2013
  • Microsoft Office Shared 64-bit MUI (English) 2013
  • Microsoft Office Home and Business 2010
  • Microsoft Office Professional Edition 2003
  • Microsoft Office Professional Edição 2003
In a word: Urgh! So how do we report on count of all the version installed? Firstly, you should get a report of all the versions that your estate has installed. Run a query against your CM DB and export to a file:
SELECT [ResourceID]
      ,[GroupID]
      ,[TimeStamp]
      ,[ARPDisplayName0]
      ,[InstallDate0]
      ,[InstallDirectoryValidation0]
      ,[InstalledLocation0]
      ,[InstallSource0]
      ,[InstallType0]
      ,[Language0]
      ,[LocalPackage0]
      ,[MPC0]
      ,[OsComponent0]
      ,[PackageCode0]
      ,[ProductID0]
      ,[ProductName0]
      ,[ProductVersion0]
      ,[Publisher0]
      ,[RegisteredUser0]
      ,[ServicePack0]
      ,[SoftwareCode0]
      ,[UninstallString0]
      ,[UpgradeCode0]
      ,[VersionMajor0]
      ,[VersionMinor0]
  FROM [CM_I01].[dbo].[v_GS_INSTALLED_SOFTWARE] WHERE ARPDisplayName0 like 'Microsoft Office%'



Now you need to prune out all the individual product names (Excel, Powerpoint, Outlook), Proofing, Shared Components etc). This I did exporting the query to Excel and applying a filter. Took about 7 minutes. This will leave you with the Product list for the Office suites themselves:

Microsoft Office 97 Professional Edition
Microsoft Office 365 ProPlus - en-us
Microsoft Office 365 ProPlus - ko-kr
Microsoft Office Home and Business 2010
Microsoft Office 365 ProPlus - de-de
Microsoft Office Professional Edition 2003
Microsoft Office Professional Edição 2003
Microsoft Office Standard Edition 2003
Microsoft Office Enterprise 2007
Microsoft Office Professional Plus 2007
Microsoft Office Professional Plus 2010
Microsoft Office Standard 2010
Microsoft Office Home and Student 2010
Microsoft Office Click-to-Run 2010
Microsoft Office Starter 2010 - English
Microsoft Office Professional Plus 2013
Microsoft Office Standard 2013
Microsoft Office Professional Plus 2016
Microsoft Office XP Professional
Microsoft Office 2000 SR-1 Professional

Now you can get to the good stuff. The SQL report. In my report I want to know all the suites installed and reported on from the start of 2016, grouped by count and sorted by descending value. I won't go through how to create a report and how to pretty is up, but here's the query. You should paste in your own results for the suites you're looking for: 


Select ARPDisplayName0 AS "Office Product Suite", count (*) AS "Count" FROM (

SELECT  

       [ResourceID]

      ,[GroupID]

      ,[TimeStamp]

      ,[ARPDisplayName0]

       ,[InstallDate0]

      ,[InstallDirectoryValidation0]

      ,[InstalledLocation0]

      ,[InstallSource0]
      ,[InstallType0]
      ,[Language0]
      ,[LocalPackage0]
      ,[MPC0]
      ,[OsComponent0]
      ,[PackageCode0]
      ,[ProductID0]
      ,[ProductName0]
      ,[ProductVersion0]
      ,[Publisher0]
      ,[RegisteredUser0]
      ,[ServicePack0]
      ,[SoftwareCode0]
      ,[UninstallString0]
      ,[UpgradeCode0]
      ,[VersionMajor0]
      ,[VersionMinor0]
  FROM [CM_I01].[dbo].[v_GS_INSTALLED_SOFTWARE]
  WHERE convert(varchar(10),timestamp,121)>='2016-01-01' AND ARPDisplayName0 IN (
  'Microsoft Office 97, Professional Edition',
  'Microsoft Office 365 ProPlus - en-us',
  'Microsoft Office 365 ProPlus - ko-kr',
  'Microsoft Office Home and Business 2010',
  'Microsoft Office 365 ProPlus - de-de',
  'Microsoft Office Professional Edition 2003',
  'Microsoft Office Professional Edição 2003',
  'Microsoft Office Standard Edition 2003',
  'Microsoft Office Enterprise 2007',
  'Microsoft Office Professional Plus 2007',
  'Microsoft Office Professional Plus 2010',
  'Microsoft Office Standard 2010',
  'Microsoft Office Home and Student 2010',
  'Microsoft Office Click-to-Run 2010',
  'Microsoft Office Starter 2010 - English',
  'Microsoft Office Professional Plus 2013',
  'Microsoft Office Standard 2013',
  'Microsoft Office Professional Plus 2016',
  'Microsoft Office XP Professional',
  'Microsoft Office 2000 SR-1 Professional')) a

group by ARPDisplayName0
order by count (*) DESC


Management are very happy bunnies, and your SQL-Fu has improved by +2

Tuesday, April 19, 2016

Software File Versions.

So a request came in from a business team to find out who isn't on the correct version and/or patch level of SAPGui. 

I had quite a few attempts at using Asset Intelligence but Hardware Inventory wasn't giving me the right info. Instead, I turned to Software Inventory. Software Inventorying is notoriously slow/intensive and isn't really recommended save for specific reasons (e.g. see Sherry Kissinger's posts and blog) but it's enabled weekly for .exes only so it was already gathering the right stuff for me.

Props go Sherry Kissinger for her help with my TechNet post. She very kindly and gentl pointed out "You're doing it wrong"

First, I needed to know how many versions of SAPGui.exe were out there, so a SQL query could do this:

Select sf.filename, sf.fileversion, sf.filepath, count(*)
from v_gs_softwarefile sf
where sf.filename = 'sapgui.exe'
group by sf.filename, sf.fileversion, sf.filepath


Returned:


Copying those results out and into Excel, removing duplicates and separating into general versions gave me all versions out there:


I am only concerned with the Program Files path exes, so I can now create my Collections with Queries:

  • All Computers with Sagui.exe installed
  • All Computers with the supported version 7300.3.15.8950 of Sapgui.exe installed
  • All Computers with version 7300 that aren't on the supported 7300.3.15.8950 installed
  • All Computers with version 7400 installed (naughty!)
  • All Computers with version 7200 installed
  • All Computers with version 7100

(The reason for the 7200 and 7100 Collections is that they require a different Application in order to upgrade)

All Computers with Sagui.exe installed
select SMS_R_System.ResourceId, SMS_R_System.ResourceType, SMS_R_System.Name, SMS_R_System.SMSUniqueIdentifier, SMS_R_System.ResourceDomainORWorkgroup, SMS_R_System.Client from  SMS_R_System inner join SMS_G_System_SoftwareFile on SMS_G_System_SoftwareFile.ResourceID = SMS_R_System.ResourceId where SMS_G_System_SoftwareFile.FileName = "sapgui.exe" and (SMS_G_System_SoftwareFile.FilePath = "C:\\Program Files (x86)\\SAP\\FrontEnd\\SAPgui\\" or SMS_G_System_SoftwareFile.FilePath = "C:\\Program Files\\SAP\\FrontEnd\\SAPgui\\")


All Computers with the supported version 7300.3.15.8950 of Sapgui.exe installed

select SMS_R_System.ResourceId, SMS_R_System.ResourceType, SMS_R_System.Name, SMS_R_System.SMSUniqueIdentifier, SMS_R_System.ResourceDomainORWorkgroup, SMS_R_System.Client from  SMS_R_System inner join SMS_G_System_SoftwareFile on SMS_G_System_SoftwareFile.ResourceID = SMS_R_System.ResourceId where SMS_G_System_SoftwareFile.FileName = "sapgui.exe" and (SMS_G_System_SoftwareFile.FilePath = "C:\\Program Files (x86)\\SAP\\FrontEnd\\SAPgui\\" or SMS_G_System_SoftwareFile.FilePath = "C:\\Program Files\\SAP\\FrontEnd\\SAPgui\\") and SMS_G_System_SoftwareFile.FileVersion = "7300.3.15.8950"

All Computers with version 7300 that aren't on the supported 7300.3.15.8950 installed
Query 7300.1.0.8948
select SMS_R_System.ResourceId, SMS_R_System.ResourceType, SMS_R_System.Name, SMS_R_System.SMSUniqueIdentifier, SMS_R_System.ResourceDomainORWorkgroup, SMS_R_System.Client from  SMS_R_System inner join SMS_G_System_SoftwareFile on SMS_G_System_SoftwareFile.ResourceID = SMS_R_System.ResourceId where SMS_G_System_SoftwareFile.FileName = "sapgui.exe" and (SMS_G_System_SoftwareFile.FilePath = "C:\\Program Files (x86)\\SAP\\FrontEnd\\SAPgui\\" or SMS_G_System_SoftwareFile.FilePath = "C:\\Program Files\\SAP\\FrontEnd\\SAPgui\\") and SMS_G_System_SoftwareFile.FileVersion = "7300.1.0.8948"

Query 7300.3.7.8950
select SMS_R_System.ResourceId, SMS_R_System.ResourceType, SMS_R_System.Name, SMS_R_System.SMSUniqueIdentifier, SMS_R_System.ResourceDomainORWorkgroup, SMS_R_System.Client from  SMS_R_System inner join SMS_G_System_SoftwareFile on SMS_G_System_SoftwareFile.ResourceID = SMS_R_System.ResourceId where SMS_G_System_SoftwareFile.FileName = "sapgui.exe" and (SMS_G_System_SoftwareFile.FilePath = "C:\\Program Files (x86)\\SAP\\FrontEnd\\SAPgui\\" or SMS_G_System_SoftwareFile.FilePath = "C:\\Program Files\\SAP\\FrontEnd\\SAPgui\\") and SMS_G_System_SoftwareFile.FileVersion = "7300.3.7.8950"

And repeat changing the SMS_G_System_SoftwareFile.FileVersion for each Query and for each Collection.


Now I can include (or re-use) the relevant Collection(s) in my Software Deployment Collections, and my Business team will be happy bunnies.

Lessons learnt:
  1. Don't use Like!
  2. Use SQL to help get your query right
  3. Know what you are going to use the Collections for in the end

Friday, January 22, 2016

Amended SQL Report for 'Count operating systems and service packs' including architecture

Requirement was for OS versions/sp count but with added x86 or x64. 

Taking Sherri Kissinger's findings and adding a join for addresswidth

oh, and if running as query to test then replace (@UserSIDs) with ('Disabled') 

SELECT OPSYS.Caption0 as C054, OPSYS.CSDVersion0,addresswidth0 as [x64/x86], COUNT(*) AS 'Count'  
FROM fn_rbac_GS_OPERATING_SYSTEM(@UserSIDs)  OPSYS  
inner join fn_rbac_R_System(@UserSIDs)  sys on OPSYS.ResourceID=sys.ResourceID join [v_GS_PROCESSOR] c on sys.ResourceID=c.ResourceID
GROUP BY OPSYS.Caption0, OPSYS.CSDVersion0,addresswidth0  
ORDER BY OPSYS.Caption0, OPSYS.CSDVersion0


Tuesday, August 25, 2015

Launch the Config Manager Toast with a message of your own.

Launch a Command Prompt:

cd c:\windows\ccm

SCToastNotification.exe "Title" "Message"



Monday, March 09, 2015

Two issues fixed by the same Hotfix:


  • High CPU utilisation after installing the CM12R2 client
  • Applications not appearing in Software Center despite meeting all requirements and not already being detected.

More on this.
WMI.
https://social.technet.microsoft.com/Forums/en-US/187c682a-f686-4885-aea0-436200e61eef/sccm-2012-agent-and-high-cpu-utilization?forum=configmanagergeneral
- Collection called Catalog1 uses a Query for OU memberships and returns all matching devices
- App-model applications are deployed as Available with requisite Detection methods to device Collections for that App i.e. App1 to Coll1, App2 to Coll2 etc.
- An Include query on each Collx of Catalog1 (meaning those devices also appear in Collx)
- Catalog1 is set to Incremental Update and Collx are set to update every hour (we are in test currently)
So what happens is a machine with the client does not always show the 20-something applications in SC despite being in each collx. More stangely, sometimes only a couple of applications are listed despite meeting the apparent requirements (and not already being detected). 

Wednesday, November 05, 2014

SCCM 2012 Subnet Boundaries. IDs and Subnet Masks: Thank YOU, Jason Sandys.

Recently, in my new SCCM 2012 environment a couple of W7 laptops started to display a worrying issue. The Config Manager client was not showing all the tabs, nor were there enough Policies and all the Components were listed as Installed but the necessary ones weren't enabled.






Every search on Google came back with Boundary (and Boundary Group) issues yet my logs (ClientLocation and and LocationServices) seemed to be saying all was well. Clearly something was wrong. It was late, I was stressed and worried. Then after many 'wrong links' I finally landed on the Oracle's page. He that shall be known as Jason Sandys. In one of his posts he talks about the Evil of Subnet IDs. In short the issues described in the post are exactly the issues I am facing: VLSM and thus overlapping boundaries.

So, without further ado, head on over to this post and drink your fill.

If you are suffering from strangeness with the client and resetting, re-installing or other fixes aren't working then you may well be in the same boat.

http://blog.configmgrftw.com/ip-subnet-boundaries-are-evil/

Monday, June 30, 2014

OSD to VirtualBox using SCCM 2012 SP1 R2

Recently, when trying to test my Task Sequence I received this error once WinPE had completed it's initial pass:


The issue can be easily resolved by running the following command:

VBoxManage setextradata [vmname] VBoxInternal/CPUM/CMPXCHG16B 1

You can get your VM names by typing VBoxManage list vms


Wednesday, June 25, 2014

Beware Cut and Paste - 0x800700a1 during Task Sequence WMI Query

Before I go on, this was ALL my own fault. There said it. Honesty being the best policy and all that. I say this because I must confess; confess because I feel like a numpty.

So, what happened..?

I was putting together a Task Sequence to deploy Win 7 x64 SP1 to my Oracle VirtualBox test machine. I do this because it's quicker than walking over to the build desk, unboxing a Dell and plugging it all in. It's all of 5 metres #lazysysadmin. But anyway, serves my lazy backside right. 

Where was I? Oh, yes. Task Sequence:

1) Boot into WinPE
2) Query WMI for Model 'VirtualBox' and if True, then Partition and Format Disk 
3) Proceed with Task Sequen.. oh, wait ...fail step 2 with 0x800700a1(The task sequence execution engine failed evaluating the condition for an action)

I went through my step 2 Task Sequence. It was correct, damned you! I swear. I checked it over. Look!



Even when I ran a wbemtest query from within WinPE, it returned the correct value. Look! See?


And I even checked SMSTS.LOG. Look! See? SEE?!


 Oh. 




Yours truly had copy-pasted from my notes and instead of straight speech marks (" ") I had put some sixty-six speech marks (“ “) in my WMI query. 

What a numpty.

Monday, June 23, 2014

Kernel Mode Drive Framework / Dell's SCCM driver CABs

In a bid to slipstream the 160-odd updates into my existing Config Manager WIM files since Windows 7 x64 SP1 was released, I followed these instructions:


However, upon doing this I <ahem> "broke*" my deployments. I would get a whole load of Task Sequence errors, with one in particular pointing me to a boot-critical driver installation issue. So, I hopped over to Dell's Config Manager site and duly downloaded the A04 Client Driver Pack for the system in question (OptiPlex 9020). However, upon applying this driver, I further <ahem> "broke" my deployments. 

After a bit of research I found the following. Apparently, the Kernel Mode Driver Framework has been upgraded to 1.11 and you need to integrate this into the WIM image file before you can proceed with your Apply Driver Task Sequence step. 

Without further ado, here's the post!




*broke is a rather strong word. I prefer 'Temporarily disabled'

Config Manager 2007: Dell XPS 8700 - OSD

Recently, I was asked to put a 'quick build' together of a Dell XPS 8700 Desktop PC. For me a quick build is often nothing of the sort, instead taking hours of build, re-build and test with plenty of driver applying thrown in for good measure.

Given the deadline nature of the request (why is it always urgent?) I opted for a capture of a fully Windows-Updated, no other applications, vanilla Windows 7 x64 SP1 machine. This snazzy piece of kit had an mSATA drive, so I wanted to use that as the OS disk. Obv.

The initial capture was simple enough, but when it came to deploying the image I started to see a problem. In short, even though I was formatting the disks (there are two; 256gb mSATA and 3gb SATA) in the Task Sequence I was constantly coming up against an teeth-gnashingly annoying 0x80070032 (or sometimes 0x80004001) error when trying to apply my WIM file.

OSD Homepage gave me the infuriating error:

System partition not set Volume C:\ is not on the boot disk and can not be made bootable. Failed to make volume C:\ bootable. Please ensure that you have set an active partition on the boot disk before installing the operating system. The request is not supported. (Error: 80070032; Source: Windows)

"But my Task Sequence has everything it needs!", I screamed. Just look:




Format the 256gb mSATA SSD as C (0, MBR)


...and mark it as bootable


Format the 3gb SATA HDD (1, GPT)


...and do nothing unusual


Next, apply the WIM file to the next available partition



However, EVERY time I built the desktop...BOOM!


This was infuriating. I tried swapping the disks, removing one, unplugging the card reader module and - even - Googling! And, of course, Mr. G was my friend. Whilst it didn't say exactly what to do, I did stumble upon this nugget and also this one and in particular: 



This got me thinking, perhaps the BIOS settings are interfering with the next available drive and overriding Config Manager's own osddiskpart process.

So, I booted into the BIOS settings and checked the settings under Hard Disk Drivers (not sure if that's a typo...). 

I noticed the 1st Boot Device was set as the 3tb HDD and not the mSATA, so I changed the 1st and the 2nd around, so to make the mSATA disk the primary boot disk. 




And what do you know? Format, partition, boot-activation and WIM file deployed without any problems. 

One thing to note, mSATA formatted as C: but the HDD as I: due to all the ODD and card-reader devices. This doesn't matter since when you apply a WIM file the original captured drives are re-allocated upon first boot after the build.


Monday, July 18, 2011

Ironmen and other related thoughts

The thumping bass-line pumping from the speakers begins to quicken like the huge heartbeat of this neoprene beast I see before me... This was the start of Ironman Nice and I was there to watch it.

I recently had the pleasure of visiting Nice to watch friends take part in an Ironman. Aside from the fact that all of them on the whole were completely insane, it was hugely impressive to witness. Completing a 3.8 km sea-swim, 180 km bike ride and 42.2 km marathon in 31 degree heat does sound ludicrous, but there can be no doubt that those who completed it, in whatever time, did so after conquering some very dark places. I found myself wondering what drove these mad men and women to explore the recesses of their souls and push themselves beyond all imaginable limits. True, many of them set out from the start point not knowing just what kind of journey they had begun but even fewer could have imagined just where they would end up.

Prior to the start I was impressed by the athleticsm on display from the competitors. Almost all of the participants had the honed look of highly trained indivuals; their streamlined wetsuited bodies cutting notable silhouettes against the low morning sun. Months of preparation and training had brought these incredible people to the point of physical excellence and, in less than half an hour, these machines would be embark on the most grueling experience of their lives. As each racer zipped up their wetsuit, donned their hat and goggles the nervous excitement grew. Grins were replaced with grimaces. Banter dried up. Thoughts were collected. The gravity of the moment dawning fully upon everyone; not just competitors either. Friends and family found it difficult to find the right words to offer - now was not the time for vacuous offerings of 'you can do it' or 'give it your best'.

Finally, the race was upon them and en mass they moved to the start. Each member of this creature began to jostle for position, anxious to get a good start and not falter at the first. Suddenly, it was on. The siren sounded and some two thousand people began to enter the sea. You could hear the splashes from several hundred metres away; the air laced with salt as the animal thrashed its way forward, anxious to get into clear water. Arm clocked rythmically over arm, feet churning water white as arduous progress was made. Some sought to race ahead only to be held back by others who had the same idea only a few seconds sooner. Others chose to move laterally, finding clearer water to work through. And those in the middle of this maelstrom? Well, they were pulled along by the surging current, unable to distance themselves from their neighbours. At last all were in the water, the collosal length of this brute now fully apparent. Onwards it pushed, now beginning to thin slightly as it turned passed marker buoys. After the first lap it became easier to make out individuals, particularly those at the front and, sadly, those at the back. It was evident some had found this stage difficult, their arms beating the water with less frequency now, kicks barely breaking the water's surface. However, on they swam, this was no time to stop. As the tsunami of swimmers began their final return, shouts peppered the air as supporters re-found their voices. Slowly but surely men and women emerged from the water, and then disappeared behind crowds as they pressed on to the secoond stage of the race: the bike... 

Saturday, July 09, 2011

ASRock ION 330 HT: XBMC & Infrared Problems

I recently re-installed my XBMCLive ASRock ION 330 HT media centre. Most things were pretty straight-forward such as:


AirPlayer
Samba
Sabnzb
BBC iPlayer (from the Hitcher's repo)


However, the final part (the remote) was really getting to me. I just could not get it working. Luckily, I found a complete walk through, which worked perfectly: http://doityourselfhtpc.com/2010/12/22/asrock-ion-330-ht-remote-and-xbmc-live/


And that's it. Just don't forget to REBOOT!

Thursday, May 19, 2011

Friday, May 06, 2011

AirPlay on XBMC

Being an XBMC enthusiast I'm always on the look out for useful and interesting XBMC-related news. Here's something that caught my attention: AirPlay on XBMC! Can it be done? Yes, it can!

Pascal Widdershover is one of the men to do just this. of the project can be found here, and a slimline Ubuntu walk-thru here

There are still some improvements and bugs to fix, but it's a start and it looks pretty good!

**UPDATE** Installed this successfully on my XBMC and it works like a charm. Getting closer to Minority Report every day..