Tuesday, 16 July 2013
WDS Service Crashes after Boot Image Update and can't start again.
I updated a boot image with new controller and network card drivers and found all WDS services has stopped on PXE points.
One of the events were popular Event ID 258 — Image Server Configuration
The description for Event ID 258 from source WDSIMGSRV cannot be found. Either the component that raises this event is not installed on your local computer or the installation is corrupted. You can install or repair the component on the local computer.
If the event originated on another computer, the display information had to be saved with the event.
The following information was included with the event:
0xC1030104
Another event was 512 with same error information
An error occurred while trying to initialize provider WdsImgSrv from C:\Windows\system32\WdsImgSrv.dll. Since this provider is not marked as critical, Windows Deployment Services server will continue.
Error Information: 0xC1030104
and 1000
Faulting application name: svchost.exe_WDSServer, version: 6.1.7600.16385, time stamp: 0x4a5bc3c1
Faulting module name: wimgapi.dll, version: 6.1.7600.16385, time stamp: 0x4a5be09a
Exception code: 0xc0000005
Fault offset: 0x0000000000032a8e
Faulting process id: 0x9f0
Faulting application start time: 0x01ce820a679bb189
Faulting application path: C:\Windows\system32\svchost.exe
Faulting module path: C:\Windows\system32\wimgapi.dll
Report Id: aa4171a9-edfd-11e2-bd63-0050569b0082
and some other APPCRASH events about WDS.
So most of the resources recommends checking permissions, re-initialize the WDS or reinstall.
Your case might not be same as me but I recommend you to try something else before step in to recommended time consuming tasks.
Refresh!. Yes try to refresh your image first, Although SCCM says the boot image has updated successfully on PXE points try to refresh once. It worked for me, you can also copy image from refreshed source to test it. So I refreshed my PXE points and voila ! All WDS service problems have disappeared.
Currently I am not sure about the source of the problem but my feelings says it could be the binary difference replication.
One of the events were popular Event ID 258 — Image Server Configuration
The description for Event ID 258 from source WDSIMGSRV cannot be found. Either the component that raises this event is not installed on your local computer or the installation is corrupted. You can install or repair the component on the local computer.
If the event originated on another computer, the display information had to be saved with the event.
The following information was included with the event:
0xC1030104
Another event was 512 with same error information
An error occurred while trying to initialize provider WdsImgSrv from C:\Windows\system32\WdsImgSrv.dll. Since this provider is not marked as critical, Windows Deployment Services server will continue.
Error Information: 0xC1030104
and 1000
Faulting application name: svchost.exe_WDSServer, version: 6.1.7600.16385, time stamp: 0x4a5bc3c1
Faulting module name: wimgapi.dll, version: 6.1.7600.16385, time stamp: 0x4a5be09a
Exception code: 0xc0000005
Fault offset: 0x0000000000032a8e
Faulting process id: 0x9f0
Faulting application start time: 0x01ce820a679bb189
Faulting application path: C:\Windows\system32\svchost.exe
Faulting module path: C:\Windows\system32\wimgapi.dll
Report Id: aa4171a9-edfd-11e2-bd63-0050569b0082
and some other APPCRASH events about WDS.
So most of the resources recommends checking permissions, re-initialize the WDS or reinstall.
Your case might not be same as me but I recommend you to try something else before step in to recommended time consuming tasks.
Refresh!. Yes try to refresh your image first, Although SCCM says the boot image has updated successfully on PXE points try to refresh once. It worked for me, you can also copy image from refreshed source to test it. So I refreshed my PXE points and voila ! All WDS service problems have disappeared.
Currently I am not sure about the source of the problem but my feelings says it could be the binary difference replication.
Friday, 8 February 2013
DISM Error Code 11 while running 64bit CMD via 32bit SCCM client.
I needed to run deployment image servicing and management tool ( dism.exe ) in an SCCM installation program, and I needed to call that via cmd.exe. I was getting Error Code 11 : You cannot service a running 64bit OS with a 32bit version of DISM. Please use the version of DISM that corresponds to your computer's architecture. The DISM log file can be found at C:\Windows\Logs\DISM\dism.log
The cmd.exe under system32 is 64bit but running c:\windows\system32\cmd.exe /c …. still causes problem if it’s called from 32bit app, like sccm client or c:\windows\syswow64\cmd.exe
So calling c:\windows\system32\cmd.exe explicitly didn't help.
The solution is using sysnativealias, example : c:\windows\sysnative\cmd.exe
Because when you use sysnative you also say don’t redirect me to windows.
You may experiencing this problem for DISM operations in Windows, in that case change your working folder to C:\Windows\System32 or call DISM from this folder to get rid of this error.
More details @ http://msdn.microsoft.com/en-gb/library/windows/desktop/aa384187(v=vs.85).aspx
The cmd.exe under system32 is 64bit but running c:\windows\system32\cmd.exe /c …. still causes problem if it’s called from 32bit app, like sccm client or c:\windows\syswow64\cmd.exe
So calling c:\windows\system32\cmd.exe explicitly didn't help.
The solution is using sysnativealias, example : c:\windows\sysnative\cmd.exe
Because when you use sysnative you also say don’t redirect me to windows.
You may experiencing this problem for DISM operations in Windows, in that case change your working folder to C:\Windows\System32 or call DISM from this folder to get rid of this error.
More details @ http://msdn.microsoft.com/en-gb/library/windows/desktop/aa384187(v=vs.85).aspx
Friday, 18 January 2013
How-to deploy Skype with SCCM
How-To deploy Skype with SCCM
First you'll need to download Business version of Skype, SkypeSetup.msi from http://www.skype.com/intl/en-gb/business/download and rest is easy as deploying standard MSI file,
You can also modify it with Orca or create a new transform, for example you might want to remove
Desktop Shortcut : Shortcut\SkypeDesktopShortcut
Sent to : Shortcut\SkypeSentToShortcut
Start after Install : CustomAction\SkypeStart1
Start at Windows Start up : Registry\reg08D3E7E5CD85CB55680CCDE42A2E2625 (Software\Microsoft\Windows\CurrentVersion\Run)
Also I recommend you to download Skype IT Admin Guide from http://download.skype.com/share/business/guides/skype-it-administrators-guide.pdf
First you'll need to download Business version of Skype, SkypeSetup.msi from http://www.skype.com/intl/en-gb/business/download and rest is easy as deploying standard MSI file,
You can also modify it with Orca or create a new transform, for example you might want to remove
Desktop Shortcut : Shortcut\SkypeDesktopShortcut
Sent to : Shortcut\SkypeSentToShortcut
Start after Install : CustomAction\SkypeStart1
Start at Windows Start up : Registry\reg08D3E7E5CD85CB55680CCDE42A2E2625 (Software\Microsoft\Windows\CurrentVersion\Run)
and run with the new mst, e.g. msiexec /i SkypeSetup.msi Transforms=SkypeCustom.mst ALLUSERS=1 /qb
Also I recommend you to download Skype IT Admin Guide from http://download.skype.com/share/business/guides/skype-it-administrators-guide.pdf
Thursday, 17 January 2013
ConfMgr SP1 - WSUS Upstream Server
One of the useful things that Configuration Manager 2012 SP1 has brought is allowing usage of WSUS as an upstream server.
Paragraph from http://technet.microsoft.com/en-us/library/jj591552.aspx
At the top-level Configuration Manager site, you can now specify an existing WSUS server as the upstream synchronization source location. During synchronization, the site connects to this location to synchronize software updates. For example, if you have an existing WSUS server that is not part of the Configuration Manager hierarchy, you can specify the existing WSUS server to synchronize software updates.
Friday, 11 January 2013
Propagating SCCM DB for "Hardware 2A - Estimated computer age by ranges within a collection" report
As you know or have just found Microsoft hasn't been updating the LU_CPU table in SCCM since 2006. So running a computer age report "Hardware 02A - Estimated computer age by ranges within a collection" shows Not Available for computers have CPUs launched after 2006.
But you can update this data manually if you really need to run these reports. I did it in 1 day, it was boring but seeing the result was a big relief. Now I know I will not have to import hundreds of records again.
Result :

Steps? Here : )
1. Find discovered CPU information in v_GS_Processor, and exclude CPUs already exist in LU_CPU table.
After running query and seeing the results you might want to add something like these to make it shorter by excluding bad looking ones to check them at the and.
Now you have as much as usable data from the view, Column names match the LU_CPU as well.
2. Now you can take the query output to excel or to a temporary sql table to work on it, choice is yours. I used Excel to trim some information, because CPU names don't have a standard pattern to automatize parsing/filling.

I duplicated the Name Column and deleted all information by Find/Replace to leave CPU Model alone.

3. Then visited Intel's ARK ( http://ark.intel.com/search/advanced/ ) website to obtain a detailed CPU list, and imported it to another sheet.
4. Converted Launch dates to yyyy-mm-dd format, I written this to do that.
" DATE((CONCATENATE(20,RIGHT(B3,2))),(3*(MID(B3,2,1)))-2,1) "
5. Copied values of Processor Number and CPU_Birth to the Sheet I created at first with data from the first query. (VLOOKUP caused me problem when I used it in multiple sheet)
I added a column next to Name and with " =VLOOKUP(H2,P:Q,2,FALSE) " formula, P:Q here is the two columns from ARK table.
6. And added other necessary columns, also checked models names with eye and corrected names like M 430 to 430M etc. (Boring bit)
7. Rest is the inserting the table to LU_CPU, you can do that as you wish. You can concatenate columns and use with SQL's Insert Into.
This is lazy - non-creative way but very useful for future updates, as you can only add a new cpu and run it's command on SQL to add it. You can try to import from Excel file directly to LU_CPU too.
For remaining CPUs don't have CPU_Birth information you can use the SCCM reporting to find machines by clicking the Not Available on the top of the report, search machine with the query below
Add your findings to your table and find birth date manually on the web, ( I recommend http://www.cpu-world.com/ ) then insert you DB LU_CPU again.
You can also query LU_CPU table for NULL CPU_Births
then find the Launch date manually on the web and update the column via Name
Good luck !
But you can update this data manually if you really need to run these reports. I did it in 1 day, it was boring but seeing the result was a big relief. Now I know I will not have to import hundreds of records again.
Result :
Steps? Here : )
1. Find discovered CPU information in v_GS_Processor, and exclude CPUs already exist in LU_CPU table.
SELECT DISTINCT
.[v_GS_PROCESSOR].CPUHash0 AS CPUHash,
.[v_GS_PROCESSOR].Manufacturer0 AS Manufacturer,
.[v_GS_PROCESSOR].BrandID0 AS BrandID,
.[v_GS_PROCESSOR].PCache0 AS PCache,
.[v_GS_PROCESSOR].NormSpeed0 AS NormSpeed,
.[v_GS_PROCESSOR].IsMobile0 AS Mobile,
.[v_GS_PROCESSOR].Name0 AS Name
FROM
.[v_GS_PROCESSOR]
LEFT JOIN
.[LU_CPU] as LC
ON
.[v_GS_PROCESSOR].CPUHash0 = LC.CPUHash
WHERE
LC.CPUHash is null
After running query and seeing the results you might want to add something like these to make it shorter by excluding bad looking ones to check them at the and.
AND
.[v_GS_PROCESSOR].Name0 Like '%[0-9]%' /* Exclude rogue entries */
AND
.[v_GS_PROCESSOR].Manufacturer0 Like '%Intel%'
AND
.[v_GS_PROCESSOR].Name0 Not Like '[" "]%' /*Exclude duplicates and rogues*/
Now you have as much as usable data from the view, Column names match the LU_CPU as well.
2. Now you can take the query output to excel or to a temporary sql table to work on it, choice is yours. I used Excel to trim some information, because CPU names don't have a standard pattern to automatize parsing/filling.
I duplicated the Name Column and deleted all information by Find/Replace to leave CPU Model alone.
3. Then visited Intel's ARK ( http://ark.intel.com/search/advanced/ ) website to obtain a detailed CPU list, and imported it to another sheet.
4. Converted Launch dates to yyyy-mm-dd format, I written this to do that.
" DATE((CONCATENATE(20,RIGHT(B3,2))),(3*(MID(B3,2,1)))-2,1) "
5. Copied values of Processor Number and CPU_Birth to the Sheet I created at first with data from the first query. (VLOOKUP caused me problem when I used it in multiple sheet)
I added a column next to Name and with " =VLOOKUP(H2,P:Q,2,FALSE) " formula, P:Q here is the two columns from ARK table.
6. And added other necessary columns, also checked models names with eye and corrected names like M 430 to 430M etc. (Boring bit)
7. Rest is the inserting the table to LU_CPU, you can do that as you wish. You can concatenate columns and use with SQL's Insert Into.
This is lazy - non-creative way but very useful for future updates, as you can only add a new cpu and run it's command on SQL to add it. You can try to import from Excel file directly to LU_CPU too.
For remaining CPUs don't have CPU_Birth information you can use the SCCM reporting to find machines by clicking the Not Available on the top of the report, search machine with the query below
SELECT * FROM v_GS_PROCESSOR where SystemName0 = 'JK04-LT'
Add your findings to your table and find birth date manually on the web, ( I recommend http://www.cpu-world.com/ ) then insert you DB LU_CPU again.
You can also query LU_CPU table for NULL CPU_Births
SELECT DISTINCT [LU_CPU].Name
From [LU_CPU] where CPU_Birth is NULL
then find the Launch date manually on the web and update the column via Name
UPDATE [LU_CPU]
SET CPU_Birth = '2005-03-01'
Where Name = 'Intel(R) Celeron(R) M processor 1.50GHz'
Good luck !
Monday, 7 January 2013
SCCM'de MDT DB kullanarak domaine dahil etme islemini otomatik ve lokasyon spesifik gerceklestirmek
Eger sizde benim gibi Task Sequence'nizde bilgisayarlarin domaine dahil olma isleminde "Apply Network Settings" lokasyona ozel degerleri otomatik algilayip uygulamak istiyorsaniz. Yani bir den fazla domain'e sahipseniz ancak bir den fazla islem yaratip her bir domain icin ayri sorgular yazmak istemiyorsaniz. SCCM'nize entegre olmus MDT'nin veritabanini kullanarak bu islemi kolaylastirabilirsiniz.
Tek yapmaniz gereken MDT DB de yaratiiginiz lokasyonlarin ozelliklerine gerekli degerleri girmek ve SCCM OSD'de ki Task Sequence'de bu degerleri cagirmak olacak.
MDT DB'de lokasyon altinda degistirilecek degerler Domain and Workgroup bolumu altinda yer almakta, buradaki degerleri kendi domain ayarlariniza gore konfigure etmeniz gerekmekte. Bu zaten sadece MDT kullanilarak yapilan isletim sistemi kurulumlarindan bildiginiz bir adim olabilir.

Daha sonra SCCM'de ki mevcut task sequence'nizde Apply Network Settings adimini konfigure etmeniz gerekmekte, degisken isimleri aynen MDT DB deki gibi olacagindan isiniz cok basit.
Domain : %JoinDomain%
DomainOU : %MachineObjectOU%
Account : %DomainAdmin%
Password : %DomainAdminPassword%
Seklinde degisikliklerinizi yapmaniz yeterli olacak, sifre yi girerken yuzdeleri basa ve sona yazmayi unutmayin,
Tek yapmaniz gereken MDT DB de yaratiiginiz lokasyonlarin ozelliklerine gerekli degerleri girmek ve SCCM OSD'de ki Task Sequence'de bu degerleri cagirmak olacak.
MDT DB'de lokasyon altinda degistirilecek degerler Domain and Workgroup bolumu altinda yer almakta, buradaki degerleri kendi domain ayarlariniza gore konfigure etmeniz gerekmekte. Bu zaten sadece MDT kullanilarak yapilan isletim sistemi kurulumlarindan bildiginiz bir adim olabilir.
DomainAdmin : Bilgisayari domaine eklerken kullanilacak kullanici adi. Ornek : OSDAdmin |
| DomainAdminDomain : DomainAdmin kullanicisinin domaini Ornek: Domain1 |
| DomainAdminPassword : Domain Admin kullanicisinin sifresi |
| JoinDomain : Bilgisayarin dahil edilecegi domain adi, Ornek: Domain1.yerel |
| MachineObjectOU : Bilgisayar objesinin yaratilacagi OU, Ornek: OU=YeniBilgisayarlar,DC=Domain1,DC=yerel |
Daha sonra SCCM'de ki mevcut task sequence'nizde Apply Network Settings adimini konfigure etmeniz gerekmekte, degisken isimleri aynen MDT DB deki gibi olacagindan isiniz cok basit.
Domain : %JoinDomain%
DomainOU : %MachineObjectOU%
Account : %DomainAdmin%
Password : %DomainAdminPassword%
Seklinde degisikliklerinizi yapmaniz yeterli olacak, sifre yi girerken yuzdeleri basa ve sona yazmayi unutmayin,
Using MDT DB to get location specific Domain Joining parameters in SCCM OSD
If you have multiple domains as me and want to automate domain joining task by sensing locations automatically in SCCM OSD, you can use MDT DB to do it easily. You can also do this by adding more actions with different queries to your TS or customizing your coustomsettings.ini. But I prefer using MDT DB as changes there doesn't need to be refresh as packages, GUI makes it easier to manage and more foolproof, etc.
All you need to do is modifying location details on your MDT DB and call these variables in your SCCM TS.
So first edit your location details in MDT Workbench, you'll need to edit four values here as shown below.

Then you'll need to modify your "Apply Network Settings" action in your TS to use values in MDT DB. It is very as MDT Workbench displays these as it is. So all you need to do adding % to the start and the end of the variable as below.
Domain : %JoinDomain%
DomainOU : %MachineObjectOU%
Account : %DomainAdmin%
Password : %DomainAdminPassword%
All done, now you can test it.
Please note that you'll need a working SCCM and MDT integration to use this method first.
All you need to do is modifying location details on your MDT DB and call these variables in your SCCM TS.
So first edit your location details in MDT Workbench, you'll need to edit four values here as shown below.
DomainAdmin : The name of the account used to join the domain. Example : OSDAdmin |
| DomainAdminDomain : The domain of the account used to join the domain. Example: Domain1 |
| DomainAdminPassword : The password of the account used to join the domain. |
| JoinDomain : The name of the domain in which the computer should be placed. Example: Domain1.local |
| MachineObjectOU : The OU in which the computer account should be created (if it does not already exist)., Exaple: OU=NewComps,DC=Domain1,DC=Local |
Then you'll need to modify your "Apply Network Settings" action in your TS to use values in MDT DB. It is very as MDT Workbench displays these as it is. So all you need to do adding % to the start and the end of the variable as below.
Domain : %JoinDomain%
DomainOU : %MachineObjectOU%
Account : %DomainAdmin%
Password : %DomainAdminPassword%
All done, now you can test it.
Please note that you'll need a working SCCM and MDT integration to use this method first.
Subscribe to:
Posts (Atom)