我正在尝试将以下脚本作为Runbook运行,将所有设置从一个webapp复制到另一个,但是我收到以下错误。
try
{
$acct = Get-AzureRmSubscription
}
catch
{
Login-AzureRmAccount
}
$fromResourceGroup = 'resourceG1'
$fromSite = 'website1'
$toResourceGroup = 'resourceG2'
$toSite = 'website2'
$props = (Invoke-AzureRmResourceAction -ResourceGroupName $fromResourceGroup -ResourceType Microsoft.Web/sites/Config -Name $fromSite/appsettings -Action list -ApiVersion 2015-08-01 -Force).Properties
$hash = @{}
$props | Get-Member -MemberType NoteProperty | % { $hash[$_.Name] = $props.($_.Name) }
Set-AzureRMWebApp -ResourceGroupName $toResourceGroup
-Name $toSite -AppSettings $hash
异常:
Get-Member : You must specify an object for the Get-Member cmdlet.
At line:18 char:10
+ $props | Get-Member -MemberType NoteProperty | % { $hash[$_.Name] = $ ...
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : CloseError: (:) [Get-Member], InvalidOperationException
+ FullyQualifiedErrorId : NoObjectInGetMember,Microsoft.PowerShell.Commands.GetMemberCommand
Set-AzureRMWebApp : The term 'Set-AzureRMWebApp' is not recognized as the name of a cmdlet, function, script file, or
operable program. Check the spelling of the name, or if a path was included, verify that the path is correct and try
again.
At line:20 char:1
+ Set-AzureRMWebApp -ResourceGroupName $toResourceGroup
+ ~~~~~~~~~~~~~~~~~
+ CategoryInfo : ObjectNotFound: (Set-AzureRMWebApp:String) [], CommandNotFoundException
+ FullyQualifiedErrorId : CommandNotFoundException
-Name : The term '-Name' is not recognized as the name of a cmdlet, function, script file, or operable program. Check
the spelling of the name, or if a path was included, verify that the path is correct and try again.
At line:21 char:9
+ -Name $toSite -AppSettings $hash
+ ~~~~~
+ CategoryInfo : ObjectNotFound: (-Name:String) [], CommandNotFoundException
+ FullyQualifiedErrorId : CommandNotFoundException
答案 0 :(得分:3)
Automation Runbook使用不同的登录策略,因此您不应该只将PowerShell脚本复制到Runbook,并期望它的运行方式与本地运行完全相同。
您会看到命令Login-AzureRmAccount
将弹出一个窗口,询问用户名和密码。但是,在自动化Runbook中,它无法实现。因此,您需要做一些其他事情才能正确登录。
为您的自动化创建一个新的Active Direcotry用户。
一个。登录Azure Classic Portal。
湾选择 Active Directory ,然后单击您的默认Active Directory。
℃。点击用户,然后点击添加用户。对于用户类型,请选择您单位中的新用户。它不能是具有现有Microsoft帐户的用户,因为它在尝试登录Runbook时会失败。
d。在用户个人资料上,对于角色,服务管理员已经足够好了,但如果需要,您可以选择全局管理员。不要启用多重身份验证。如果这样做,再次尝试登录Runbook时会失败。
即记下用户的全名和临时密码。
F。返回经典门户网站,点击设置> 管理员> 添加即可。输入您上面的用户名,然后选择您的订阅。
克。注销Azure,然后使用刚刚创建的帐户重新登录。系统将提示您更改用户密码。
注意:如果您已经拥有"非Microsoft"和MFA禁用的用户帐户,您可以跳过此步骤。有关详细信息,请参阅Configuring Azure Automation
为Runbook创建PS凭据资产。
一个。登录Azure Portal,然后选择自动化。
湾在自动化帐户设置边栏中,点击资产>的凭证强>
℃。点击添加凭据,输入名称,用户名和密码(您在上一步中创建的用户名和密码),然后点击创建。
您应该使用以下内容登录。
,而不是简单地使用Login-AzureRmAccount
$cred = Get-AutomationPSCredential -Name "<your credential name>"
Login-AzureRmAccount -Credential $cred
答案 1 :(得分:0)
此错误:
Get-Member : You must specify an object for the Get-Member cmdlet.
表示$ props为null,因为您将其传递给Get-Member。所以
$props = (Invoke-AzureRmResourceAction -ResourceGroupName $fromResourceGroup -ResourceType Microsoft.Web/sites/Config -Name $fromSite/appsettings -Action list -ApiVersion 2015-08-01 -Force).Properties
正在评估为null。
这可能是因为您没有正确地对Azure进行身份验证。有关详细信息,请参阅https://azure.microsoft.com/en-us/blog/azure-automation-authenticating-to-azure-using-azure-active-directory/和https://azure.microsoft.com/en-us/blog/announcing-azure-resource-manager-support-azure-automation-runbooks/。