The application has failed to start because its side-by-side configuration is incorrect error in IISLogs

We have an occasional support question a person receives an error when trying to execute IISLogs.

Problem:
The problem is a space “ ” or “�!” stored within the configuration item normally causes the issue.

<add key=”MonitoredEntireDirectories” value=”&nbsp;” />

or

<add key=”MonitoredEntireDirectories” value=”&#x0;!” />

Solution:

Remove the “&nbsp;” or “&#x0!” value using a text editor such as Notepad.

side-by-side-error3

Here are screenshots to showing the error and where to look.

side-by-side-error1

side-by-side-error2

Ping Sweep test using PowerCLI and vCenter

I had a reason to do a ping sweep across a set of machines with vCenter using PowerCLI.  The Test-Connection cmdlet is available on Win 8 / Win 2012 R2.   Enjoy.

# Assuming you’ve loaded the PowerCLI snapin located @
# http://blogs.vmware.com/PowerCLI/2014/09/new-release-vmware-vsphere-powercli-5-8-release-1.html
# Loading PowerCLI Snapins
function LoadSnapin{
param($PSSnapinName)
if (!(Get-PSSnapin | where {$_.Name   -eq $PSSnapinName})){
Add-pssnapin -name $PSSnapinName
}
}
LoadSnapin -PSSnapinName   “VMware.VimAutomation.Core”

#An account is needed
$cred = Get-Credential “domain\user”

#Connect to vCenter
Connect-VIServer -server “vCenterServer” -credential $cred
$a = Get-Cluster “Server-Cluster-Name” | get-vm
$results = @()
foreach($computer in $a)
{
Write-Host $Computer.Name
$results += Test-Connection -ComputerName $Computer.Name -count 2
}

$results | Select Address,IPV4Address,ReplySize,ResponseTime | Export-Csv results.csv
Here is a sample output

#TYPE Selected.System.Management.ManagementObject
“Address”,”IPV4Address”,”ReplySize”,”ResponseTime”
“Server1″,”192.168.10.50″,”32″,”0″
“Server1″,”192.168.10.50″,”32″,”0″
“Server2″,”192.168.11.70″,”32″,”0″
“Server2″,”192.168.11.70″,”32″,”0″

VMware Snapshot reminder script

Here is a modified script for sending notifications to owners of Snapshots.    I found a couple of examples I hacked together.  I added a function to help Sanitize based on three different attributes. I consolidated them into a single function that determines to send a notification or not.  We have some static machines used for packaging software that maintain a single snapshot.  I included the two links of the original articles that have notification routines.

I wish the user who created the snapshot would be recorded on each snapshot as the owner.  A person has to retrieve the owner from the tasks / events, which is a bit of extra work.  I’ve been running this script for a couple months and been helpful. 

Enjoy

Steve Schofield
Microsoft MVP – IIS

 

# – SnapReminder V1.0 By Virtu-Al – http://virtu-al.net
#
# Please use the below variables to define your settings before use
# function GetSnapList uses http://virtualcurtis.wordpress.com/2011/10/02/find-virtual-machine-snapshots-with-powercli/
param
(
    [string]$vCenterServer = $(throw “Please specify the vCenter server you want to query for snapshots.”),
    [string]$smtpServer = “mail.example.com”,
    [string]$MailFrom = “steve@example.com”,
    [string]$CredentialID = “domain\user”,
    [int]$AgeOfSnap = 14,
    [string]$Output = “Output”,
    [string]$OutputErrors = “OutputErrors”,
    [string]$OutputEmailAudit = “OutputEmailAudit”   
)

function Log([string]$path, [string]$value)
{
    Add-Content -Path “$($Path)$($LogDate).txt” -Value $value
}

# Loading Snapins
function LoadSnapin{
  param($PSSnapinName)
  if (!(Get-PSSnapin | where {$_.Name   -eq $PSSnapinName})){
    Add-pssnapin -name $PSSnapinName
  }
}
LoadSnapin -PSSnapinName   “VMware.VimAutomation.Core”

function Find-User ($username){
    if ($username -ne $null)
    {
        $usr = (($username.split(“\”))[1])
        $root = [ADSI]””
        $filter = (“(&(objectCategory=user)(samAccountName=$Usr))”)
        $ds = new-object system.DirectoryServices.DirectorySearcher($root,$filter)
        $ds.PageSize = 1000
        $ds.FindOne()
    }
}

function GetSnapList
{

$myVMs = Get-VM
$VMsWithSnaps = @()

foreach ($vm in $myVMs)
{
    $vmView = $vm | Get-View
    if ($vmView.snapshot -ne $null)
    {
         $SnapshotEvents = Get-VIEvent -Entity $vm -type info -MaxSamples 1000 | Where { $_.FullFormattedMessage.contains(“Create virtual machine snapshot”)}
        try
        {
            $user = $SnapshotEvents[0].UserName
            $time = $SnapshotEvents[0].CreatedTime
        }
        catch [System.Exception]
        {
                $user = $SnapshotEvents.UserName
                $time = $SnapshotEvents.CreatedTime
        }
       $VMInfo = “” | Select “VM”,”CreationDate”,”User”
       $VMInfo.”VM” = $vm.Name
       $VMInfo.”CreationDate” = $time
       $VMInfo.”User” = $user
       $VMsWithSnaps += $VMInfo
    }
}

#Causes the array to be doubled
#$VMsWithSnaps | Sort CreationDate

return $VMsWithSnaps
}

function SnapMail ($Mailto, $snapshot)
{
    $msg = new-object Net.Mail.MailMessage
    $smtp = new-object Net.Mail.SmtpClient($smtpServer)
    $msg.From = $MailFrom
    $msg.To.Add($Mailto)
    $msg.Subject = “Snapshot Reminder”
    $MailText = “This is a reminder that you have a snapshot active on $($snapshot.VM) which was taken on $($snapshot.Created)”       
    $msg.Body = $MailText
    $smtp.Send($msg)
    $VMDiskSize = [Math]::Round(($snapshot.SizeGB),2)
    Log -Path $OutputEmailAudit -Value “$($Mailto),$($snapshot.VM),$($snapshot.Created),$($VMDiskSize) GB”   
}

#Sanitize if a notification is sent to owner of Snap
function Sanitize ($SnapInfo,[string]$VMName)
{
    [string]$SnapDescription=$SnapInfo.Description
    [string]$SnapName=$SnapInfo.Name
   
    switch -wildcard ($VMName)
    {
        “*abc*” {return $false}
        “*xyz*” {return $false}
        “*123*” {return $false}
        “*xp*” {return $false}
        #”*templates*” {return $false}
    }   
   
    switch -wildcard ($SnapDescription)
    {
        “*abc*” {return $false}
        “*xyz*” {return $false}
        “*123*” {return $false}
        “*xp*” {return $false}
        #”*templates*” {return $false}
    }   
   
    switch -wildcard ($SnapName)
    {
        “*abc*” {return $false}
        “*xyz*” {return $false}
        “*123*” {return $false}
        “*xp*” {return $false}
        #”*templates*” {return $false}
        default {return $true}
    }
}

[double]$SnapSpaceUsed=0
[int]$SnapCount=0
$StartDate = Get-Date
$LogDate = “$($StartDate.Month)-$($StartDate.Day)-$($StartDate.Year)-$($StartDate.Hour)-$($StartDate.Minute)-$($vCenterServer)”
$cred = Get-Credential $CredentialID
Connect-VIServer -server $vCenterServer -credential $cred
Log -Path $Output -Value “Starting process as $($Cred.Username) connecting to $($vCenterServer) at $($StartDate)”

$vmlist = GetSnapList

#Get a list of machines that have snapshots
#Loop through it
foreach ($snapdata in $vmlist)
{
    Write-Host “Starting VM – $($snapdata.vm)”
    #Start process that shows creation date is l
     if($snapdata.CreationDate -lt ((Get-Date).AddDays(-$AgeOfSnap)))
    {
      #Get a list of snaphosts per vm
      #Loop through the list of VM’s
      $snapPerVM = Get-VM -Name $snapdata.vm | Get-SnapShot
      foreach($snap in $snapPerVM)
      {           
           [Boolean]$ProcessNotification = Sanitize -SnapInfo $snap -VMName $snapdata.vm
               Log -Path $Output -Value “*************************************************”
            Log -Path $Output -Value “Starting VM – $snapdata.vm”
            Log -Path $Output -Value “Process : $($ProcessNotification) : Snap : $($snap)”
          
           if($ProcessNotification -eq $true -and $snapdata.User -ne $null)
           {
                $mailto = ((Find-User $snapdata.User).Properties)
                $mailattr = $mailto.mail
               
                if($mailattr -ne $null)
                {
                    SnapMail $mailto.mail $snap
                    Write-Host “$($mailto.mail) – $($snapdata.VM) and $($snap)”
                    Log -Path $Output -Value “MailTo Value : $($mailto.mail) : VMName : $($snapdata.VM) : SnapData : $($snap)”                   
                }
                else
                {
                    $FirstName = $mailTo.givenname
                    $LastName = $mailTo.sn
                    $FirstName = $FirstName -replace ” “, “”
                    $LastName = $LastName -replace ” “, “.”
                   
                    if($FirstName -eq $null)
                    {
                        $emailAddress = “steve@example.com”
                    }
                    else
                    {
                        $emailAddress = “$($FirstName).$($LastName)@example.com”
                    }
                   
                    SnapMail $emailAddress $snap
                    Write-Host “$($emailAddress) – $($snapdata.VM) and $($snap)”
                    Log -Path $Output -Value “EmailAddress : $($emailAddress) : VMName : $($snapdata.VM) : SnapData : $($snap)”
                    $emailAddress=””
                }
               
            $SnapCount++
            $SnapSpaceUsed += $snap.SizeGB
           
            Log -Path $Output -Value “Ending VM – $snapdata.vm”
            Log -Path $Output -Value “*************************************************”
           
            }
            else
            {
                Write-Host “Not sending email for $($snapdata) for $($snapdata.VM)”
                Log -Path $OutputErrors -Value ”    Not sending email for VMName : $($snapdata.VM) : SnapData : $($snap)”
            }
        }
    }
   
}

$SnapSpaceUsed = [Math]::Round($SnapSpaceUsed,2)
Log -path $Output -Value “Number of snaps notified via email : $($SnapCount)  `r`nAmount of spaced the snapshots consumed – $($SnapSpaceUsed) GB”

Disconnect-VIServer -Server $vCenterServer -Force -Confirm:$false
$EndDate = Get-Date
Log -Path $Output -Value “Ending process as $($Cred.Username) connecting to $($vCenterServer) at $($EndDate)”

Using CimCmdlets to connect to CIM provider with Powershell and VMware

I needed to retrieve hardware status on memory DIMM’s and used PowerCLI, Powershell to retrieve the data.  Note the script assumes you have a text file list of servers.

#Reference articles
#https://communities.vmware.com/thread/446593
#http://www.virtu-al.net/2012/10/29/using-powershell-v3-0-cim-cmdlets-with-vmware-esxi-hosts/
#http://technet.microsoft.com/en-us/library/jj553783.aspx
#http://www.powertheshell.com/additional-cim-cmdlets-for-download/
#http://blogs.msdn.com/b/powershell/archive/2012/08/24/introduction-to-cim-cmdlets.aspx
#Import-Module : The specified module ‘CimCmdlets’ was not loaded because no valid module file was found in any module directory.

#$Server = “esxiServer1″
#$HostUsername = “root”
#$HostUsername2=Get-Credential
#$CIOpt = New-CimSessionOption -SkipCACheck -SkipCNCheck -SkipRevocationCheck -Encoding Utf8 -UseSsl
#$Session = New-CimSession -Authentication Basic -Credential $HostUsername2 -ComputerName $Ipaddress -port 443 -SessionOption $CIOpt
#$Result = Get-CimInstance -CimSession $Session -ClassName CIM_Chip | where {$_.CreationClassName -eq “OMC_PhysicalMemory” } | Select Caption,DataWidth,FormFactor,MaxMemorySpeed,@{N=”CapacityGB”;E={[math]::Round($_.Capacity/1GB,0)}}

Import-module CimCmdlets

#$HostUsername = “root”
$HostUsername=Get-Credential

$serverlist=get-content -path ServerList.txt
foreach($server in $serverlist)
{
    $CIOpt = New-CimSessionOption -SkipCACheck -SkipCNCheck -SkipRevocationCheck -Encoding Utf8 -UseSsl
    $Session = New-CimSession -Authentication Basic -Credential $HostUsername -ComputerName $server -port 443 -SessionOption $CIOpt
    $Result = Get-CimInstance -CimSession $Session -ClassName CIM_Chip | where {$_.CreationClassName -eq “OMC_PhysicalMemory” } | Select Caption,DataWidth,FormFactor,MaxMemorySpeed,@{N=”CapacityGB”;E={[math]::Round($_.Capacity/1GB,0)}}

    foreach(  in $Result)
    {
        Write-Host $DIMM
    }
}

A new chapter begins virtualization!

I took a position working on VMware recently, I hope to share basic articles I’ve found useful and some personal experiences.  The first thing like any geek, you need to setup the environment to learn how things tick!

With VMware workstation, you can actually host an ESXi server within a guest (who knew!).  I don’t recommend for production, although for learning how things work or getting certification, it’s perfect. 

Nested virtualization (VMware workstation acting as the hypervisor) is sweet.  You’ll need a beefy laptop (SSD drive doesn’t hurt) or workstation with decent amount RAM, CPU and some multiple CPU cores.  I picked up a desktop with 10 GB of RAM, 6 core processor, 1 TB hard disk. 

 

I setup, definitely was easy, there are plenty of articles on the web doing this same thing.

  • Two ESXi servers
  • One domain controller
  • One vCenter server

 

Community

Get a account at https://my.vmware.com/web/vmware/login.   This includes setting up access to the community forums.  

Another thing I started doing was TwinBox with the following search syntax

#esxi OR #esx OR #vsphere OR #vmware OR #VMware OR #vcloud OR #vmwareview OR #vmwaretam

This pulls down some great information from Twitter.  

Enough for now!  Lots to share, and learn.  Take care.

Steve

System Center and Windows 2012 R2 notes

I got a new shiny machine at home with lots of RAM, Disk space and six cores.  This allowed me to setup the following environment

  • Two host machines running windows 2012 R2 with hyper-v
  • 1 domain controller
  • 1 Server running System Center 2012 R2 Orchestrator
  • 1 Server running System Center 2012 R2 operations manager
  • 1 Server running System Center 2012 R2 configuration manager

 

I downloaded the evaluations from MSDN and evaluation center. 

OS
http://technet.microsoft.com/en-us/evalcenter/dn205286.aspx

SCCM
http://technet.microsoft.com/en-US/evalcenter/dn205297

I downloaded Orchestrator and SCOM from MSDN

For the most part, everything installed cleanly.  A few to-do’s I have yet to confirm and figure out

  • Windows firewall being enabled
  • SQL RM0 Error when installing SCCM.  I found the sqlclini.msi was zero byte file.  I downloaded an SCCM 2012 SP1 version.  Once I copied the \\server1$\Apps\SC2012_R2_PREVIEW_SCCM_SCEP\SMSSETUP\BIN\X64\sqlncli.msi, SCCM installed cleanly. 
  • I’ve also ran into a couple issues where the default gateway wouldn’t set, one on my domain controller.  After I ran route delete 0.0.0.0 and set it manually a couple times, things worked. 

 

I’m in the process of adding SCVMM 2012 R2 to another server.  I have to P2V my one host, which is running windows 2012 w/SP1.  This will allow me to learn the P2V and also update my one host to Server 2012 R2.  I tried to allow live replication between my one host running 2012 SP1 and 2012 R2.  I get an error.  I’m not a VM guru, so this hopefully learn a bit more about SCVMM, App Controller

Other goals…

  • Learn OSD
  • Live Replication
  • P2V
  • SCCM Application module
  • APM management pack

 

Stay tuned for more blog posts.  Oh btw, I’ll be tinkering with IIS 8.5 and the new logging features

Happy Geeking,

Steve Schofield

Microsoft MVP – IIS

Adventure with OEM desktop pre-staged win 8

Oh the stories I could talk about regarding win 8 pre-loaded on a OEM box.  A few weeks back I picked up a nice desktop (refurb) for under $500.  It’s a 1.5 TB HD, 10 GB ram, 6 core processor.  Besides this being an awesome box with lots of goodies, I can’t believe the price.  Anywho, the reason I like to have such a decent box is play with software, usually the latest and greatest. Any geek usually has a little rouge setup in their house to test things like beta releases or do other crazy stuff they can’t or won’t do in a hosting or enterprise setting. 

When my box arrived, I was pretty geeked.  Being a lifelong server based IT geek, the first thing was to get rid of win8…..or so I thought.  I popped the disk into the drive, booted up, and I got this error….”

“The product key entered does not match any of the Windows images available for installation. Enter a different product key”

I’ve been out of the server OS build business a while, so I searched around and found on new win8 OEM boxes, the license key is embedded to the firmware…smart I’d say.  The down side, there is a particular order checking for the license key.  In my case, using a DVD was something I’ve done in the past on other machines.  Guess, MS wanted to make it a little harder.  Who knows! 

The end result I packed the machine up and set on the shelf for three weeks while I traveled.  It seemed to come down to the point I needed to build an unattended install to get my Server OS to boot to the DVD and look for the license key, bypassing the BIOS lookup.  The unattended install could use DISM or imageX.  Being rusty at building an unattended install, all I wanted to do was load a server OS like I’ve done in the past using a DVD.  I guess this machine wasn’t meant for win 2012 RTM. 

Windows Server 2012 R2 to the rescue, I think.  The Beta version came out when I got back from traveling, I downloaded the iso and was able to get past the activation error.  I went through the BIOS and made sure the legacy boot was enabled, secure boot was disabled.  then I was able to install.  There was some other option in the bios about enter keys.  All I know, if this had not of worked, a flavor of linux would have went on there along with virtual box  or some other virtual hypervisor.   MS, I hope you don’t continue to make things harder for a long time follower.  Luckily, IIS 8.5 had some new features I wanted to try out!  I guess this is a bit of a rant, but overall, the machine is online and I can start to use it.

Cheers and happy geeking!

Steve Schofield
Microsoft MVP – IIS

Just another IISLogs.com site