Pregunta

Estoy usando el siguiente script PowerShell con la esperanza de identificar las aplicaciones de servicio iniciado por parte del servidor.

Control de detección Los resultados muestran algo inesperado.Por ejemplo, sé que el conector de Lotus Notes se detiene en todos los servidores en mi granja, pero el script lo devuelve.

¿Para qué otras propiedades adicionales debo probar para asegurarme de que estoy viendo los mismos resultados exactamente que se muestran en la página Central Admin "Administrar servicios en servidores"?

[System.Collections.ArrayList]$ReportInfo = New-Object System.Collections.ArrayList($null)


$servers = (get-spfarm).servers
foreach ($server in $servers)
{


    foreach($service in $server.serviceinstances)
    {
        if($service.TypeName -eq "Lotus Notes Connector"){
            Write-Host stop;
        }

        if ($service.status = "Online")
        {
            Write-Host "Server" $server.Name "`tService: " $service.TypeName;

            $servicInfo = @{}
            $servicInfo.Server = $service.Server.Name;
            $servicInfo.Service = $service.TypeName;

            $ReportInfo.Add((New-Object PSObject -Property $servicInfo))>$null;
        }
    }
}

Write-Host "Exporting CSV"

$ReportInfo | Export-Csv  "Services.csv" -NoTypeInformation -Encoding UTF8 -Delimiter '|'

¿Fue útil?

Solución

Qué está mal con simplemente usar

Get-SPServiceInstance | select typename, status, server | Export-Csv test.csv

Para obtener los datos?

Otros consejos

Cuando use PowerShell para obtener las instancias de servicio, todos parecen volver en línea, como lo describe.Sin embargo, si lo hacemos en un método C #, vuelve correctamente.Aquí está lo que hice para que regresen correctamente:

$Assem = ( 
    "Microsoft.SharePoint, Version=14.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c" 
    ) 

$Source = @" 
using Microsoft.SharePoint.Administration; 
using Microsoft.SharePoint; 
using System.Collections.Generic;
using System; 

namespace ReportingStuff 
{ 
    public static class Servers  
    { 
        public static List<SPServiceInstance> GetInstances() 
        { 
            List<SPServiceInstance> items = new List<SPServiceInstance>();

            foreach (SPServer server in SPFarm.Local.Servers)
            {
                foreach (SPServiceInstance instance in server.ServiceInstances)
                {
                    if ((!instance.SystemService && !(instance.GetType().FullName.Contains("SPAdministrationServiceInstance"))) && (!(instance is SPTimerServiceInstance) && (server.ServiceInstances.GetValue<SPTimerServiceInstance>() != null)))
                        items.Add(instance);
                }
            }

            return items;
        } 
    } 
} 
"@ 

Add-Type -ReferencedAssemblies $Assem -TypeDefinition $Source -Language CSharp  

$output = [ReportingStuff.Servers]::GetInstances()
Write-Output $output

Puede usar el método para obtener su colección de instancias y luego realizar su filtrado, salida, etc.

Licenciado bajo: CC-BY-SA con atribución
scroll top