0

我正在尝试将以下脚本作为运行手册运行,以将所有设置从一个 webapp 复制到另一个 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
4

2 回答 2

3

自动化 Runbook 使用不同的登录策略,因此您不应只是将 PowerShell 脚本复制到 Runbook 并期望它以与本地运行完全相同的方式运行。

您会看到该命令Login-AzureRmAccount将弹出一个窗口,询问用户名和密码。但是,在自动化运行手册中,它不能。因此,您需要执行其他操作才能正确登录。

  1. 为您的自动化创建一个新的 Active Direcotry 用户。

    一个。登录Azure 经典门户

    湾。选择Active Directory,然后单击您的默认 Active Directory。

    C。单击用户,然后单击添加用户。对于用户类型,选择组织中的新用户。它不能是具有现有 Microsoft 帐户的用户,因为它在尝试登录 Runbook 时会失败。

    d。在User Profile中,对于Roles,服务管理员就足够了,但如果需要,您可以选择 Global administrator。不要启用多重身份验证。如果您这样做,再次尝试登录 Runbook 时将失败。

    e. 记下用户的全名和临时密码。

    F。返回经典门户,单击设置>管理员>添加。输入您在上面获得的用户名,然后选择您的订阅。

    G。注销 Azure,然后使用刚刚创建的帐户重新登录。系统将提示您更改用户密码。

    注意:如果您已经拥有“非 Microsoft”且已禁用 MFA 的用户帐户,则可以跳过此步骤。有关详细信息,请参阅配置 Azure 自动化

  2. 为您的 Runbook 创建一个 PS 凭证资产。

    一个。登录Azure 门户,然后选择您的自动化。

    湾。在您的自动化帐户设置刀片中,单击Assets > Credential

    在此处输入图像描述

    C。单击添加凭据,输入名称、用户名和密码(您在上一步中创建的用户名和密码),然后单击创建

    在此处输入图像描述

  3. Login-AzureRmAccount您应该使用以下方法登录,而不是简单地使用。

    $cred = Get-AutomationPSCredential -Name "<your credential name>"
    Login-AzureRmAccount -Credential $cred
    
于 2016-02-19T02:50:09.377 回答
0

这个错误:

Get-Member : You must specify an object for the Get-Member cmdlet.

意味着 $props 为空,因为您将它传递给 Get-Member。所以

$props = (Invoke-AzureRmResourceAction -ResourceGroupName $fromResourceGroup -ResourceType Microsoft.Web/sites/Config -Name $fromSite/appsettings -Action list -ApiVersion 2015-08-01 -Force).Properties

由于某种原因正在评估为空。

这可能是因为您没有正确地对 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/了解更多信息。

于 2016-02-18T21:58:29.827 回答