1

我正在使用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

回答

2

也许问题是原因通过Azure自定义脚本扩展运行 command2.ps1作为系统帐户?

是的,Azure自定义脚本扩展以系统帐户运行。这意味着使用Azure VM Custom Script Extension,我们可以运行任何类型的代码,即使它需要最高的系统权限。如下图所示,我们可以看到CustomScriptHandler.exe进程作为系统帐户运行。

enter image description here

更多了解Azure的自定义脚本扩展,请参阅this article

请帮我制作脚本。

你的脚本没问题。这个问题是关于系统特权的。根据您的错误日志,如果您想通过Azure自定义扩展脚本运行脚本,则可以尝试通过将权限分配给系统帐户来解决该问题,并更改虚拟机上的某些配置。有关如何解决错误的更多信息,请参阅this link

1

你可以使用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来弄清楚一些类似的东西。我个人从未尝试过,但应该有可能。

+0

谢谢。但对于我们的情况PowerShell更好。 – WinBoss

相关问题