如果这对任何人有帮助,我设法将参数从数据“template_file”传递到 PowerShell 命令行以在服务器上执行。
在我的情况下实际上不需要凭据,但我还是想通过它们。就我而言,这些凭据是从 Azure 中的 VM 设置中获取的。
resource "azurerm_virtual_machine_extension" "software" {
name = "install-software"
# resource_group_name = azurerm_resource_group.main.name
virtual_machine_id = azurerm_windows_virtual_machine.ADVM1.id
publisher = "Microsoft.Compute"
type = "CustomScriptExtension"
type_handler_version = "1.9"
protected_settings = <<SETTINGS
{
"commandToExecute": "powershell -command \"[System.Text.Encoding]::UTF8.GetString([System.Convert]::FromBase64String('${base64encode(data.template_file.DomainControllerSetup.rendered)}')) | Out-File -filepath DomainControllerSetup.ps1\" && powershell -ExecutionPolicy Unrestricted -File DomainControllerSetup.ps1 -DomainName ${data.template_file.DomainControllerSetup.vars.DomainName} -AdmincredsUserName ${data.template_file.DomainControllerSetup.vars.AdmincredsUserName} -AdmincredsPassword ${data.template_file.DomainControllerSetup.vars.AdmincredsPassword}"
}
SETTINGS
}
data "template_file" "DomainControllerSetup" {
template = "${file("DomainControllerSetup.ps1")}"
vars = {
DomainName = "azlab.local"
AdmincredsUserName = "${azurerm_windows_virtual_machine.ADVM1.admin_username}"
AdmincredsPassword = "${azurerm_windows_virtual_machine.ADVM1.admin_password}"
}
}
这是我的“创建新森林”脚本——如果有帮助的话。此示例中未使用凭据,仅使用了域名。但是我想保留它,以防我想将成员服务器提升到现有域中。
[CmdletBinding()]
param
(
[Parameter(ValuefromPipeline=$true,Mandatory=$true)] [string]$DomainName,
[Parameter(ValuefromPipeline=$true,Mandatory=$true)] [string]$AdmincredsUserName,
[Parameter(ValuefromPipeline=$true,Mandatory=$true)] [string]$AdmincredsPassword
)
$username = $AdmincredsUserName
$password = ConvertTo-SecureString -AsPlainText $AdmincredsPassword -Force
$Cred = New-Object System.Management.Automation.PSCredential ($username, $password)
install-windowsfeature AD-Domain-Services -IncludeManagementTools
Install-ADDSForest `
-DomainName $DomainName `
-SafeModeAdministratorPassword $password `
-CreateDnsDelegation:$false `
-DatabasePath "C:\Windows\NTDS" `
-InstallDns:$true `
-LogPath "C:\Windows\NTDS" `
-NoRebootOnCompletion:$false `
-SysvolPath "C:\Windows\SYSVOL" `
-Force:$true