Categories
ConfigMgr

ConfigMgr 2012 : App-V Management Server Co-Existence

One question I had for the ConfigMgr rollout was around how the migration from App-V Management Server to ConfigMgr was going to work. Specifically my questions were:

  1. Could the environments co-exist?
  2. Do we have to uninstall/reinstall the App-V Client with different settings?
  3. Will we lose the App-V client cache? With many remote users losing the cache was potentially a nightmare.
  4. What happens if I re-publish an App-V application via ConfigMgr that was originally published via App-V Management Server will it re-download?

After testing I have answered my questions.

Categories
ConfigMgr

ConfigMgr 2012 : Collection by Domain Name

In a multi-domain environment you may wish to create collection (s) that are based on domain name; use the following query to do just that:

{code lang:sql showtitle:false lines:false hidden:false}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 where SMS_R_System.ResourceDomainORWorkgroup = “NETBIOS NAME”{/code}

Categories
ConfigMgr

APPV : Move SQL Database – Collation Issues

I’ve recently had to move an App-V Management Server’s SQL database to a new environment. Following the guide here I encountered an issue once completed – all clients could not refresh the publishing server or stream applications! The error I received is illustrated below:

App-V Error

Error code: 4513CDC-160650A-200001F4

After enabling verbose logging on the AppV Management Server I identified the following errors:

[2012-07-16 12:39:24.082] <SERVER NAME> 3920 924 SWExecDcRefreshProc – “Default Provider Policy” Administrator – 5 65535 “Failed to move to second result set on statement.”
[2012-07-16 12:39:24.082] <SERVER NAME> 3920 924 SWConstructDcRefreshXml – “Default Provider Policy” Administrator – 5 65535 “Failed to create XML.”
[2012-07-16 12:39:24.082] <SERVER NAME> 3920 924 RTSPHandlerEx::HandleGetAppList – “Default Provider Policy” Administrator – 5 65535 “Failed to construct <APPLIST>. Status[21887760]”
[2012-07-16 12:39:24.082] <SERVER NAME> 3920 924 SW_RTSPHandler::SendResponse – “Default Provider Policy” Administrator – 5 65535 “Response: [RTSP/1.0 500 Internal Server Error]

The client was reporting the following errors:

[07/12/2012 17:48:04:416 MIME ERR] {tid=244:usr=<USER ID>}
Failure on Desktop Configuration Server request to URL {rtsp:<SERVER FQDN>:554/} with header {Host: <SERVER FQDN>
Content-Type: text/xml
} (rc 1690650A-200001F4).

Seeing as the above wasn’t all that helpful I took a look at what was going on at a database level using SQL Profiler; it became apparent that there was a collation mismatch issue. The previous instance had been set to SQL_Latin1_General_CP1_CI_AS, whereas the new instance was set as the default Latin1_General_CI_AS.

After reviewing the stored procedure that was failing in the trace – sp_SFTgetPorterDCRefreshXML – it was clear that it was using a TEMP TABLE to perform comparisons. Temp tables sit in a system database and therefore use the system collation, not the database collation, unless you modify the declaration of your table to ensure that any varchar, nvarchar, text, ntext columns use the dataabse collation, not the system collation.

I used the following SQL to identify all stored procedures that created temporary tables:

{code lang:sql showtitle:false lines:false hidden:false}SELECT DISTINCT B.Name
FROM syscomments A INNER JOIN sysobjects B
ON A.id = B.id
WHERE A.text like ‘%CREATE TABLE #%’
ORDER BY{/code}

This generated a list of 16 Stored Procedures, although it turned out that I only needed to change 4 – Microsoft had correctly defined all of the other temp tables to use the database collation (consistency is overrated right?):

  1. sp_SFTaddpackageversion
  2. sp_SFTgetAlewifeDCRefreshXML
  3. sp_SFTgetPorterDCRefreshXML
  4. sp_SFTgetselectedapps

To ‘fix’ each stored procedure look for ‘CREATE TABLE #’ and modify as outlined below. Note you do not need to change numeric or date/time declarations, just text based ones:

Before:

{code lang:sql showtitle:false lines:false hidden:false}CREATE TABLE #temp_appdailyUserCount (
app_id int NOT NULL,
usage_date datetime NOT NULL,
Username nvarchar(256) NOT NULL ) {/code}

After:

{code lang:sql showtitle:false lines:false hidden:false}CREATE TABLE #temp_appdailyUserCount (
app_id int NOT NULL,
usage_date datetime NOT NULL,
Username nvarchar(256) COLLATE database_default NOT NULL )
{/code}

Categories
ConfigMgr

ConfigMgr : OSD Install Updates Download Hangs

I knew it had been too long since my last issue with ConfigMgr 2012! I’ve just redeployed the Configuration Manager 2012 environment my previous articles were based on only to encounter a new problem!

The issue is that now during Operating System Deployment during the ‘Install Updates’ step, downloading the updates appears to hang randomly as illustrated below.

BuildCapture UpdatesHang-ReSize

          Downloading xx of xx Updates (xx% complete)…

The solution was fairly simple. After reviewing the DataTransferService.log file under C:\Windows\CCM\Logs I found the following errors:

<![LOG[Error sending DAV request. HTTP code 600, status ”]LOG]!><time=”08:37:54.017-120″ date=”07-16-2012″ component=”DataTransferService” context=”” type=”3″ thread=”2572″ file=”util.cpp:629″>

<![LOG[Error retrieving manifest (0x800704cf).  Will attempt retry 6 in 960 seconds.]LOG]!><time=”08:37:54.017-120″ date=”07-16-2012″ component=”DataTransferService” context=”” type=”2″ thread=”2572″ file=”dtsjob.cpp:1161″>

<![LOG[Failed to send request to /NOCERT_SMS_DP_SMSPKG$/4e90bf14-4e96-47e1-b32e-8a8e9fcc28df at host <DP FQDN>, error 0x2efe]LOG]!><time=”08:37:54.345-120″ date=”07-16-2012″ component=”DataTransferService” context=”” type=”2″ thread=”728″ file=”ccmhttpget.cpp:1801″>

<![LOG[[CCMHTTP] ERROR: URL=https://<MP FQDN>:443/NOCERT_SMS_DP_SMSPKG$/4e90bf14-4e96-47e1-b32e-8a8e9fcc28df, Port=443, Options=480, Code=12030, Text=ERROR_WINHTTP_CONNECTION_ERROR]LOG]!><time=”08:37:54.345-120″ date=”07-16-2012″ component=”DataTransferService” context=”” type=”1″ thread=”728″ file=”ccmhttperror.cpp:291″>

So I copied the URL highlighted above into a browser window and got ‘page cannot be dispalyed’…! In fact it turned out that no HTTPS pages could be displayed, despite the HTTPS binding being configured in IIS. I removed the HTTPS binding on the Default Website and recreated it… problem solved.

Categories
Exchange Server 2010

Exchange 2010 : Export SMTP Email Addresses to CSV

Use the following PowerShell script to export a list of email addresses into a CSV file. The file will containt displayName, primarySMTPAddress and emailAddresses (proxyAddresses).

{code lang:ini showtitle:false lines:false hidden:false}$tbldata = @()
$arrmbx = get-mailbox -resultsize unlimited

foreach ($mbx in $arrmbx ) {
    $mailstring = ”    
    $record = @{}
    [array]$SmtpProxyAddresses = $mbx.emailaddresses | Where {$_.prefixstring -like ‘smtp’} | sort IsPrimaryAddress -Descending
    
    foreach ($mailadd in $SmtpProxyAddresses) {
            $mailadd = $mailadd -replace “smtp:”
            If ($mailstring -eq ” ) {
                $mailstring = $mailadd
            }
            ELSE {
                $mailstring += “,” +$mailadd
            }
    }
    
    $record.displayName = $mbx.name
    $record.primarySMTP = $mbx.primarySMTPaddress
    $record.emailAddress = $mailstring
    $tbldata += new-object PSObject -Property $record    
}

$tbldata | Export-Csv “Email Addresses.csv” -NoTypeInformation
{/code}

Categories
ConfigMgr

ConfigMgr 2012 : Application Catalog Login Popup Cross-Domain

So, you can probably see from the spat of recent articles on here that I’m working on a Configuration Manager deployment..! The deployment spans multiple domains, with the Application Catalog role residing in another domain to some user accounts – all within the same forest mind. This will cause a login prompt if a user tries to open the Application Catalog Web Site, even if the site is in the Trusted Sites zone.

First things first you need to modify the ACL of the folder containing website itself on the Application Catalog server – <Install Path>\SMS_CCM\CMApplicationCatalog. Add each domain’s Domain Users group with Read and Execute, Read and List Folder Contents.

Next you need to add the site URL’s to the Local Intranet zone in order for credentials to be sent. Unfortunately this cannot be achieved using the Configuration Manager Device Policies, you’ll have to either use a Group Policy or a script.

Scripted Method (preferred)

The following VBscript will work, change the FQDN of your Internet Management Point and then distribute as a package in ConfigMgr 2012. Create a program within your package that has the following command line setup: cscript.exe /nologo <script file>.vbs

Note that this will not work on machines that have Internet Explorer Enhanced Security Configuration (IE ESC) enabled.

{code lang:javascript showtitle:false lines:false hidden:false}On Error Resume Next
Const HKEY_CURRENT_USER = &H80000001

strComputer = “.”

Set objReg = GetObject(“winmgmts:{impersonationLevel=impersonate}\\” & strComputer & “\root\default:StdRegProv”)
strKeyPath = “Software\Microsoft\Windows\CurrentVersion\Internet Settings\ZoneMap\Domains\<internet MP FQDN>”

objReg.CreateKey HKEY_CURRENT_USER,strKeyPath

strValueName = “https”
dwValue = 1

objReg.SetDWORDValue HKEY_CURRENT_USER,strKeyPath,strValueName,dwValue
{/code} 

Group Policy Method

Create a new/edit an existing GPO in each domain with the settings defined below.

Browse to: Administrative Templates > Windows Components > Internet Explorer > Internet Control Panel > Security Page

Then look for the Site to Zone Assignment List, enable and add the following (the value ‘1’ is used to define the Local Intranet zone)

    • Value Name: https://<intranet fqdn>/  Value: 1
    • Value Name: https:/</internet> fqdn>/    Value: 1
    • Value Name: http://<intranet fqdn>/  Value: 1
    • Value Name: http:/</internet> fqdn>/    Value: 1

Don’t use the built-in Configuration Manager Device Policy method to add this to Trusted Sites as this will not pass NTLM credentials.

There is a downside to this, all Zones becomes ‘Managed’ – i.e. users will be unable to modify the membership of any zones.

Categories
ConfigMgr

ConfigMgr 2012 : Creating a Multi-Regional / Multi-Lingual Windows Image

You can use this language pack deployment method to integrate many languages at once into a Windows Image during Build and Capture, or even Image Deployment, the primary display and input language are set by the Unattend file.

Categories
ConfigMgr

ConfigMgr 2012 : Deploy VMWare Tools During OSD

Addig an ‘intelligent’ VMWare Tools installation ensures that all of your VM’s get the necessary drivers and tools automatically during Operating System Deployment. Using WMI we can ensure that the tools are only deployed to VMWare machines.

1. Create a VMWare Tools Package

  1. Copy the contents of the VMWare Tools CD to a Source Folder
  2. Create a New Package with Source Files
  3. Within the Package create a Program with the following configuration:
    1. General
      1. Command Line: msiexec /i “VMware Tools64.msi” ADDLOCAL=ALL REMOVE=”Hgfs,WYSE,GuestSDK,vmdesched” /qn /norestart
      2. After Running: Configuration Manager Restart Computer
    1. Requirements
      1. Select Required Platform: Windows 2003 64-bit or newer – note 64-bit ONLY
    1. Environment
      1. Program can run: Whether user is logged in or not
    1. Advanced
      1. Tick ‘Allow this program to be installed from the Install Package task sequence without being deployed’

2. Prepare the Task Sequence

  1. Create a new group with the following ‘Query WMI’ condition:
    1. WMI Namespace: root\cimv2
    2. WQL Query: select Model from Win32_ComputerSystem where Model = “VMware Virtual Platform”
  2. Add a Install Package Task underneath this group that deploys the VMWare Tools Program you have just created
Categories
ConfigMgr

ConfigMgr 2012 : SMS_SITE_BACKUP Error 5060

When using the SMS_SITE_BACKUP component to perform a Configuration Manager 2012 backup you may receive the following errors:

SMS SQL Backup service on the SQL Server \\<SQL Server Name> failed to backup the site database CM_<Site Code>;. The error reported by the service is Error: SQL Writer not found.. Backup operation is not completed.

Site Backup failed. The error reported by the service is Error: Sql Server could not prepare for the Backup.. Backup operation is not completed. Please see smsbkup.log for more information.

To resolve this simply configure the NTAUTHORITY\SYSTEM account to have SYSADMIN permissions on the System Center 2012 Configuration Manager SQL Instance. This is required for the VSS writer to backup the SQL database.

Categories
ConfigMgr

ConfigMgr 2012 : Build and Capture Update Install Not Working

I’ll say nothing this time… Build and Capture using HTTPS SUP/DP/MP failing to install updates – no fatal error during the build and capture, just no updates either. For around 30 minutes (default timeout) the Task Sequence would be stuck on ‘Install Updates’ before moving on to the next stage of the sequence, or the Task Sequence may stop with a 0x87d0069b error.

INstallUpdates