Verwendung von Passwörtern mit PnP PowerShell

Bei der Ausführung von automatisierten PowerShell Scripts stellt sich immer wieder die Frage wie jemand Passwörter sicher und am besten verschlüsselt hinterlegen kann, und die Scripts dennoch Anmeldedaten verwenden können? Ich beschreibe hier in 3 Fällen wie ihr es mit PnP PowerShell lösen könnt.

Windows hat standardmässig einen Credential Manager. Warum nicht diesen verwenden?

PnP kann die Windows Credentials auslesen und für die Authentifizierung verwenden. Wichtig zu wissen, die Daten des Credentials Manager sind auf den aktuell angemeldeten Account eingeschränkt. Ein anderer Account hat keinen Zugriff auf die Anmeldedaten des ersten Accounts. Eine Methode um Passwörter für Service Accounts abzuspeichern.
Du kannst neue Anmeldedaten manuell im Credential Manager hinzufügen, oder PnP dazu verwenden. Das Ergebnis ist am Ende dasselbe.

  1. Wähle die Option einen neuen Eintrag für “Generic credentials” anzulegen.
  2. Füge im Feld “Internet or network address” eine frei von dir definierte Bezeichnung, ohne Leerzeichen oder Sonderzeichen, ein. Es muss keine Netzwerkadresse sein. PnP wird diesen Namen auslesen.
  3. Im Benutzernamen und Passwort gibst du die echten Anmeldedaten an mit der sich PnP authentifizieren soll. Im Namen dieses Accounts wird PowerShell Aktionen ausführen.

Falls du die Anmeldedaten alternativ mit PnP anlegen willst kannst du es über Add-PnPStoredCredential erstellen.
Hier nun 3 Fälle wie ihr den Credential Manager für die Authentifizierung einsetzen könnt.


Mit PnP ist es einfach sich über den Credential Manager in SharePoint anzumelden. Verwende für die Credentials die oben definierte Bezeichnung der Anmeldedaten. ✅

Connect-PnPOnline -Url [SharePointUrl] -Credentials PnPDemo

Das offizielle SharePoint Online PowerShell Modul verwendet andere Commands wie PnP, zum Beispiel Connect-SPOService. Es liest die Anmeldedaten nicht selbstständig aus dem Credential Manager aus. PnP kann helfen, mit Get-PnPStoredCredential. 👍 Wichtig ist hier darauf zu achten welchen Typ von Credentials PnP zurückgeben soll. Aus der Beschreibung des Commands.

-Type

The object type of the credential to return from the Credential Manager. Possible values are ‘O365’, ‘OnPrem’ or ‘PSCredential’

Connect-SPOService erwartet den Typ PSCredential. Somit ist es einfach. ✅

$SPOCred = Get-PnPStoredCredential -Name PnPDemo -Type PSCredential
Connect-SPOService -Url [SPOAdminUrl] -Credential $SPOCred

  • Fall 3 – Passwort unverschlüsselt ausgeben

Es gibt einzelne Fälle bei denen das Passwort nicht verschlüsselt sein darf. Zum Beispiel bei der Authentifizierung via Azure App oder SharePoint App. In beiden Fällen möchten die Apps neben der AppID einen Wert für Client Secret der im Klartext angeben wird. Nicht optimal so einen Wert in einem Script abzulegen. Den Wert könnt ihr ebenfalls im Credential Manager speichern. Die AppID dient als Benutzername, Client Secret als Passwort. Das Vorgehen es auszulesen ist ähnlich zu Fall 2. Ihr müsst am Ende nur das Passwort entschlüsseln.

$SharePointAppID = (Get-PnPStoredCredential -Name PnPDemo -Type PSCredential).Username
$SharePointAppSecret = (Get-PnPStoredCredential -Name PnPDemo -Type PSCredential).Password
$SharePointAppSecret = [System.Runtime.InteropServices.Marshal]::SecureStringToBSTR($SharePointAppSecret)
$SharePointAppSecret = [System.Runtime.InteropServices.Marshal]::PtrToStringAuto($SharePointAppSecret) 

Mit den Angaben habt ihr die Anmeldedaten um euch via PnP über eine SharePoint oder Azure App zu authentifizieren. ✅

Connect-PnPOnline -Url [SharePointUrl] -AppId $SharePointAppID -AppSecret $SharePointAppSecret

Die Methode mit AppID und Client Secret könnt ihr ausserdem einsetzen falls bei einem Account Multi-Faktor Authentifizierung aktiviert ist. Diese Accounts können sich mit PnP nicht via Benutzer + Passwort anmelden, ausser ihr nutzt für die Verbindung den Parameter UseWebLogin. So öffnet sich ein Anmeldefenster und ihr könnt eure Anmeldedaten + MFA-Code eingeben.

Share
Avatar-Foto

Tobias Asböck

Tobias ist ein Senior System Engineer mit rund 10 Jahren Berufserfahrung für Microsoft 365 Produkte wie SharePoint Online, OneDrive for Business, Teams Collaboration, Entra ID, Information Protection, Universal Print und Microsoft 365 Lizenzierung. Aus der Vergangenheit kennt er über einen Zeitraum von 15+ Jahren die Planung, Administration und den Betrieb von SharePoint Server Umgebungen. Tobias ist ein PowerShell Scripter mit Zertifizierungen für Microsoft 365 Produkte. In seiner Freizeit beschäftigt sich Tobias mit Aktualisierungen in der M365-Welt, ist mit seinem Rennvelo unterwegs und anderen sportlichen Aktivitäten beschäftigt. Bei Fragen kontaktiere mich über LinkedIn oder [email protected].

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert