2016-02-18 3 views
0

Я пытаюсь запустить следующий скрипт в качестве рабочей книги для копирования всех настроек из одного webapp в другой, но я получаю следующую ошибку.Azure runbook powershell скрипт для копирования всех настроек 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

Эта ошибка:

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

означает, что $ реквизита равно нулю, поскольку вы передаете его 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/.

3

В книге «Автоматизация Runbook» используется другая стратегия входа в систему, поэтому вам не следует просто копировать сценарий PowerShell в Runbook и ожидать, что он будет работать точно так же, как вы запускаете локально.

Вы увидите, что команда Login-AzureRmAccount выведет окно с запросом имени пользователя и пароля. Но в автоматическом Runbook она не может. Следовательно, вам нужно сделать что-то еще, чтобы правильно войти в систему.

  1. Создайте нового пользователя Active Direcotry для автоматизации.

    a. Войдите в систему Azure Classic Portal.

    b. Выберите Active Directory и нажмите Active Directory по умолчанию.

    c. Нажмите Пользователь и нажмите Добавить пользователя. Для Тип пользователя, выберите Новый пользователь в вашей организации. Он не может быть Пользователь с существующей учетной записью Microsoft, потому что он не сработает при попытке войти в Runbook.

    d. На Профиль пользователя, для Роли, администратор службы достаточно хорош, но если вы хотите, вы можете выбрать Глобального администратора. Не активировать многофакторную аутентификацию. Если вы это сделаете, опять же, это не удастся при попытке войти в Runbook.

    e. Обратите внимание на полное имя пользователя и временный пароль.

    f. Вернуться к классическому порталу, нажмите Настройки>Администраторы>Добавить. Введите имя пользователя, которое вы получили выше, и выберите свою подписку.

    g. Выйдите из Azure, а затем войдите в систему с учетной записью, которую вы только что создали. Вам будет предложено изменить пароль пользователя.

    Примечание. Если у вас уже есть учетная запись пользователя, отличная от Microsoft и MFA, вы можете пропустить этот шаг. Для получения дополнительной информации см. Configuring Azure Automation

  2. Создайте учетную запись PS для вашего Runbook.

    a. Войдите в систему Azure Portal и выберите автоматизацию.

    b. В вашем клиенте настройки учетной записи автоматизации нажмите Активы>Учетные данные.

    enter image description here

    гр. Нажмите Добавьте учетные данные, введите Имя, Имя пользователя и Пароль (имя пользователя и пароль, которые вы создали на предыдущем шаге), и нажмите Создайте.

    enter image description here

  3. Вместо того чтобы просто использовать Login-AzureRmAccount, вы должны нам следующее войти.

    $cred = Get-AutomationPSCredential -Name "<your credential name>" 
    Login-AzureRmAccount -Credential $cred