验证多个 Azure Powershell 函数
Authenticate multiple Azure Powershell Functions
我已经使用 Azure Functions 构建了一些 Powershell 函数,它运行得非常棒。
现在我已经证明了这个概念,我非常想重构我现有的功能。
首先,我想将我的函数中所需的身份验证转移到某种共享函数或其他什么。
这是我的示例函数,其中 return 我的资源组中所有网络应用程序的列表。
# Authenticate with subscription
$subscriptionId = "<SubscriptionId>"
$resourceGroupName = "<ResourceGroupName>";
$tenantId = "<TenantId>"
$applicationId = "<ApplicationId>"
$password = "<Password>"
$userPassword = ConvertTo-SecureString -String $password -AsPlainText -Force
$userCredential = New-Object -TypeName System.Management.Automation.PSCredential -ArgumentList $applicationId, $userPassword
Add-AzureRmAccount -TenantId $tenantid -ServicePrincipal -SubscriptionId $subscriptionId -Credential $userCredential
Get-AzureRmSubscription –SubscriptionId $subscriptionId | Select-AzureRmSubscription
# Get all web apps
$Websites = Get-AzureRmWebApp -ResourceGroupName $resourceGroupName
$Websites = $Websites | select name | ConvertTo-Json -Compress
# Write output
Out-File -Encoding Ascii -FilePath $res -inputObject $Websites
我非常想将第 1 行的所有内容移到其他地方的第 10 行。可能吗?如果是的话,谁能给我指出正确的方向?
更新
感谢 Walter 和 Pragna,我像这样结合了这两种方法。
运行.ps1
# Authenticate with subscription
Import-Module 'D:\home\site\wwwroot\bin\Authentication.ps1'
# Get all web apps
$Websites = Get-AzureRmWebApp -ResourceGroupName $env:ResourceGroupName
$Websites = $Websites | select name | ConvertTo-Json -Compress
# Write output
Out-File -Encoding Ascii -FilePath $res -inputObject $Websites
身份验证。ps1
$secpasswd = ConvertTo-SecureString $env:Password -AsPlainText -Force;
$userCredential = New-Object System.Management.Automation.PSCredential ($env:ApplicationId, $secpasswd)
Add-AzureRmAccount -TenantId $env:TenantId -ServicePrincipal -SubscriptionId $env:SubscriptionId -Credential $userCredential
Get-AzureRmSubscription –SubscriptionId $env:SubscriptionId | Select-AzureRmSubscription
是的。您可以导入自定义 powershell 模块。
- 创建共享目录,例如D 下的 bin:\home\site\wwwroot
- 复制模块到共享目录
- 调用导入模块 SharedDir\MyModule.psm1 或 SharedDir\MyScript.ps1 或 SharedDir\MyModule.psd1 或 SharedDir\MyLib.dll
此外,这里有一个 sample 可能会有所帮助。
您将帐户信息保存在脚本中是不安全的。我建议您可以将这些存储到 App Setting
。您可以找到它 Your function app-->Settings-->Application settings-->Manage application settings-->App settings
和设置 SP_USERNAME、SP_PASSWORD 和 TENANTID、SubscriptionId 的键值对(您也可以使用其他值或更多键对)。
修改脚本如下:
# Set Service Principal credentials
# SP_PASSWORD, SP_USERNAME, TENANTID are app settings
$secpasswd = ConvertTo-SecureString $env:SP_PASSWORD -AsPlainText -Force;
$mycreds = New-Object System.Management.Automation.PSCredential ($env:SP_USERNAME, $secpasswd)
Add-AzureRmAccount -ServicePrincipal -Tenant $env:TENANTID -Credential $mycreds;
Get-AzureRmSubscription –SubscriptionId $env:subscriptionId | Select-AzureRmSubscription
当您要修改账户信息时,不需要修改脚本,只需要修改应用设置即可。您可以使用 Azure CLI 修改应用程序设置。
我已经使用 Azure Functions 构建了一些 Powershell 函数,它运行得非常棒。
现在我已经证明了这个概念,我非常想重构我现有的功能。
首先,我想将我的函数中所需的身份验证转移到某种共享函数或其他什么。
这是我的示例函数,其中 return 我的资源组中所有网络应用程序的列表。
# Authenticate with subscription
$subscriptionId = "<SubscriptionId>"
$resourceGroupName = "<ResourceGroupName>";
$tenantId = "<TenantId>"
$applicationId = "<ApplicationId>"
$password = "<Password>"
$userPassword = ConvertTo-SecureString -String $password -AsPlainText -Force
$userCredential = New-Object -TypeName System.Management.Automation.PSCredential -ArgumentList $applicationId, $userPassword
Add-AzureRmAccount -TenantId $tenantid -ServicePrincipal -SubscriptionId $subscriptionId -Credential $userCredential
Get-AzureRmSubscription –SubscriptionId $subscriptionId | Select-AzureRmSubscription
# Get all web apps
$Websites = Get-AzureRmWebApp -ResourceGroupName $resourceGroupName
$Websites = $Websites | select name | ConvertTo-Json -Compress
# Write output
Out-File -Encoding Ascii -FilePath $res -inputObject $Websites
我非常想将第 1 行的所有内容移到其他地方的第 10 行。可能吗?如果是的话,谁能给我指出正确的方向?
更新
感谢 Walter 和 Pragna,我像这样结合了这两种方法。
运行.ps1
# Authenticate with subscription
Import-Module 'D:\home\site\wwwroot\bin\Authentication.ps1'
# Get all web apps
$Websites = Get-AzureRmWebApp -ResourceGroupName $env:ResourceGroupName
$Websites = $Websites | select name | ConvertTo-Json -Compress
# Write output
Out-File -Encoding Ascii -FilePath $res -inputObject $Websites
身份验证。ps1
$secpasswd = ConvertTo-SecureString $env:Password -AsPlainText -Force;
$userCredential = New-Object System.Management.Automation.PSCredential ($env:ApplicationId, $secpasswd)
Add-AzureRmAccount -TenantId $env:TenantId -ServicePrincipal -SubscriptionId $env:SubscriptionId -Credential $userCredential
Get-AzureRmSubscription –SubscriptionId $env:SubscriptionId | Select-AzureRmSubscription
是的。您可以导入自定义 powershell 模块。
- 创建共享目录,例如D 下的 bin:\home\site\wwwroot
- 复制模块到共享目录
- 调用导入模块 SharedDir\MyModule.psm1 或 SharedDir\MyScript.ps1 或 SharedDir\MyModule.psd1 或 SharedDir\MyLib.dll
此外,这里有一个 sample 可能会有所帮助。
您将帐户信息保存在脚本中是不安全的。我建议您可以将这些存储到 App Setting
。您可以找到它 Your function app-->Settings-->Application settings-->Manage application settings-->App settings
和设置 SP_USERNAME、SP_PASSWORD 和 TENANTID、SubscriptionId 的键值对(您也可以使用其他值或更多键对)。
修改脚本如下:
# Set Service Principal credentials
# SP_PASSWORD, SP_USERNAME, TENANTID are app settings
$secpasswd = ConvertTo-SecureString $env:SP_PASSWORD -AsPlainText -Force;
$mycreds = New-Object System.Management.Automation.PSCredential ($env:SP_USERNAME, $secpasswd)
Add-AzureRmAccount -ServicePrincipal -Tenant $env:TENANTID -Credential $mycreds;
Get-AzureRmSubscription –SubscriptionId $env:subscriptionId | Select-AzureRmSubscription
当您要修改账户信息时,不需要修改脚本,只需要修改应用设置即可。您可以使用 Azure CLI 修改应用程序设置。