Dela via


Kontrollera verktygets synlighet i en lösning

Det kan finnas tillfällen då du vill undanta (eller dölja) tillägget eller verktyget från listan över tillgängliga verktyg. Om verktyget till exempel endast riktar sig till Windows Server 2016 (inte äldre versioner) kanske du inte vill att en användare som ansluter till en Windows Server 2012 R2-server ska se verktyget alls. (Föreställ dig användarupplevelsen – de klickar på den, väntar på att verktyget ska läsas in, bara för att få ett meddelande om att dess funktioner inte är tillgängliga för anslutningen.) Du kan definiera när du ska visa (eller dölja) din funktion i verktygets manifest.json-fil.

Alternativ för att bestämma när ett verktyg ska visas

Det finns tre olika alternativ som du kan använda för att avgöra om verktyget ska visas och vara tillgängligt för en specifik server eller klusteranslutning.

  • localhost
  • inventering (en matris med egenskaper)
  • manuskript

LocalHost

Egenskapen localHost för villkorsobjektet innehåller ett booleskt värde som kan utvärderas för att härleda om den anslutande noden är localHost (samma dator som Windows Admin Center är installerat på) eller inte. Genom att skicka ett värde till egenskapen anger du när (villkoret) ska visa verktyget. Om du till exempel bara vill att verktyget ska visas när användaren faktiskt ansluter till lokalvärden, konfigurerar du det så här:

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

Alternativt, om du bara vill att verktyget ska visas när den anslutande noden inte är localhost:

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

Så här ser konfigurationsinställningarna ut för att bara visa ett verktyg när den anslutande noden inte är localhost:

"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
        }
        ]
    }
    ]
}

Inventeringsegenskaper

SDK:t innehåller en fördefinierad uppsättning lageregenskaper som du kan använda för att skapa villkor för att avgöra när verktyget ska vara tillgängligt eller inte. Det finns nio olika egenskaper i matrisen "inventory":

Egenskapsnamn Förväntad värdetyp
datorproducent sträng
operatingSystemSKU nummer
operativsystemversion version_string (t.ex. "10.1.*")
produkttyp nummer
klusterFQDN sträng
ärHyperVRollInstallerad booleskt
isHyperVPowershellInstallerad booleskt
isManagementToolsAvailable booleskt
isWmfInstalled booleskt

Varje objekt i inventeringsmatrisen måste överensstämma med följande json-struktur:

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

Operatorvärden

Operatör Beskrivning
GT mer än
ge större än eller lika med
lt mindre än
Le mindre än eller lika med
Eq lika med
Ne inte lika med
är kontrollera om ett värde är sant
inte kontrollera om ett värde är falskt
innehåller objektet finns i en sträng
inte innehåller objektet finns inte i en sträng

Datatyper

Tillgängliga alternativ för egenskapen "typ":

Typ Beskrivning
version ett versionsnummer (t.ex. 10.1.*)
nummer ett numeriskt värde
sträng ett strängvärde
booleskt sant eller falskt

Värdetyper

Egenskapen "value" accepterar följande typer:

  • sträng
  • nummer
  • booleskt

En korrekt utformad inventeringsvillkoruppsättning ser ut så här:

"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

Slutligen kan du köra ett anpassat PowerShell-skript för att identifiera nodens tillgänglighet och tillstånd. Alla skript måste returnera ett objekt med följande struktur:

@{
    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'; };
}

Tillståndsegenskapen är det viktigaste värdet som styr beslutet att visa eller dölja själva tillägget i verktygslistan. De tillåtna värdena är:

Värde Beskrivning
Tillgängligt Tillägget ska visas i verktygslistan.
Stöds inte Tillägget ska inte visas i verktygslistan.
InteKonfigurerad Det här är ett platshållarvärde för framtida arbete som uppmanar användaren att konfigurera ytterligare innan verktyget görs tillgängligt. För närvarande resulterar det här värdet i att verktyget visas och är den funktionella motsvarigheten till "Tillgänglig".

Till exempel, om vi vill att ett verktyg endast ska läsas in när fjärrservern har BitLocker installerat, ser skriptet ut så här:

$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

En startpunktskonfiguration med skriptalternativet ser ut så här:

"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"
        }
        ]
    }
    ]
}

Stöd för flera kravuppsättningar

Du kan använda mer än en uppsättning krav för att avgöra när verktyget ska visas genom att definiera flera "krav"-block.

Om du till exempel vill visa verktyget om "scenario A" ELLER "scenario B" är sant, definierar du två kravblock; om något av dessa är sant (dvs. alla villkor inom ett kravblock är uppfyllda) visas verktyget.

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

Stödintervall för förhållanden

Du kan också definiera ett antal villkor genom att definiera flera "villkorsblock" med samma egenskap, men med olika operatorer.

När samma egenskap definieras med olika operatorer visas verktyget så länge värdet är mellan de två villkoren.

Det här verktyget visas till exempel så länge operativsystemet är en version mellan 6.3.0 och 10.0.0:

"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"
                }
            }
        }
        ]
    }
    ]
}