sábado, 21 de marzo de 2015

explorer.exe and Print Management suddenly stops in a Citrix environment

Hi all!

Some weeks ago I hit my head with a easy but annoying error: When a user opens a explorer.exe or Print Management published application in a Citrix environment, the application suddenly stops/disappear with no error message. After a time troubleshooting, it seems to appear a hidden error message: Server execution failed


In spite of we have two different errors: explorer.exe and Print Management, the error is the same because Print Management application runs explorer.exe with a parameter.

Environment:

Citrix 7.5 running Windows Server 2008 R2.

The problem:

The error appears because Windows Explorer looks for "Personal" folder specified in the registry hive:

HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\User Shell Folders\

If the folder does not exist, fails.


Resolution:

The problem was detected and solved by Microsoft with the KB2444677

If you cannot apply the KB article(restart needed, or others...) you can do two actions:
  1. Change the folder path for an existing
  2. Create the specified folder

Hope it helps!


miércoles, 7 de enero de 2015

[FastToUse] - Find Exchange 2010 AntiSpam filtered e-mails.

What?
When you need to check if an email is filtered by Exchange 2010 AntiSpam filters, it use to be a tedious task. This will not be a problem if you use a simple script to find the filtered e-mail by domain o full-e-mail address.

Fast Instructions:
  • Copy & Paste the following PowerShell code into a FindSPAMemails.ps1 file.
  • Save the file in a accessible site in order to use it when necessary.
PowerShell:

add-pssnapin Microsoft.Exchange.Management.PowerShell.E2010; . 'C:\Program Files\Microsoft\Exchange Server\V14\bin\Exchange.ps1'
cls
while (1 -eq 1){
                $domini = Read-Host 'Enter the domain name or mail address(i.e: domain.com or mail@domain.com)'
                Write-Host "You entered: " $domini " , starting search..."
                Get-AgentLog | select P1FromAddress,P2FromAddresses,Agent,Action,Reason,ReasonData,Diagnostics,Timestamp | where {$_.Action -ne "AcceptMessage"} | where {$_.P1FromAddress -like "*$domini*"}
                $opcio = Read-Host 'Continue searching? (Y/N), default option -> N'
                while ($ok -ne "ok"){
                               if(($opcio -eq "N") -or ($opcio -eq "n") -or ($opcio -eq "")) {exit}
                               elseif(($opcio -eq "Y") -or ($opcio -eq "y")) {$ok="ok"}
                               else{
                                               $opcio = Read-Host 'Incorrect option, continue searching? (Y/N), default option -> N'
                               }
                }
                $ok=""
}

More Information:

domingo, 14 de diciembre de 2014

[FastToUse] Send mail with Exchange Web Service(EWS) using PowerShell

What?
How to send emails from inside or outside your organization with Exchange 2007/2010/2013/Online using PowerShell.

Fast instructions:
  • First of all you need to download and install the latest Microsoft EWS managed API.
  • After that,
    • Select the right DLL path
    • Replace the username, password, EWS url
    • copy&paste 
    • And run it in PowerShell!
PowerShell Code:

#Import the DLL of Microsoft EWS, choose one
##Version 2.2
Import-module "C:\Program Files\Microsoft\Exchange\Web Services\2.2\Microsoft.Exchange.WebServices.dll"
##For example if your version is 2.1 with x32 it will be
Import-module "C:\Program Files (x86)\Microsoft\Exchange\Web Services\2.1\Microsoft.Exchange.WebServices.dll"


#Create a Service Object and set Exchange 2010_SP2 version.
#If you don't set it, the default one is Exchange 2013
$version = [Microsoft.Exchange.WebServices.Data.ExchangeVersion]::Exchange2010_SP2
$service = New-Object Microsoft.Exchange.WebServices.Data.ExchangeService($version)

#Set credentials
$username = "domain\username"
$password = "Your_Password"
$service.Credentials = New-Object Microsoft.Exchange.WebServices.Data.WebCredentials -ArgumentList $username, $password

#EWS URL, if you do not want to use autodiscover
$url = "https://mail.domain.com/EWS/Exchange.asmx"
$service.Url = $url

#Create the Object and send e-mail
$message = New-Object Microsoft.Exchange.WebServices.Data.EmailMessage -ArgumentList $service
$message.From = "mail@domain.com"
$message.ToRecipients.Add('Recipient Name','recipient_1@domain.com')
$message.ToRecipients.Add('Recipient Name','recipient_2@domain.com')
##You can add more recipients, copying the line before
$message.Subject = "This is a test email"
$message.Body = "Message body. Mail from EWS."

#Send email, choose one
##If you want to send it directly
$message.SendAndSaveCopy()
##If you do not want to send it, only to save to drafts and send later
$message.Save()

More information:



Hope it helps!

lunes, 8 de diciembre de 2014

[FastToUse] - Send mail with Exchange Web Service(EWS) using PHP

What?
How to send emails from inside or outside your organization with Exchange 2007/2010/2013/Online using PHP.

Fast instructions:
  • Go to GitHub PHP-EWS and download the libraries
  • Edit the following example and you will be sending e-mails with Exchange in a minutes.
PHP Code:
 <?php  
 //for debugging purpose only, remove in production  
 error_reporting(E_ALL);   
 ini_set( 'display_errors','1');  
 //Load libraries  
 require_once('ExchangeWebServices.php');  
 require_once('NTLMSoapClient.php');  
 require_once('NTLMSoapClient/Exchange.php');  
 require_once('EWS_Exception.php');  
 require_once('EWSType.php');  
 require_once('EWSType/MessageType.php');  
 require_once('EWSType/EmailAddressType.php');  
 require_once('EWSType/BodyType.php');  
 require_once('EWSType/SingleRecipientType.php');  
 require_once('EWSType/CreateItemType.php');  
 require_once('EWSType/NonEmptyArrayOfAllItemsType.php');  
 require_once('EWSType/ItemType.php');  
 class EwsSendEmail  
 {  
      protected function sendEmail()  
      {  
           $server = 'mail.server.com';  
           $username = 'domain\username';  
           $password = '';  
           $ews = new ExchangeWebServices($server, $username, $password);  
           $msg = new EWSType_MessageType();  
           $toAddresses = array();  
           $toAddresses[0] = new EWSType_EmailAddressType();  
           $toAddresses[0]->EmailAddress = 'user@domain.com';  
           $toAddresses[0]->Name = 'Name Surname';  
           $toAddresses[1] = new EWSType_EmailAddressType();  
           $toAddresses[1]->EmailAddress = 'user2@domain.com';  
           $toAddresses[1]->Name = 'Name2 Surname';  
           $msg->ToRecipients = $toAddresses;  
           $fromAddress = new EWSType_EmailAddressType();  
           $fromAddress->EmailAddress = 'mailFrom@domain.com';  
           $fromAddress->Name = 'NameFrom Surname';  
           $msg->From = new EWSType_SingleRecipientType();  
           $msg->From->Mailbox = $fromAddress;  
           $msg->Subject = 'Test missage from PHP code';  
           $msg->Body = new EWSType_BodyType();  
           $msg->Body->BodyType = 'HTML';  
           $msg->Body->_ = '<p style="font-size: 18px; font-weight: bold;">MESSAGE BODY!</p>';  
           $msgRequest = new EWSType_CreateItemType();  
           $msgRequest->Items = new EWSType_NonEmptyArrayOfAllItemsType();  
           $msgRequest->Items->Message = $msg;  
           $msgRequest->MessageDisposition = 'SendAndSaveCopy';  
           $msgRequest->MessageDispositionSpecified = true;  
           $response = $ews->CreateItem($msgRequest);  
           var_dump($response);  
      }  
      function __construct()  
      {  
           $this->sendEmail();  
      }  
 }  
 $page = new EwsSendEmail();  
 ?>  
More information:
Hope it helps!

sábado, 18 de octubre de 2014

[FastToUse] A new series of articles

Hi all,

Sometimes we do not want to read large articles explaining all the detailed information about an issue, code or anything else. We want it fast and running in not much time.

This is the reason of these new series of articles which always will have this structure:

  • [FastToUse] - Tag in the subject
  • What? - A short summary about the article
  • Fast Instructions - The instructions, if needed
  • Code/Bug/... - The core of the article with "the information"
  • More information - Links with detailed information if you want to explore more.
let's go to write!

lunes, 13 de octubre de 2014

Error starting cluster service in a Windows 2008 R2 Cluster

This post born after hours trying to resolve a Cluster issue, and without finding nothing clear in internet!

The problem:
Suddenly the second node of a Windows 2008 R2 Cluster, gets down and there are no way to start it up! The Event Viewer shows the following errors in System log:

Source: Service Control Manager
Event Id:7031
The Cluster Service service terminated unexpectedly. It has done this 1 time(s). The following corrective action will be taken in 60000 milliseconds: Restart Service
Source: Microsoft-Windows-FailoverClustering
Event Id:1069
Cluster resource 'Cluster Disk 1' in clustered service or application 'Cluster group' failed.
Source: Microsoft-Windows-FailoverClustering
Event Id:1573
Node 'node_name' failed to form a cluster. This was because the witness was not accessible. Please ensure that the witness resource is online and available.

Solution:
I tried to restart the server and to stop and start the cluster service with no success.

After that, I checked out the iSCSI configuration in the server and in the SAN, and I found some misconfigurations. After solving it, the problem continues, perhaps this is the origin of the problem, but not all is solved.

My third step is to run cluster service with log using the command:
cluster log /g
You can find the result in %windir%\cluster\reports. I could not see anything useful and went to revise every key of cluster in the regedit configuration at HKLM/Cluster, following some errors found in cluster service log....again no success.

Finally I decide to remove the node from the cluster and rejoin, and SOLVED. Some times its better to start from the end.

To remove a failed node from a cluster:

  1. Run this command from the failed node in elevated Power Shell:
    1. Import-Module FailoverClusters
    2. Clear-clusternode
  2. From the cluster administration MMC > right click on failed server, under nodes > More Actions > Evict
After step 2, you can add the node again into the cluster, and check Event Viewer for additional bugs.

Hope it helps!



sábado, 4 de octubre de 2014

How to uninstall Windows Intune

Easy and FAST!

Run this command with elevated privileges:

wmic product where "name like '%intune%'" call uninstall
If you want to do that by the right way, go to Intune admin console.

viernes, 28 de diciembre de 2012

Error installing Exchange 2010 SP2 Rollup 5v2

I managed with this error in Windows 2008 R2 and Exchange 2010 SP2...

When you try to install this update you can find one or all the following errors in the EventLog or in the Windows Installer Log:

 Microsoft Exchange Server - Update 'Update Rollup 5-v2 for Exchange Server 2010 Service Pack 2 (KB2785908) 14.2.328.10' could not be installed. Error code 1603. Windows Installer can create logs to help troubleshoot issues with installing software packages
DEBUG: Error 2826: Control BottomLine on dialog FatalError extends beyond the boundaries of the dialog to the right by 5 pixels The installer encountered an unexpected error while installing this package. This may indicate a problem with this package. The error code is 2826. The arguments are: FatalError, BottomLine, to the right
msgErrorExchangeAdmin = The user who's currently logged on doesn't have sufficient permissions to install this package. You need at least Exchange Server Administrator permissions on the current computer to complete this task.

Basically we have two different problems:
  1. We have a compatibility problem with one update
    • The incompatible update is: Windows Management Framework 3.0 , in my case, at the end of the name, appears "(beta)".
    • You should uninstall it and reboot the system, then continue with step 2.
  2. We need to run the installer with admin privileges
    • Run the update from a Command Line window executed as Administrator
That's all for me!

If you are installing this Rollup update because you need to solve problems related with Retention Tags, Calendar and Tasks I recommend to visit THIS blog.

Biztalk cofiguration error Nº 1

After tens of BizTalk installations I decided to post a collection of errors found.

The first one it's an easy one!

The error:

While you are in the BizTalk configuration wizard, with BAM configuration, you get this error:

ERROR: Failed to set up BAM database(s).
There was a failure while executing nscontrol.exe. Error:"Microsoft Notification Services Control Utility 9.0.242.0


The Solution:
You need to solve the problem in 2 steps:

  1. Install SP2 of SQL 2005 Notification Services
  2. Copy the DLL to the GAC
    1. Open a CMD console with administrator privileges and run:
C:\Windows\assembly\GAC_MSIL>copy Microsoft.SqlServer.Instapi\9.0.242.0__89845dcd8080cc91 c:\Microsoft.SqlServer.Instapi\9.0.242.0__89845dcd8080cc91\Microsoft.SqlServer.InstApi.dll 

C:\gacutil.exe /i Microsoft.SqlServer.InstApi.dll


martes, 3 de abril de 2012

Start/Install your OS/Windows directly from VHD in your PC, laptop or server...

If you want to have a test, demo or productive environment without using VirtualPC or VMware Player/Workstation, you can start your machine from VHD only with few and easy steps....

What to do?
  • If you don't have an VHD you can create it using 2 procedures(if you already have it, skip this point)
    • From Disk Management
      • Start Device Manager and Create VHD, select the size and if you want it dynamic or fixed(recommended for best performance) size:
      • Initialize the disk, select MBR and press OK
      • Format Disk(Assign the letter that you want, the system file type and volume label
    • From Command Line(example of 16GB of fixed disk)
    create vdisk file="c:\disk.vhd" maximum=16000 type=fixed

    • Restart your computer with a installation CD of Windows 2008 R2 or Windows 7
    • Start the installation, select Language and select Repair your Computer
    • After the installer searches for other Windows installations, click on the blank area, outside the detected installations and click Next
    • Select Command Prompt
    • And on the command prompt type:
    • diskpart
      select vdisk file="c:\disk.vhd"
      attach vdisk
      list disk
      exit
    • Close the Command Prompt window using the cross button
    • Close the Windows Recovery Option Windows using the cross button
    • Continue with the installation as usual selecting Custom installation
    • Then you can see the VHD disk as another phisical disk....
    ...select it and eNjOy!!!