验证多个Azure Powershell功能

时间:2017-06-14 17:36:28

标签: powershell azure azure-functions

我使用Azure功能构建了一些Powershell功能,它就像魅力一样。

现在我已经证明了这个概念,我非常想重构我现有的功能。

首先,我想将我的函数中所需的身份验证转移到某种共享函数或其他任何东西。

这是我的示例函数,它返回资源组中所有Web应用程序的列表。

# 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,我将这两种方法结合起来。

run.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

Authentication.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

2 个答案:

答案 0 :(得分:1)

是。您可以导入自定义PowerShell模块。

  • 创建共享目录,例如在D:\ home \ site \ wwwroot
  • 下的bin
  • 将模块复制到共享目录
  • 调用Import-Module SharedDir \ MyModule.psm1或SharedDir \ MyScript.ps1或SharedDir \ MyModule.psd1或SharedDir \ MyLib.dll

此外,这里有sample可能会有所帮助。

答案 1 :(得分:1)

在脚本中保存帐户信息是不安全的。我建议你可以将这些存储到App Setting。您可以找到设置SP_USERNAME,SP_PASSWORD和TENANTID,SubscriptionId(您还可以使用其他值或更多密钥对)的Your function app-->Settings-->Application settings-->Manage application settings-->App settings和键值对。 enter image description here

修改您的脚本如下:

# 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修改应用程序设置。