Расширение пользовательских сценариев Azure. Выполнить скрипт как другой пользователь
Я использую сценарий command1.ps1 для установки расширения настраиваемого сценария Azure на целевой виртуальной машине и выполнения command2.ps1. command2.ps1 должен запускать скрипт (который находится внутри ScriptBlock) как администратор домена (следовательно, -Credential $Credentials
). Когда я запускаю command2.ps1 вручную и вводю $ domainAdminName и $ domainAdminPassword, это работает, но при запуске через command1.ps1 это не работает. Возможно, причина в том, что расширение настраиваемого сценария Azure запускает command2.ps1 в качестве системной учетной записи? Пожалуйста, помогите мне заставить скрипт работать. command1.ps1:
param
(
[Parameter(Mandatory)]
[String]$resourceGroupName,
[Parameter(Mandatory)]
[String]$targetVMname,
[Parameter(Mandatory)]
[String]$vmLocation,
[Parameter(Mandatory)]
[String]$FileUri,
[Parameter(Mandatory)]
[String]$nameOfTheScriptToRun,
[Parameter(Mandatory)]
[String]$customScriptExtensionName,
[Parameter(Mandatory)]
[String]$domainAdminName,
[Parameter(Mandatory)]
[String]$domainAdminPassword
)
Set-AzureRmVMCustomScriptExtension -Argument "-domainAdminName $domainAdminName -domainAdminPassword $domainAdminPassword" `
-ResourceGroupName $resourceGroupName `
-VMName $targetVMname `
-Location $vmLocation `
-FileUri $FileUri `
-Run $nameOfTheScriptToRun `
-Name $customScriptExtensionName
Remove-AzureRmVMCustomScriptExtension -Force `
-ResourceGroupName $resourceGroupName `
-VMName $targetVMname `
-Name $customScriptExtensionName
command2.ps1:
param
(
[Parameter(Mandatory)]
[String]$domainAdminName,
[Parameter(Mandatory)]
[String]$domainAdminPassword
)
$domainAdminPasswordSecureString = ConvertTo-SecureString -String $domainAdminPassword -AsPlainText -Force
$DomainCredentials = New-Object -TypeName System.Management.Automation.PSCredential -ArgumentList $domainAdminName, $domainAdminPasswordSecureString
Invoke-Command -ComputerName localhost -ScriptBlock {
Start-Transcript C:\transcript1.txt
New-Item C:\111.txt
Stop-Transcript
} -Credential $DomainCredentials
2 ответа
Вы можете использовать расширение Azure DSC, чтобы обойти это
"properties": {
"publisher": "Microsoft.Powershell",
"type": "DSC",
"typeHandlerVersion": "2.20",
"autoUpgradeMinorVersion": true,
"settings": {
"configuration": {
"url": "url",
"script": "script.ps1",
"function": "function"
},
"configurationArguments": {
"regular": "arguments"
}
},
"protectedSettings": {
"configurationArguments": {
"DomainCredentials": {
"userName": "user",
"password": "password"
}
}
}
И в вашей конфигурации DSC добавьте такой параметр:
[Parameter(Mandatory)] # doesn't have to be mandatory, just copy pasting
[System.Management.Automation.PSCredential]$DomainCredentials,
Имя параметра в шаблоне должно совпадать с именем параметра в dsc. Вы, вероятно, можете выяснить что-то подобное, используя powershell. Я лично никогда не пробовал, но это должно быть возможно.
Возможно, причина в том, что расширение настраиваемого сценария Azure запускает command2.ps1 в качестве системной учетной записи?
Да, расширение настраиваемого сценария Azure запускается как системная учетная запись. Это означает, что с помощью расширения пользовательских сценариев виртуальной машины Azure мы можем запустить любой код, даже если для этого требуются самые высокие системные привилегии. Как показано на следующем рисунке, мы видим, что процесс CustomScriptHandler.exe выполняется как системная учетная запись.
Подробнее о расширении пользовательских сценариев Azure см. В этой статье.
Пожалуйста, помогите мне заставить скрипт работать.
Ваши сценарии в порядке. Эта проблема касается системных привилегий. Согласно вашему журналу ошибок, если вы хотите запускать свои сценарии с помощью настраиваемого сценария расширения Azure, вы можете попытаться решить его, назначив разрешения системной учетной записи и изменив некоторые конфигурации на своей виртуальной машине. Подробнее о том, как устранить ошибки, вы можете обратиться по этой ссылке.