Powershellで開始されたサービスアプリを識別する
-
10-12-2019 - |
質問
私はサーバーによって開始されたサービスアプリケーションを識別することを期待して、次のPowershellスクリプトを使用しています。
スポットチェック結果は予想外の何かを示しています。たとえば、ファーム内のすべてのサーバーでLotus Notes Connectorが停止していることは知っていますが、スクリプトはそれを返します。
中央管理者の「サーバー上のサービスの管理」ページに表示されているのとまったく同じ結果が表示されることを確認するには、他にどのような追加のプロパテ
[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 '|'
解決
単に使用することの何が悪いのですか
Get-SPServiceInstance | select typename, status, server | Export-Csv test.csv
データを取得するには?
他のヒント
PowerShellを使用してサービスインスタンスを取得するときは、説明すると、それらがすべてオンラインに戻ってきたようです。ただし、C#メソッドで行うと正しく戻ってきます。これが私がそれらを正しく戻ってくるためにしたことです:
$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
.
メソッドを使用して、インスタンスのコレクションを取得してから、フィルタリング、出力などを実行できます。
所属していません sharepoint.stackexchange