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)
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 :

11-01-2013 13-29-47

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.
 11-01-2013 13-42-49

 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.

11-01-2013 13-46-26

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

11-01-2013 13-48-37

 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.

 11-01-2013 13-53-08

 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) "
  11-01-2013 13-56-45

 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.
  11-01-2013 14-01-24

 6. And added other necessary columns, also checked models names with eye and corrected names like M 430 to 430M etc. (Boring bit)
  11-01-2013 14-04-56

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.
   11-01-2013 14-09-47

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.
   SCCM Computer Age

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.

07-01-2013 13-27-03






















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%
07-01-2013 13-25-08

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.

07-01-2013 13-27-03






















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%
 07-01-2013 13-25-08

All done, now you can test it.

Please note that you'll need a working SCCM and MDT integration to use this method first.

Saturday 5 January 2013

Step by Step AutoReseed Configuration for a DAG in Exchange Server.

Hi,

In this article I will show you how to configure AutoReseed for a Database Availability Group. Autoreseed – a feature that’s been designed to automatically restore database(s) after a disk failure onto a spare disk that has been provisioned on the system. If a disk fails, the database copies stored on the disk are mounted automatically to a spare disk on the Mailbox server.

How to configure AutoReseed?

1. The first step is to configure the root paths for the databases and the volumes. If you want to keep the default values this step can be skipped. In this example; the default paths are changed to:

  • To see the default folder paths: Get-DatabaseAvailabilityGroup CKDAG1 | fl *auto*

  • To set the path for databases: Set-DatabaseAvailabilityGroup CKDAG1 -AutoDagDatabasesRootFolderPath “C:\CKEXv15Dbs”


*** Change the DAG Name and the folder path accordingly.

1.1

 

  • To set the path for volumes: Set-DatabaseAvailabilityGroup CKDAG1 -AutoDagVolumesRootFolderPath “C:\CKEXv15VOLs”


1.2

 

2. The second step is to configure the number of databases per volume. In this scenario I accepted the default value.

  • To configure the number run: Set-DatabaseAvailabilityGroup CKDAG1 -AutoDagDatabaseCopiesPerVolume 3

  • To verify the setting run: Get-DatabaseAvailabilityGroup CKDAG1 | select *auto*


2

3. The third step is to create the root directories for databases and volumes

  • md C:\CKEXv15DBs

  • Md C:\CKExv15VOL

  • To verify run: Dir C:\


4. The next step is mounting the volume folders. This step should be completed for every volume (including the spare volumes) that will be used for databases.

  • Create a folder under the root volumes folder. In this example it is C:\CKEXv15VOLs

  • Created Volume 1 and Volume 2 folders.

  • Launch the Computer Management select the disk, then ‘Change Drive Letters and Paths’


4.1

 

4.2

 

  • Follow the on screen instructions and Finish. Then check the status of the empty folder you created in the above step.

  • Complete same steps for every volume.


5. The fifth step is creating the database directories under the root path C:\CKEXv15DBs.

  • Run: md C:\CKEXv15DBs\MbxARDB01 (Run this for every database directory.)


6. We are nearly there. The sixth step is creating the directory structure. Create the following directories by running:

  • md C:\CKEXv15VOLs\Volume1\MbxARDB1.db

  • md C:\CKEXv15VOLs\Volume1\MbxARDB1.log


7. Next configuration is creating the mount points for the database. For this I used the Diskpart utility.

  • Open a command prompt and type ‘diskpart’

  • To see the list of the volumes on the server type ‘list volume’

  • Find the volume and its number that you would like to configure and type ‘Select Volume number’ In this example it is the volume number 3 hence I run ‘Select Volume 3′

  • The last step is mounting the volume. For this run ‘assign mount:C:\CKEXv15DBs\MbxARDB01′


7.1

  • To verify the above configuration steps run the following command:

  • mountvol C:\CKEXv15DBs\MbxARDB01 /L


7.2

8. We are nearly there. The last step as you can imagine is creating the databases in the appropriate folder. You can either create the database(s) using the EAC (Exchange Admin Centre) or run the following command:

  • New-MailboxDatabase -Name MbxARDB01 -Server CKLABEX01 -LogFolderPath C:\CKEXv15DBs\MbxARDB01\MbxARDB01.log -EdbFilePath C:\CKEXv15DBs\MbxARDB01\MbxARDB01.db\MbxARDB01.edb


8.1

  • To verify the paths run the command you see in below picture


8.2

All DONE  Before you go ahead with the testing you need to make sure the environment is ready. Another requirement!!! wait, this is an easy step. You need to create a MailboxDatabaseCopy of the newly created database on another DAG member. To do this and check the configuration afterwards see the picture below:

8.3

The database is now mounted on server CKLABEX01 and the copy is on CKLABEX06. Content Index State for both copies is Healthy and there are no logs waiting in the queue. Well I can hear the question? What NEXT? The next part is actually where we start our test by taking the disk that hosts Volume1 offline.

After simulating this disk failure I would expect the database getting mounted on the other DAG member, in our example this is CKLABEX06 and after that seeding should start and create the files under Volume2.

There you go…AutoReseed successfully completed and the seeding successfully created files under Volume2 which was initially configured as a spare disk. See below:

thereyougo

Volume 1 is not accessible and the database and log files are created under Volume2. Let’s do another check and verify the status using EMS. See below:

volume1notaccessible

The AutoReseed copy is Healthy

You can also check the Event Logs for the AutoReseed job. You should see the following logs when the AutoReseed is successfully completed.

event1

event2

event3

event4

event5

event6

Hope you find the article helpful.

ecsword