2014-12-12 13 views
7

Ich versuche mithilfe von PowerShell eine aktualisierte Inhaltsdatei über die REST-API auf eine Azure-Website zu stellen. Wenn ich jedoch meine Anmeldeinformationen in Invoke-RestMethod -Credentials einliefern, wird der HTML-Code der standardmäßigen Azure-Anmeldeseite zurückgegeben.Azure-Websites Kudu-REST-API - Authentifizierung

Wie kann ich mich mit Kudu von PowerShell authentifizieren? Vielen Dank.

Antwort

13

Sie können die Website zuerst über Powershell abrufen und dann die Anmeldeinformationen für das Veröffentlichen auf der Website verwenden, um die Kudu-REST-API aufzurufen. Im folgenden Beispiel wird die Kudu-Version angezeigt.

$website = Get-AzureWebsite -Name "WebsiteName" 

$username = $website.PublishingUsername 
$password = $website.PublishingPassword 
$base64AuthInfo = [Convert]::ToBase64String([Text.Encoding]::ASCII.GetBytes(("{0}:{1}" -f $username,$password))) 

$apiBaseUrl = "https://$($website.Name).scm.azurewebsites.net/api" 

$kuduVersion = Invoke-RestMethod -Uri "$apiBaseUrl/environment" -Headers @{Authorization=("Basic {0}" -f $base64AuthInfo)} -Method GET 
+0

Hervorragendes Beispiel und Demo von Grund Auth. –

+0

Ich habe eine neue Antwort hinzugefügt, um @ Seths Antwort in die Azure ARM Welt zu bringen. –

+0

Vorsicht, wenn Sie Slot verwenden, wäre $ website.Name Websitename (Slot). In diesem Fall schlägt Invoke-RestMethod fehl. Stattdessen tun '$ matchedNames = $ azureWebSite.EnabledHostNames -match 'scm' if ($ matchedNames -und $ matchedNames.count -gt 0) {$ Website = $ matchedNames [0] }' – Yash

6

In der neuen ARM-Welt und mit der neuesten PowerShell müssen Sie einige Anpassungen an @ Seths Antwort vornehmen.

Insbesondere die Art und Weise, wie Sie die Publishing Credits erhalten, ist anders, das ist die ersten 3 Zeilen. Der Rest habe ich schamlos von @Seth kopiert, um den Ausschnitt zu vervollständigen.

Stellen Sie sicher, YourResourceGroup/YourWebApp gegebenenfalls zu ersetzen:

$creds = Invoke-AzureRmResourceAction -ResourceGroupName YourResourceGroup -ResourceType Microsoft.Web/sites/config -ResourceName YourWebApp/publishingcredentials -Action list -ApiVersion 2015-08-01 -Force 

$username = $creds.Properties.PublishingUserName 
$password = $creds.Properties.PublishingPassword 
$base64AuthInfo = [Convert]::ToBase64String([Text.Encoding]::ASCII.GetBytes(("{0}:{1}" -f $username,$password))) 

$apiBaseUrl = "https://$($website.Name).scm.azurewebsites.net/api" 

$kuduVersion = Invoke-RestMethod -Uri "$apiBaseUrl/environment" -Headers @{Authorization=("Basic {0}" -f $base64AuthInfo)} -Method GET 
+0

Ich versuche, Übernehmen Sie die Anmeldeinformationen über Ihr Cmdlet, aber verwenden Sie stattdessen eine ResourceId und es wird immer ein Fehler angezeigt. Was ich getan habe, ist, Ihren Befehl auszuführen, die richtigen Anmeldeinformationen zu erhalten und dann die ID als -ResourceId zu verwenden, um zu sehen, ob ich sie bekommen kann (ich muss dies für eine Reihe von Websites in verschiedenen Ressourcengruppen automatisieren). Irgendeine Idee, warum das nicht funktionieren könnte? –

+0

Sorry, ich folge nicht vollständig. Es wäre am besten, eine neue Frage zu stellen, damit Sie detaillierter zeigen können, was Sie versuchen. Veröffentlichen Sie den neuen Frage-Link hier und ich werde versuchen, einen Blick darauf zu werfen. –

+0

Die Frage ist [hier] (http://stackoverflow.com/questions/36801349/how-to-access-the-publishing-credentials-of-a-website-using-azure-rm-and-resourc), danke ! –

Verwandte Themen