Azure自定义脚本扩展。以另一个用户身份执行脚本
我正在使用command1.ps1脚本在目标VM上安装Azure自定义脚本扩展并执行命令2.ps1。 command2.ps1应该运行一个脚本(即在ScriptBlock内)作为域管理员(因此为-Credential $Credentials
)。当我手动运行command2.ps1并输入$ domainAdminName和$ domainAdminPassword时,它可以工作,但是通过command1.ps1运行时,它不起作用。也许问题是由运行命令2.ps1作为系统帐户的Azure自定义脚本扩展引起的?请帮我制作脚本。 command1.ps1:Azure自定义脚本扩展。以另一个用户身份执行脚本
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
也有在事件日志中一对夫妇的错误: https://i.stack.imgur.com/RKlZo.png https://i.stack.imgur.com/XL28M.png
也许问题是原因通过Azure自定义脚本扩展运行 command2.ps1作为系统帐户?
是的,Azure自定义脚本扩展以系统帐户运行。这意味着使用Azure VM Custom Script Extension,我们可以运行任何类型的代码,即使它需要最高的系统权限。如下图所示,我们可以看到CustomScriptHandler.exe进程作为系统帐户运行。
更多了解Azure的自定义脚本扩展,请参阅this article。
请帮我制作脚本。
你的脚本没问题。这个问题是关于系统特权的。根据您的错误日志,如果您想通过Azure自定义扩展脚本运行脚本,则可以尝试通过将权限分配给系统帐户来解决该问题,并更改虚拟机上的某些配置。有关如何解决错误的更多信息,请参阅this link。
你可以使用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来弄清楚一些类似的东西。我个人从未尝试过,但应该有可能。
谢谢。但对于我们的情况PowerShell更好。 – WinBoss