|
|
|
|
@ -46,42 +46,16 @@ provisioner "powershell" {
|
|
|
|
|
|
|
|
|
|
## Configuration Reference
|
|
|
|
|
|
|
|
|
|
@include 'provisioners/shell-config.mdx'
|
|
|
|
|
|
|
|
|
|
- `debug_mode` - If set, sets PowerShell's [PSDebug mode](https://docs.microsoft.com/en-us/powershell/module/microsoft.powershell.core/set-psdebug?view=powershell-7)
|
|
|
|
|
in order to make script debugging easier. For instance, setting the value to 1 results in adding this to the execute command:
|
|
|
|
|
|
|
|
|
|
```powershell
|
|
|
|
|
Set-PSDebug -Trace 1
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
- `elevated_execute_command` (string) - The command to use to execute the
|
|
|
|
|
elevated script. By default this is as follows:
|
|
|
|
|
### Required
|
|
|
|
|
|
|
|
|
|
```powershell
|
|
|
|
|
powershell -executionpolicy bypass "& { if (Test-Path variable:global:ProgressPreference){$ProgressPreference='SilentlyContinue'};. {{.Vars}}; &'{{.Path}}'; exit $LastExitCode }"
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
This is a [template engine](/docs/templates/engine). Therefore, you
|
|
|
|
|
may use user variables and template functions in this field. In addition,
|
|
|
|
|
you may use two extra variables:
|
|
|
|
|
@include 'provisioners/shell-config.mdx'
|
|
|
|
|
|
|
|
|
|
- `Path`: The path to the script to run
|
|
|
|
|
- `Vars`: The location of a temp file containing the list of
|
|
|
|
|
`environment_vars`, if configured.
|
|
|
|
|
### Optional
|
|
|
|
|
@include 'provisioner/powershell/Config-not-required.mdx'
|
|
|
|
|
|
|
|
|
|
- `environment_vars` (array of strings) - An array of key/value pairs to
|
|
|
|
|
inject prior to the execute_command. The format should be `key=value`.
|
|
|
|
|
Packer injects some environmental variables by default into the
|
|
|
|
|
environment, as well, which are covered in the section below.
|
|
|
|
|
@include 'provisioners/common-config.mdx'
|
|
|
|
|
|
|
|
|
|
This is a [template engine](/docs/templates/engine). Therefore, you
|
|
|
|
|
may use user variables and template functions in this field. If you are
|
|
|
|
|
running on AWS, Azure, Google Compute, or OpenStack and would like to access
|
|
|
|
|
the autogenerated password that Packer uses to connect to the instance via
|
|
|
|
|
WinRM, you can use the `build` template engine to inject it using
|
|
|
|
|
`{{ build `Password`}}`. In HCL templates, you can do the same thing by
|
|
|
|
|
accessing the `build` variables For example:
|
|
|
|
|
## Default Environmental Variables
|
|
|
|
|
|
|
|
|
|
<Tabs>
|
|
|
|
|
<Tab heading="JSON">
|
|
|
|
|
@ -107,39 +81,29 @@ provisioner "powershell" {
|
|
|
|
|
</Tab>
|
|
|
|
|
</Tabs>
|
|
|
|
|
|
|
|
|
|
- `execute_command` (string) - The command to use to execute the script. By
|
|
|
|
|
default this is as follows:
|
|
|
|
|
|
|
|
|
|
```powershell
|
|
|
|
|
powershell -executionpolicy bypass "& { if (Test-Path variable:global:ProgressPreference){$ProgressPreference='SilentlyContinue'};. {{.Vars}}; &'{{.Path}}'; exit $LastExitCode }"
|
|
|
|
|
```
|
|
|
|
|
In addition to being able to specify custom environmental variables using the
|
|
|
|
|
`environment_vars` configuration, the provisioner automatically defines certain
|
|
|
|
|
commonly useful environmental variables:
|
|
|
|
|
|
|
|
|
|
This is a [template engine](/docs/templates/engine). Therefore, you
|
|
|
|
|
may use user variables and template functions in this field. In addition,
|
|
|
|
|
you may use two extra variables:
|
|
|
|
|
- `PACKER_BUILD_NAME` is set to the [name of the
|
|
|
|
|
build](/docs/templates/builders#named-builds) that Packer is running.
|
|
|
|
|
This is most useful when Packer is making multiple builds and you want to
|
|
|
|
|
distinguish them slightly from a common provisioning script.
|
|
|
|
|
|
|
|
|
|
- `Path`: The path to the script to run
|
|
|
|
|
- `Vars`: The location of a temp file containing the list of
|
|
|
|
|
`environment_vars`, if configured.
|
|
|
|
|
The value of both `Path` and `Vars` can be manually configured by setting
|
|
|
|
|
the values for `remote_path` and `remote_env_var_path` respectively.
|
|
|
|
|
- `PACKER_BUILDER_TYPE` is the type of the builder that was used to create
|
|
|
|
|
the machine that the script is running on. This is useful if you want to
|
|
|
|
|
run only certain parts of the script on systems built with certain
|
|
|
|
|
builders.
|
|
|
|
|
|
|
|
|
|
If you use the SSH communicator and have changed your default shell, you
|
|
|
|
|
may need to modify your `execute_command` to make sure that the command is
|
|
|
|
|
valid and properly escaped; the default assumes that you have not changed
|
|
|
|
|
the default shell away from cmd.
|
|
|
|
|
- `PACKER_HTTP_ADDR` If using a builder that provides an http server for file
|
|
|
|
|
transfer (such as hyperv, parallels, qemu, virtualbox, and vmware), this
|
|
|
|
|
will be set to the address. You can use this address in your provisioner to
|
|
|
|
|
download large files over http. This may be useful if you're experiencing
|
|
|
|
|
slower speeds using the default file provisioner. A file provisioner using
|
|
|
|
|
the `winrm` communicator may experience these types of difficulties.
|
|
|
|
|
|
|
|
|
|
- `elevated_user` and `elevated_password` (string) - If specified, the
|
|
|
|
|
PowerShell script will be run with elevated privileges using the given
|
|
|
|
|
Windows user.
|
|
|
|
|
|
|
|
|
|
This is a [template engine](/docs/templates/engine). Therefore, you
|
|
|
|
|
may use user variables and template functions in this field. If you are
|
|
|
|
|
running on AWS, Azure, Google Compute, or OpenStack and would like to access
|
|
|
|
|
the autogenerated password that Packer uses to connect to the instance via
|
|
|
|
|
WinRM, you can use the `build` template engine to inject it using
|
|
|
|
|
`{{ build `Password`}}`. In HCL templates, you can do the same thing by
|
|
|
|
|
accessing the `build` variables For example:
|
|
|
|
|
## Setting Elevated User and Password
|
|
|
|
|
|
|
|
|
|
<Tabs>
|
|
|
|
|
<Tab heading="JSON">
|
|
|
|
|
@ -194,69 +158,6 @@ provisioner "powershell" {
|
|
|
|
|
</Tab>
|
|
|
|
|
</Tabs>
|
|
|
|
|
|
|
|
|
|
- `execution_policy` - To run ps scripts on windows packer defaults this to
|
|
|
|
|
"bypass" and wraps the command to run. Setting this to "none" will prevent
|
|
|
|
|
wrapping, allowing to see exit codes on docker for windows. Possible values
|
|
|
|
|
are "bypass", "allsigned", "default", "remotesigned", "restricted",
|
|
|
|
|
"undefined", "unrestricted", "none".
|
|
|
|
|
|
|
|
|
|
- `remote_path` (string) - The path where the PowerShell script will be
|
|
|
|
|
uploaded to within the target build machine. This defaults to
|
|
|
|
|
`C:/Windows/Temp/script-UUID.ps1` where UUID is replaced with a dynamically
|
|
|
|
|
generated string that uniquely identifies the script.
|
|
|
|
|
|
|
|
|
|
This setting allows users to override the default upload location. The
|
|
|
|
|
value must be a writable location and any parent directories must already
|
|
|
|
|
exist.
|
|
|
|
|
|
|
|
|
|
- `remote_env_var_path` (string) - Environment variables required within the
|
|
|
|
|
remote environment are uploaded within a PowerShell script and then enabled
|
|
|
|
|
by 'dot sourcing' the script immediately prior to execution of the main
|
|
|
|
|
command or script.
|
|
|
|
|
|
|
|
|
|
The path the environment variables script will be uploaded to defaults to
|
|
|
|
|
`C:/Windows/Temp/packer-ps-env-vars-UUID.ps1` where UUID is replaced with a
|
|
|
|
|
dynamically generated string that uniquely identifies the script.
|
|
|
|
|
|
|
|
|
|
This setting allows users to override the location the environment variable
|
|
|
|
|
script is uploaded to. The value must be a writable location and any parent
|
|
|
|
|
directories must already exist.
|
|
|
|
|
|
|
|
|
|
- `skip_clean` (bool) - Whether to clean scripts up after executing the provisioner.
|
|
|
|
|
Defaults to false. When true any script created by a non-elevated Powershell
|
|
|
|
|
provisioner will be removed from the remote machine. Elevated scripts,
|
|
|
|
|
along with the scheduled tasks, will always be removed regardless of the
|
|
|
|
|
value set for `skip_clean`.
|
|
|
|
|
|
|
|
|
|
- `start_retry_timeout` (string) - The amount of time to attempt to _start_
|
|
|
|
|
the remote process. By default this is "5m" or 5 minutes. This setting
|
|
|
|
|
exists in order to deal with times when SSH may restart, such as a system
|
|
|
|
|
reboot. Set this to a higher value if reboots take a longer amount of time.
|
|
|
|
|
|
|
|
|
|
@include 'provisioners/common-config.mdx'
|
|
|
|
|
|
|
|
|
|
## Default Environmental Variables
|
|
|
|
|
|
|
|
|
|
In addition to being able to specify custom environmental variables using the
|
|
|
|
|
`environment_vars` configuration, the provisioner automatically defines certain
|
|
|
|
|
commonly useful environmental variables:
|
|
|
|
|
|
|
|
|
|
- `PACKER_BUILD_NAME` is set to the [name of the
|
|
|
|
|
build](/docs/templates/builders#named-builds) that Packer is running.
|
|
|
|
|
This is most useful when Packer is making multiple builds and you want to
|
|
|
|
|
distinguish them slightly from a common provisioning script.
|
|
|
|
|
|
|
|
|
|
- `PACKER_BUILDER_TYPE` is the type of the builder that was used to create
|
|
|
|
|
the machine that the script is running on. This is useful if you want to
|
|
|
|
|
run only certain parts of the script on systems built with certain
|
|
|
|
|
builders.
|
|
|
|
|
|
|
|
|
|
- `PACKER_HTTP_ADDR` If using a builder that provides an http server for file
|
|
|
|
|
transfer (such as hyperv, parallels, qemu, virtualbox, and vmware), this
|
|
|
|
|
will be set to the address. You can use this address in your provisioner to
|
|
|
|
|
download large files over http. This may be useful if you're experiencing
|
|
|
|
|
slower speeds using the default file provisioner. A file provisioner using
|
|
|
|
|
the `winrm` communicator may experience these types of difficulties.
|
|
|
|
|
|
|
|
|
|
## Combining the PowerShell Provisioner with the SSH Communicator
|
|
|
|
|
|
|
|
|
|
|