private void CheckRequiredServicesAndAppPool(ADPowerShellVirtualDirectory psVdir)
 {
     this.CheckServices(this.requiredCommonServices, psVdir);
     if (string.Compare(psVdir.Name, "PowerShell (Default Web Site)", true) == 0)
     {
         this.CheckAppPool("MSExchangePowerShellAppPool");
         return;
     }
     if (string.Compare(psVdir.Name, "PowerShell-LiveID (Default Web Site)", true) == 0)
     {
         this.CheckAppPool("MSExchangePowerShellLiveIDAppPool");
         this.CheckServices(this.requiredPowershellLiveIdServices, psVdir);
     }
 }
 private void CheckServices(string[] requiredServices, ADPowerShellVirtualDirectory psVdir)
 {
     foreach (string text in requiredServices)
     {
         if (ManageServiceBase.GetServiceStatus(text) != ServiceControllerStatus.Running)
         {
             ExManagementApplicationLogger.LogEvent(ManagementEventLogConstants.Tuple_RequiredServiceNotRunning, new string[]
             {
                 psVdir.Name,
                 text
             });
             base.WriteVerbose(Strings.CasHealthPowerShellServiceNotRunning(psVdir.Name, text));
             base.TraceInfo(Strings.CasHealthPowerShellServiceNotRunning(psVdir.Name, text));
         }
     }
 }
 private void ProcessMetabaseProperties(ADPowerShellVirtualDirectory virtualDirectory)
 {
     try
     {
         using (DirectoryEntry directoryEntry = IisUtility.CreateIISDirectoryEntry(virtualDirectory.MetabasePath, new Task.TaskErrorLoggingReThrowDelegate(this.WriteError), virtualDirectory.Identity))
         {
             virtualDirectory.BasicAuthentication       = new bool?(IisUtility.CheckForAuthenticationMethod(directoryEntry, AuthenticationMethodFlags.Basic));
             virtualDirectory.DigestAuthentication      = new bool?(IisUtility.CheckForAuthenticationMethod(directoryEntry, AuthenticationMethodFlags.Digest));
             virtualDirectory.WindowsAuthentication     = new bool?(IisUtility.CheckForAuthenticationMethod(directoryEntry, AuthenticationMethodFlags.Ntlm));
             virtualDirectory.CertificateAuthentication = new bool?(IisUtility.CheckForAuthenticationMethod(directoryEntry, AuthenticationMethodFlags.Certificate));
             virtualDirectory.LiveIdBasicAuthentication = new bool?(virtualDirectory.InternalAuthenticationMethods.Contains(AuthenticationMethod.LiveIdBasic));
             virtualDirectory.WSSecurityAuthentication  = new bool?(virtualDirectory.InternalAuthenticationMethods.Contains(AuthenticationMethod.WSSecurity) && IisUtility.CheckForAuthenticationMethod(directoryEntry, AuthenticationMethodFlags.WSSecurity));
             virtualDirectory.ResetChangeTracking();
         }
     }
     catch (Exception ex)
     {
         base.WriteErrorAndMonitoringEvent(new CannotPopulateMetabaseInformationException(virtualDirectory.Name, ex.Message, ex), (ErrorCategory)1001, null, 1001, "MSExchange Monitoring PowerShellConnectivity Internal", true);
     }
 }
        protected override IEnumerable <ExchangeVirtualDirectory> GetVirtualDirectories(ADObjectId serverId, QueryFilter filter)
        {
            List <ExchangeVirtualDirectory> list = new List <ExchangeVirtualDirectory>();
            QueryFilter queryFilter = new OrFilter(new QueryFilter[]
            {
                new ComparisonFilter(ComparisonOperator.Equal, ADObjectSchema.Name, "PowerShell (Default Web Site)"),
                new ComparisonFilter(ComparisonOperator.Equal, ADObjectSchema.Name, "PowerShell-LiveID (Default Web Site)")
            });

            filter = new AndFilter(new QueryFilter[]
            {
                filter,
                queryFilter
            });
            foreach (ExchangeVirtualDirectory exchangeVirtualDirectory in base.GetVirtualDirectories <ADPowerShellVirtualDirectory>(serverId, filter))
            {
                ADPowerShellVirtualDirectory adpowerShellVirtualDirectory = (ADPowerShellVirtualDirectory)exchangeVirtualDirectory;
                this.ProcessMetabaseProperties(adpowerShellVirtualDirectory);
                list.Add(adpowerShellVirtualDirectory);
                base.TraceInfo("Virtual Directory " + adpowerShellVirtualDirectory.DistinguishedName.ToString() + " found in server " + serverId.DistinguishedName.ToString());
            }
            return(list);
        }
        protected override List <CasTransactionOutcome> ExecuteTests(TestCasConnectivity.TestCasConnectivityRunInstance instance)
        {
            ExDateTime now = ExDateTime.Now;

            TaskLogger.LogEnter();
            base.WriteVerbose(Strings.CasHealthScenarioLogon);
            if (base.TestType == OwaConnectivityTestType.External && !this.ValidateExternalTest(instance))
            {
                instance.Result.Complete();
                return(null);
            }
            LocalizedString localizedString = LocalizedString.Empty;
            Uri             uri;

            if (base.Fields.IsModified("ConnectionUri"))
            {
                uri             = this.ConnectionUri;
                localizedString = Strings.CasHealthPowerShellConnectionUri(uri.ToString(), "user supplied Uri");
            }
            else if (base.TestType == OwaConnectivityTestType.External)
            {
                uri             = instance.VirtualDirectory.ExternalUrl;
                localizedString = Strings.CasHealthPowerShellConnectionUri(uri.ToString(), "Virtual Directory External Uri");
            }
            else
            {
                uri             = instance.VirtualDirectory.InternalUrl;
                localizedString = Strings.CasHealthPowerShellConnectionUri(uri.ToString(), "Virtual Directory Internal Uri");
            }
            base.TraceInfo(localizedString);
            base.WriteVerbose(localizedString);
            ADPowerShellVirtualDirectory adpowerShellVirtualDirectory = instance.VirtualDirectory as ADPowerShellVirtualDirectory;

            if (adpowerShellVirtualDirectory != null)
            {
                base.TraceInfo(Strings.CasHealthPowerShellConnectionVirtualDirectory(adpowerShellVirtualDirectory.Name));
                base.WriteVerbose(Strings.CasHealthPowerShellConnectionVirtualDirectory(adpowerShellVirtualDirectory.Name));
            }
            if (uri == null)
            {
                CasTransactionOutcome casTransactionOutcome = this.BuildOutcome(Strings.CasHealthOwaLogonScenarioName, null, instance);
                base.TraceInfo("No External or Internal Url found for testing");
                casTransactionOutcome.Update(CasTransactionResultEnum.Failure, (base.TestType == OwaConnectivityTestType.External) ? Strings.CasHealthOwaNoExternalUrl : Strings.CasHealthOwaNoInternalUrl);
                instance.Outcomes.Enqueue(casTransactionOutcome);
                instance.Result.Outcomes.Add(casTransactionOutcome);
                base.WriteErrorAndMonitoringEvent(new LocalizedException((base.TestType == OwaConnectivityTestType.External) ? Strings.CasHealthOwaNoExternalUrl : Strings.CasHealthOwaNoInternalUrl), (ErrorCategory)1001, null, 1010, (base.TestType == OwaConnectivityTestType.External) ? "MSExchange Monitoring PowerShellConnectivity External" : "MSExchange Monitoring PowerShellConnectivity Internal", false);
                base.WriteObject(casTransactionOutcome);
            }
            else
            {
                CasTransactionOutcome casTransactionOutcome2 = this.BuildOutcome(Strings.CasHealthScenarioLogon, Strings.CasHealthPowerShellRemoteConnectionScenario(uri.ToString(), this.Authentication.ToString()), instance);
                PSCredential          credential;
                if (base.ParameterSetName == "URL")
                {
                    credential      = this.TestCredential;
                    localizedString = Strings.CasHealthPowerShellConnectionUserCredential(this.TestCredential.UserName, "user supplied");
                }
                else
                {
                    credential      = new PSCredential(instance.credentials.UserName, instance.credentials.Password.ConvertToSecureString());
                    localizedString = Strings.CasHealthPowerShellConnectionUserCredential(instance.credentials.UserName, "default for test user");
                }
                base.TraceInfo(localizedString);
                base.WriteVerbose(localizedString);
                WSManConnectionInfo wsmanConnectionInfo;
                if (base.TestType == OwaConnectivityTestType.External)
                {
                    wsmanConnectionInfo = new WSManConnectionInfo(uri, "http://schemas.microsoft.com/powershell/Microsoft.Exchange", this.certThumbprint);
                }
                else
                {
                    wsmanConnectionInfo = new WSManConnectionInfo(uri, "http://schemas.microsoft.com/powershell/Microsoft.Exchange", credential);
                }
                if (base.Fields.IsModified("Authentication"))
                {
                    wsmanConnectionInfo.AuthenticationMechanism = this.Authentication;
                }
                else if (adpowerShellVirtualDirectory != null && adpowerShellVirtualDirectory.LiveIdBasicAuthentication != null && adpowerShellVirtualDirectory.LiveIdBasicAuthentication.Value)
                {
                    wsmanConnectionInfo.AuthenticationMechanism = AuthenticationMechanism.Basic;
                }
                base.TraceInfo(Strings.CasHealthPowerShellConnectionAuthenticationType(wsmanConnectionInfo.AuthenticationMechanism.ToString()));
                base.WriteVerbose(Strings.CasHealthPowerShellConnectionAuthenticationType(wsmanConnectionInfo.AuthenticationMechanism.ToString()));
                if (base.TrustAnySSLCertificate)
                {
                    wsmanConnectionInfo.SkipCACheck         = true;
                    wsmanConnectionInfo.SkipCNCheck         = true;
                    wsmanConnectionInfo.SkipRevocationCheck = true;
                }
                using (Runspace runspace = RunspaceFactory.CreateRunspace(TestRemotePowerShellConnectivity.psHost, wsmanConnectionInfo))
                {
                    try
                    {
                        runspace.Open();
                        base.WriteVerbose(Strings.CasHealtRemotePowerShellOpenRunspaceSucceeded);
                        base.TraceInfo(Strings.CasHealtRemotePowerShellOpenRunspaceSucceeded);
                        runspace.Close();
                        base.TraceInfo(Strings.CasHealtRemotePowerShellCloseRunspaceSucceeded);
                        base.WriteVerbose(Strings.CasHealtRemotePowerShellCloseRunspaceSucceeded);
                        casTransactionOutcome2.Update(CasTransactionResultEnum.Success, base.ComputeLatency(now), null);
                    }
                    catch (Exception ex)
                    {
                        casTransactionOutcome2.Update(CasTransactionResultEnum.Failure, base.ComputeLatency(now), ex.Message);
                        instance.Outcomes.Enqueue(casTransactionOutcome2);
                        instance.Result.Outcomes.Add(casTransactionOutcome2);
                        try
                        {
                            string hostName = Dns.GetHostName();
                            if (adpowerShellVirtualDirectory != null && string.Compare(this.casToTest.Fqdn, Dns.GetHostEntry(hostName).HostName, true) == 0)
                            {
                                this.CheckRequiredServicesAndAppPool(adpowerShellVirtualDirectory);
                            }
                        }
                        catch (Exception)
                        {
                        }
                        base.WriteErrorAndMonitoringEvent(new LocalizedException(Strings.CasHealthPowerShellLogonFailed((adpowerShellVirtualDirectory != null) ? adpowerShellVirtualDirectory.Name : this.ConnectionUri.ToString(), ex.Message)), (ErrorCategory)1001, null, 1001, (base.TestType == OwaConnectivityTestType.External) ? "MSExchange Monitoring PowerShellConnectivity External" : "MSExchange Monitoring PowerShellConnectivity Internal", false);
                    }
                    finally
                    {
                        base.WriteObject(casTransactionOutcome2);
                    }
                }
                instance.Result.Complete();
            }
            return(null);
        }