Steuern der Sichtbarkeit Ihres Tools in einer Lösung

Gilt für: Windows Admin Center, Windows Admin Center-Vorschau

Möglicherweise möchten Sie Ihre Erweiterung oder Ihr Tool aus der Liste der verfügbaren Tools ausschließen (oder ausblenden). Wenn Ihr Tool beispielsweise nur auf Windows Server 2016 (keine älteren Versionen) zielt, möchten Sie möglicherweise nicht, dass ein Benutzer, der eine Verbindung mit einem Windows Server 2012 R2-Server herstellt, Ihr Tool überhaupt sehen kann. (Imagine die Benutzeroberfläche: Sie klicken darauf, warten, bis das Tool geladen wird, nur um eine Meldung zu erhalten, dass die Features für ihre Verbindung nicht verfügbar sind.) Sie können definieren, wann Ihr Feature in der Datei manifest.json des Tools angezeigt (oder ausblendet) werden soll.

Optionen für die Entscheidung, wann ein Tool angezeigt werden soll

Es gibt drei verschiedene Optionen, mit derenHilfe Sie bestimmen können, ob Ihr Tool für eine bestimmte Server- oder Clusterverbindung angezeigt und verfügbar sein soll.

  • Localhost
  • inventory (ein Array von Eigenschaften)
  • script

Localhost

Die localHost-Eigenschaft des Conditions-Objekts enthält einen booleschen Wert, der ausgewertet werden kann, um daraus zu schließen, ob der Verbindungsknoten localHost ist (derselbe Computer, auf dem Windows Admin Center installiert ist) oder nicht. Durch Übergeben eines Werts an die -Eigenschaft geben Sie an, wann (die Bedingung) das Tool angezeigt werden soll. Wenn das Tool beispielsweise nur angezeigt werden soll, wenn der Benutzer tatsächlich eine Verbindung mit dem lokalen Host herstellen soll, richten Sie es wie hier gezeigt ein:

"conditions": [
{
    "localhost": true
}]

Wenn Sie möchten, dass Ihr Tool nur angezeigt wird, wenn der Verbindungsknoten nicht localhost ist, können Sie dies auch:

"conditions": [
{
    "localhost": false
}]

Die Konfigurationseinstellungen sehen so aus, dass nur dann ein Tool angezeigt wird, wenn der Verbindungsknoten nicht localhost ist:

"entryPoints": [
{
    "entryPointType": "tool",
    "name": "main",
    "urlName": "processes",
    "displayName": "resources:strings:displayName",
    "description": "resources:strings:description",
    "icon": "sme-icon:icon-win-serverProcesses",
    "path": "",
    "requirements": [
    {
        "solutionIds": [
        "msft.sme.server-manager!windowsClients"
        ],
        "connectionTypes": [
        "msft.sme.connection-type.windows-client"
        ],
        "conditions": [
        {
            "localhost": true
        }
        ]
    }
    ]
}

Bestandseigenschaften

Das SDK enthält einen vorab zusammengestellten Satz von Bestandseigenschaften, mit denen Sie Bedingungen erstellen können, um zu bestimmen, wann Ihr Tool verfügbar sein soll. Das Array "inventory" enthält neun verschiedene Eigenschaften:

Eigenschaftenname Erwarteter Werttyp
computerManufacturer Zeichenfolge
operatingSystemSKU number
operatingSystemVersion version_string (z.B. "10.1.*")
productType number
clusterFqdn Zeichenfolge
isHyperVRoleInstalled boolean
isHyperVPowershellInstalled boolean
isManagementToolsAvailable boolean
isWmfInstalled boolean

Jedes Objekt im Inventurarray muss der folgenden JSON-Struktur entsprechen:

"<property name>": {
    "type": "<expected type>",
    "operator": "<defined operator to use>",
    "value": "<expected value to evaluate using the operator>"
}

Operatorwerte

Operator Beschreibung
gt Größer als
ge Größer oder gleich
lt Kleiner als
le Kleiner oder gleich
eq gleich
ne not equal to (ungleich)
is Überprüfen, ob ein Wert true ist
not Überprüfen, ob ein Wert FALSE ist
contains Element in einer Zeichenfolge vorhanden
notContains Item ist in einer Zeichenfolge nicht vorhanden

Datentypen

Verfügbare Optionen für die Type-Eigenschaft:

type BESCHREIBUNG
version eine Versionsnummer (z.B. 10.1.*)
number einen numerischen Wert
Zeichenfolge ein Zeichenfolgenwert
boolean true oder false

Werttypen

Die Value-Eigenschaft akzeptiert die folgenden Typen:

  • Zeichenfolge
  • Zahl
  • boolean

Ein ordnungsgemäß gebildeter Inventurbedingungssatz sieht wie hier aus:

"entryPoints": [
{
    "entryPointType": "tool",
    "name": "main",
    "urlName": "processes",
    "displayName": "resources:strings:displayName",
    "description": "resources:strings:description",
    "icon": "sme-icon:icon-win-serverProcesses",
    "path": "",
    "requirements": [
    {
        "solutionIds": [
        "msft.sme.server-manager!servers"
        ],
        "connectionTypes": [
        "msft.sme.connection-type.server"
        ],
        "conditions": [
        {
            "inventory": {
            "operatingSystemVersion": {
                "type": "version",
                "operator": "gt",
                "value": "6.3"
            },
            "operatingSystemSKU": {
                "type": "number",
                "operator": "eq",
                "value": "8"
            }
            }
        }
        ]
    }
    ]
}

Skript

Schließlich können Sie ein benutzerdefiniertes PowerShell-Skript ausführen, um die Verfügbarkeit und den Status des Knotens zu identifizieren. Alle Skripts müssen ein Objekt mit der folgenden Struktur zurückgeben:

@{
    State = 'Available' | 'NotSupported' | 'NotConfigured';
    Message = '<Message to explain the reason of state such as not supported and not configured.>';
    Properties =
        @{ Name = 'Prop1'; Value = 'prop1 data'; Type = 'string' },
        @{Name='Prop2'; Value = 12345678; Type='number'; };
}

Die State-Eigenschaft ist der wichtige Wert, der die Entscheidung zum Ein- oder Ausblenden Ihrer Erweiterung in der Toolsliste kontrolliert. Zulässige Werte sind:

Wert BESCHREIBUNG
Verfügbar Die Erweiterung sollte in der Liste der Tools angezeigt werden.
NotSupported Die Erweiterung sollte nicht in der Liste der Tools angezeigt werden.
NotConfigured Dies ist ein Platzhalterwert für zukünftige Arbeit, der den Benutzer zur Eingabe zusätzlicher Konfigurationen auffordern wird, bevor das Tool verfügbar gemacht wird. Derzeit führt dieser Wert dazu, dass das Tool angezeigt wird, und ist das funktionale Äquivalent zu "Verfügbar".

Wenn beispielsweise ein Tool nur geladen werden soll, wenn BitLocker auf dem Remoteserver installiert ist, sieht das Skript wie im folgenden Beispiel aus:

$response = @{
    State = 'NotSupported';
    Message = 'Not executed';
    Properties = @{ Name = 'Prop1'; Value = 'prop1 data'; Type = 'string' },
        @{Name='Prop2'; Value = 12345678; Type='number'; };
}

if (Get-Module -ListAvailable -Name servermanager) {
    Import-module servermanager;
    $isInstalled = (Get-WindowsFeature -name bitlocker).Installed;
    $isGood = $isInstalled;
}

if($isGood) {
    $response.State = 'Available';
    $response.Message = 'Everything should work.';
}

$response

Eine Einstiegspunktkonfiguration mithilfe der Skriptoption sieht wie die folgende aus:

"entryPoints": [
{
    "entryPointType": "tool",
    "name": "main",
    "urlName": "processes",
    "displayName": "resources:strings:displayName",
    "description": "resources:strings:description",
    "icon": "sme-icon:icon-win-serverProcesses",
    "path": "",
    "requirements": [
    {
        "solutionIds": [
        "msft.sme.server-manager!windowsClients"
        ],
        "connectionTypes": [
        "msft.sme.connection-type.windows-client"
        ],
        "conditions": [
        {
            "localhost": true,
            "inventory": {
            "operatingSystemVersion": {
                "type": "version",
                "operator": "eq",
                "value": "10.0.*"
            },
            "operatingSystemSKU": {
                "type": "number",
                "operator": "eq",
                "value": "4"
            }
            },
            "script": "$response = @{ State = 'NotSupported'; Message = 'Not executed'; Properties = @{ Name = 'Prop1'; Value = 'prop1 data'; Type = 'string' }, @{Name='Prop2'; Value = 12345678; Type='number'; }; }; if (Get-Module -ListAvailable -Name servermanager) { Import-module servermanager; $isInstalled = (Get-WindowsFeature -name bitlocker).Installed; $isGood = $isInstalled; }; if($isGood) { $response.State = 'Available'; $response.Message = 'Everything should work.'; }; $response"
        }
        ]
    }
    ]
}

Unterstützen mehrerer Anforderungssätze

Sie können mehrere Anforderungen verwenden, um zu bestimmen, wann Ihr Tool angezeigt werden soll, indem Sie mehrere "Anforderungsblöcke" definieren.

Definieren Sie beispielsweise zwei Anforderungsblöcke, um Ihr Tool anzuzeigen, wenn "Szenario A" ODER "Szenario B" zutrifft. Wenn eines der Beiden true ist (d. h., alle Bedingungen innerhalb eines Anforderungsblocks erfüllt sind), wird das Tool angezeigt.

"entryPoints": [
{
    "requirements": [
    {
        "solutionIds": [
            …"scenario A"…
        ],
        "connectionTypes": [
            …"scenario A"…
        ],
        "conditions": [
            …"scenario A"…
        ]
    },
    {
        "solutionIds": [
            …"scenario B"…
        ],
        "connectionTypes": [
            …"scenario B"…
        ],
        "conditions": [
            …"scenario B"…
        ]
    }
    ]
}

Unterstützende Bedingungsbereiche

Sie können auch einen Bereich von Bedingungen definieren, indem Sie mehrere "Bedingungen"-Blöcke mit derselben Eigenschaft, aber mit unterschiedlichen Operatoren definieren.

Wenn dieselbe Eigenschaft mit unterschiedlichen Operatoren definiert ist, wird das Tool angezeigt, solange der Wert zwischen den beiden Bedingungen liegt.

Beispielsweise wird dieses Tool angezeigt, solange das Betriebssystem eine Version zwischen 6.3.0 und 10.0.0 ist:

"entryPoints": [
{
    "entryPointType": "tool",
    "name": "main",
    "urlName": "processes",
    "displayName": "resources:strings:displayName",
    "description": "resources:strings:description",
    "icon": "sme-icon:icon-win-serverProcesses",
    "path": "",
    "requirements": [
    {
        "solutionIds": [
             "msft.sme.server-manager!servers"
        ],
        "connectionTypes": [
             "msft.sme.connection-type.server"
        ],
        "conditions": [
        {
            "inventory": {
                "operatingSystemVersion": {
                    "type": "version",
                    "operator": "gt",
                    "value": "6.3.0"
                },
            }
        },
        {
            "inventory": {
                "operatingSystemVersion": {
                    "type": "version",
                    "operator": "lt",
                    "value": "10.0.0"
                }
            }
        }
        ]
    }
    ]
}