Oktober 2017
Autor:in des Beitrags
Provectrone
Mitarbeiter
Veröffentlicht am
04.10.2017 von Provectrone
Jetzt Blogbeitrag teilen
Xing LinkedIn Facebook Twitter
Tutorial

Nitro API und Powershell am Script unlockAAAUser

Christoph Biesinger hat ein Script erarbeitet, welches in einer Art Tutorial ein paar Konzepte der Nitro API, Powershell und des Arbeitsprozesses verdeutlich. Das Script „unlockAAAUser.ps1“ entsperrt einen User am NetScaler und fragt vorher die notwendigen Parameter der NetScaler IP, Credentials und des zu entsperrenden Users ab. Im Folgenden wird das Schritt für Schritt erklärt. Das komplette Script findet ihr am Ende des Beitrags.

 

1.)

Um die Nitro API zu verwenden, brauchen wir zuerst die Nitro Bibliothek, welche von jedem NetScaler unter Downloads geladen werden kann. Da wir ein PowerShell-Script schreiben, nehmen wir die Version „NITRO API SDK for C#“. Die im Subordner lib befindlichen Bibliotheken brauchen wir für unser Script.

 

2.)

Der erste Abschnitt des Scripts beinhaltet die Parameterabfrage, weshalb wir mit [CmdletBinding()] das PowerShell Parameter Binding aktivieren. Dadurch übergeben wir die Werte der Parameter direkt an Variablen. Diese legen wir wegen unserem Anwendungsfall als Pflichtfelder fest und definieren ihren Datentyp. Für das Passwort verwenden wir den Datentyp SecureString um die Sicherheit etwas zu erhöhen.

[CmdletBinding()]
param(
[Parameter(Mandatory=$True)][String]$IPAddress,
[Parameter(Mandatory=$True)][String]$Username,
[Parameter(Mandatory=$True)][SecureString]$Password,
[Parameter(Mandatory=$True)][String]$AAAUserName
)

3.)

Als nächstes legen wir eine Funktion Main und das Exception Handling an, dadurch könnten wir den Code später erweitern und haben allgemein sauberen Code.

function Main {
    try {
    } catch {
        $ErrorMessage = $_.Exception.Message
        $FailedItem = $_.Exception.ItemName
        LogWrite "[-] Error while unlocking user! ErrorMessage: $ErrorMessage"
        Break
    }
}
Main

4.)

Nun importieren wir die Nitro API in unser Powershell Script. Da die Nitro Bibliothek und unser Script im gleichen Ordner sind, benötigen wir nur diesen einfachen Befehl.

Add-Type -Path "nitro.dll"

5.)

Im nächsten Abschnitt wandeln wir den Datentyp des Passworts von einem SecureString in einen String um, damit wir diesen zum späteren Anmelden nutzen können. Dafür wandeln wir in einem Zwischenschritt den SecureString in einen Binary String und anschließend in einen String um.

$bstr = [Runtime.InteropServices.Marshal]::SecureStringToBSTR($Password)
$password = [Runtime.InteropServices.Marshal]::PtrToStringAuto($bstr)

6.)

Nachdem wir diese Vorarbeit geleistet haben, melden wir uns am NetScaler an. Dafür definieren wir in der Variablen $nitrosession ein nitro_service Object, welches die IP Adresse des NetScalers beinhaltet. Da das Nitro Protokol die REST API verwendet, ist die Kommunikation per http. Nun können wir das Objekt mit unseren Credentails nutzen um uns am NetScaler anzumelden indem wir die Methode login verwenden. Nach dem Abschluss dieser Zeilen sind wir am NetScaler angemeldet und können Befehle ausführen.

$nitrosession = New-Object com.citrix.netscaler.nitro.service.nitro_service($IPAddress, "http")
$session = $nitrosession.login($Username, $password)

7.)

Wie im vorherigen Punkt bereits angeschnitten, ist Powershell und die Nitro API objektbasiert. Das bedeutet, dass wir immer ein vordefiniertes Objekt am NetScaler oder lokal verändern oder erstellen. Da wir in unserem Anwendungsfall einen existierenden User entsperren wollen, brauchen wir die genaue Spezifikation des entsprechenden Objekts. Da die Nitro API quelloffen ist, können wir im Sourcecode nach einem passenden vordefinieren Objekt suchen. Tatsächlich werden wir dabei unter src/com/citrix/netscaler/nitro/resource/config/aaa fündig und können das Objekt aaauser betrachten.

Dabei sehen wir, dass das Objekt das Attribut username und die Methode unlock besitzt, welche für uns nützlich sind. Mit diesen Informationen erstellen wir nun ein neues lokales aaauser Objekt in der Variablen $aaauser und setzen das username Attribut auf den zu entsperrenden User.

$aaauser = New-Object com.citrix.netscaler.nitro.resource.config.aaa.aaauser
$aaauser.username = $AAAUserName

8.)

Um den User schlussendlich zu entsperren, nutzen wir die Methode unlock mit der Session und dem aaauser Objekt. Anschließend geben wir das Ergebnis der Aktion auf der Konsole aus.

$result = [com.citrix.netscaler.nitro.resource.config.aaa.aaauser]::unlock($nitrosession, $aaauser)
Write-Host $result.message

9.)

Im letzten Schritt schließen wir die vorher erstellte Session.

$session = $nitrosession.logout()
[CmdletBinding()]
param(
[Parameter(Mandatory=$True)][String]$IPAddress,
[Parameter(Mandatory=$True)][String]$Username,
[Parameter(Mandatory=$True)][SecureString]$Password,
[Parameter(Mandatory=$True)][String]$AAAUserName
)
function Main {
    try {
        Add-Type -Path "nitro.dll"
        $bstr = [Runtime.InteropServices.Marshal]::SecureStringToBSTR($Password)
        $password = [Runtime.InteropServices.Marshal]::PtrToStringAuto($bstr)
        $nitrosession = New-Object com.citrix.netscaler.nitro.service.nitro_service($IPAddress, "http")
        $session = $nitrosession.login($Username, $password)
        # Create aaauser resource
        $aaauser = New-Object com.citrix.netscaler.nitro.resource.config.aaa.aaauser
        $aaauser.username = $AAAUserName
        $result = [com.citrix.netscaler.nitro.resource.config.aaa.aaauser]::unlock($nitrosession, $aaauser)
        Write-Host $result.message
        $session = $nitrosession.logout()
    } catch {
        $ErrorMessage = $_.Exception.Message
        $FailedItem = $_.Exception.ItemName
        LogWrite "[-] Error while unlocking user! ErrorMessage: $ErrorMessage"
        Break
    }
}
Main

Das könnte dich auch interessieren

Webinar

Vortrag: Moderne Apps brauchen moderne Plattformen: Warum der Betrieb über Ihren Erfolg entscheidet

Für alle, die beim Expert Day von Midrange verstehen wollen, warum Cloud-Projekte nicht an der Migration scheitern, sondern im Betrieb. Viele Unternehmen kämpfen danach mit steigenden Kosten, fehlender Transparenz und neuen Risiken. Der Grund: Cloud ist kein Infrastrukturthema, sondern ein Betriebsmodell mit klaren Anforderungen.
Weiterlesen
Blogbeitrag

Virtual Workplace Evolution 2026

Wir sind dabei und freuen uns auf einen spannenden Austausch zur Transformation von IT Workplaces.
Weiterlesen
Webinar

DORA-konformer Cloud-Betrieb: So setzen Sie Anforderungen praxisnah um

WEBINAR, 18.06: DORA-konformer Cloud-Betrieb praxisnah erklärt: Erfahren Sie im Webinar, wie Finanzunternehmen regulatorische Anforderungen wirksam, prüfbar und dauerhaft im IT-Betrieb umsetzen.
Weiterlesen
Blogbeitrag

Azure Arc, SQL-Updates, regionale Produktgrenze: Der MVP-Vorteil

Updates, die scheinbar laufen, aber nie ankommen. Ein Support-Ticket ohne belastbare Antwort. Und ein Betriebsproblem, das schnell zum Sicherheitsproblem werden kann. Wie ein Microsoft MVP in genau dieser Situation den entscheidenden Unterschied macht.
Weiterlesen
Blogbeitrag

Anthropic in Microsoft 365 Copilot: Warum das neue KI-Feature zum Governance-Test für Unternehmen wird 

Neue KI-Modelle in Microsoft 365 Copilot: Warum die Anthropic-Integration für Unternehmen Chancen, Pflichten und Risiken verändert.
Weiterlesen
Blogbeitrag

Azure Files im Enterprise Scale: Architektur mit Herstellervalidierung

Wenn Datenvolumina, verteilte Standorte und hybride Synchronisation zusammentreffen, reicht die Dokumentation oft nicht mehr aus. Wie eine Validierung mit der Microsoft Produktgruppe in solchen Fällen den Unterschied macht.
Weiterlesen
Webinar

Webinar – Need for Speed – wie Microsoft 365 Unternehmen in Zugzwang bringt

Für alle Unternehmen, die M365 stabil, sicher und effizient betreiben wollen. Wer souverän mit Changes umgeht, gewinnt Kontrolle und entlastet endlich das Tagesgeschäft. In diesem Webinar zeigen unsere Experten, wie Sie die Update‑Flut proaktiv statt reaktiv managen.
Weiterlesen
Blogbeitrag

Provectus und das IAMCP Business Chapter Azure Infrastruktur

Interview mit Matthias Braun über das IAMCP-Netzwerk, aktuelle Trends in der Azure Infrastruktur und den konkreten Mehrwert für Microsoft-Partner und deren Kunden.
Weiterlesen
Blogbeitrag

Citrix LAS kommt: Warum Sie jetzt handeln müssen 

Die Zeit der klassischen, dateibasierten Citrix-Lizenzierung läuft ab. Citrix hat klar kommuniziert: Am 15. April 2026 ist endgültig Schluss. Ab diesem Zeitpunkt wird ausschließlich noch der Citrix License Activation Service (LAS) unterstützt.
Weiterlesen
Webinar

Webinar – Automatisieren ohne IT-Frust: Microsoft Power Platform sicher betreiben und Potenzial nutzen

In diesem Webinar zeigen unsere Experten anhand praxisnaher Live-Demos, wie Unternehmen mit der Microsoft Power Platform Prozesse effizient automatisieren, externe Tools ersetzen und durch klare Governance sowie ein Center of Excellence einen sicheren und nachhaltigen Betrieb sicherstellen.
Weiterlesen
Jetzt Blogbeitrag teilen
Xing LinkedIn Facebook Twitter