Windows
A startup script is a file that performs tasks during the startup process of a virtual machine (VM) instance. Startup scripts can apply to all VMs in a project or to a single VM. Startup scripts specified by VM-level metadata override startup scripts specified by project-level metadata, and startup scripts only run when a network is available. This document describes how to use startup scripts on Windows Server VM instances. For information about how to add a project-level startup script, see gcloud compute project-info add-metadata
.
Windows startup scripts must be Command shell (.cmd
), PowerShell (.ps1
), or batch file scripts (.bat
), and must have the appropriate file extension.
If you specify a startup script by using one of the procedures in this document, Compute Engine does the following:
Copies the startup script to the VM
Task Scheduler runs the startup script as the LocalSystem
account when the VM boots
For information about the various tasks related to startup scripts and when to perform each one, see the startup scripts overview document.
Before you beginSelect the tab for how you plan to use the samples on this page:
ConsoleWhen you use the Google Cloud console to access Google Cloud services and APIs, you don't need to set up authentication.
gcloudInstall the Google Cloud CLI. After installation, initialize the Google Cloud CLI by running the following command:
gcloud init
If you're using an external identity provider (IdP), you must first sign in to the gcloud CLI with your federated identity.
Note: If you installed the gcloud CLI previously, make sure you have the latest version by runninggcloud components update
.To use the REST API samples on this page in a local development environment, you use the credentials you provide to the gcloud CLI.
Install the Google Cloud CLI. After installation, initialize the Google Cloud CLI by running the following command:
gcloud init
If you're using an external identity provider (IdP), you must first sign in to the gcloud CLI with your federated identity.
For more information, see Authenticate for using REST in the Google Cloud authentication documentation.
A startup script is passed to a VM from a location that is specified by a metadata key. A metadata key specifies whether the startup script is stored locally, stored in Cloud Storage, or passed directly to the VM. The metadata key that you use might also depend on the size or the file type of the startup script.
The following table shows the metadata keys that you can use for Windows startup scripts, and provides information about which key to use based on the storage location, size, and file type of the startup script.
Metadata key Use forsysprep-specialize-script-ps1
Passing an unsigned PowerShell script that is stored locally or added directly and that is up to 256 KB in size sysprep-specialize-script-cmd
Passing a command shell script that is stored locally or added directly and that is up to 256 KB in size sysprep-specialize-script-bat
Passing a batch file script that is stored locally or added directly and that is up to 256 KB in size sysprep-specialize-script-url
Passing a batch file, Command shell, signed/unsigned PowerShell script or executable that is stored in Cloud Storage and that is greater than 256 KB in size windows-startup-script-ps1
Passing an unsigned PowerShell script that is stored locally or added directly and that is up to 256 KB in size windows-startup-script-cmd
Passing a command shell script that is stored locally or added directly and that is up to 256 KB in size windows-startup-script-bat
Passing a batch file script that is stored locally or added directly and that is up to 256 KB in size windows-startup-script-url
Passing a batch file, Command shell, signed/unsigned PowerShell script or executable that is stored in Cloud Storage and that is greater than 256 KB in size
For more information about the order of execution of the various types of startup scripts, see the GoogleCloudPlatform/compute-image-windows repository on GitHub.
Order of execution of Windows startup scriptsYou can use multiple startup scripts. Startup scripts stored locally or added directly execute before startup scripts that are stored in Cloud Storage. The type of file containing the script also impacts the order of execution. The following table shows, based on the metadata key, the order of execution of Windows startup scripts.
Metadata key Order of executionsysprep-specialize-script-ps1
First during the initial boot sysprep-specialize-script-cmd
Second during the initial boot sysprep-specialize-script-bat
Third during the initial boot sysprep-specialize-script-url
Fourth during the initial boot windows-startup-script-ps1
First during each boot after the initial boot windows-startup-script-cmd
Second during each boot after the initial boot windows-startup-script-bat
Third during each boot after the initial boot windows-startup-script-url
Fourth during each boot after the initial boot Passing a Windows startup script directly Permissions required for this task
To perform this task, you must have the following permissions:
compute.instances.setMetadata
on the VM.Pass the contents of a batch file, Command shell, or unsigned PowerShell startup script directly to a Windows Server VM. The following procedures show how to pass an unsigned PowerShell script.
ConsolePassing a Windows startup script directly to a new VM
In the Google Cloud console, go to the Create an instance page.
For Boot disk, select Change, and do the following:
Expand the Advanced options section, and do the following:
In the Metadata section, click Add item to set the Key and Value:
Key: set to windows-startup-script-ps1
.
Startup scripts passed to the VM by using metadata keys beginning with windows-startup-script
run on every boot after the VM's initial boot.
Value: add the following script:
# Installing IIS
Import-Module servermanager
Install-WindowsFeature Web-Server -IncludeAllSubFeature
# Ensure the directory exists
if (-not (Test-Path("C:\inetpub\wwwroot"))) {New-Item "C:\inetpub\wwwroot" -Type Directory}
# Write the expanded string out to the file, overwriting the file if it already exists.
"<html><body><p>Windows startup script added directly.</p></body></html>" | Out-File -FilePath C:\inetpub\wwwroot\index.html -Encoding ascii -Force
Click Create.
Passing a Windows startup script directly to an existing VM
In the Google Cloud console, go to the VM instances page.
Click the Name of the VM.
Click Edit.
Under Metadata, specify the following:
key
: windows-startup-script-ps1
value
: the contents of the startup scriptVerifying the startup script
After the VM starts, view the external IP in a web browser to verify that the startup script created the website. You might have to wait about 10 minutes for the sample startup script to finish.
gcloud (Bash)Passing a Windows startup script directly to a new VM
Pass the contents of a startup script directly to a Windows Server VM when you create it by using the following gcloud compute instances create
command:
gcloud compute instances create VM_NAME \ --image-project=windows-cloud \ --image-family=windows-2019-core \ --metadata=windows-startup-script-ps1='Import-Module servermanager Install-WindowsFeature Web-Server -IncludeAllSubFeature "<html><body><p>Windows startup script added directly.</p></body></html>" > C:\inetpub\wwwroot\index.html'
Replace VM_NAME with the name of the VM.
Passing a Windows startup script directly to an existing VMAdd the startup script directly to an existing VM by using the following gcloud compute instances add-metadata
command:
gcloud compute instances add-metadata VM_NAME \ --image-project=windows-cloud \ --image-family=windows-2019-core \ --metadata=windows-startup-script-ps1='Import-Module servermanager Install-WindowsFeature Web-Server -IncludeAllSubFeature "<html><body><p>Windows startup script added directly.</p></body></html>" > C:\inetpub\wwwroot\index.html'
Replace VM_NAME with the name of the VM.
Verifying the startup scriptAfter the VM starts, view the external IP in a web browser to verify that the startup script created the web site. You might have to wait about 10 minutes for the sample startup script to finish.
gcloud (Command Prompt)Passing a Windows startup script directly to a new VM
Pass the contents of a startup script directly to a Windows Server VM when you create it by using the following gcloud compute instances create
command:
gcloud compute instances create VM_NAME ^ --image-project=windows-cloud ^ --image-family=windows-2019-core ^ --metadata=windows-startup-script-ps1='Import-Module servermanager Install-WindowsFeature Web-Server -IncludeAllSubFeature "<html><body><p>Windows startup script added directly.</p></body></html>" > C:\inetpub\wwwroot\index.html'
Replace VM_NAME with the name of the VM.
Passing a Windows startup script directly to an existing VMAdd the startup script directly to an existing VM by using the following gcloud compute instances add-metadata
command:
gcloud compute instances add-metadata VM_NAME ^ --image-project=windows-cloud ^ --image-family=windows-2019-core ^ --metadata=windows-startup-script-ps1='Import-Module servermanager Install-WindowsFeature Web-Server -IncludeAllSubFeature "<html><body><p>Windows startup script added directly.</p></body></html>" > C:\inetpub\wwwroot\index.html'
Replace VM_NAME with the name of the VM.
Verifying the startup scriptAfter the VM starts, view the external IP in a web browser to verify that the startup script created the web site. You might have to wait about 10 minutes for the sample startup script to finish.
gcloud (PowerShell)Passing a Windows startup script directly to a new VM
Pass the contents of a startup script directly to a Windows Server VM when you create it by using the following gcloud compute instances create
command:
gcloud compute instances create VM_NAME ` --image-project=windows-cloud ` --image-family=windows-2019-core ` --metadata=windows-startup-script-ps1='Import-Module servermanager Install-WindowsFeature Web-Server -IncludeAllSubFeature "<html><body><p>Windows startup script added directly.</p></body></html>" > C:\inetpub\wwwroot\index.html'
Replace VM_NAME with the name of the VM.
Passing a Windows startup script directly to an existing VMAdd the startup script directly to an existing VM by using the following gcloud compute instances add-metadata
command:
gcloud compute instances add-metadata VM_NAME ` --image-project=windows-cloud ` --image-family=windows-2019-core ` --metadata=windows-startup-script-ps1='Import-Module servermanager Install-WindowsFeature Web-Server -IncludeAllSubFeature "<html><body><p>Windows startup script added directly.</p></body></html>" > C:\inetpub\wwwroot\index.html'
Replace VM_NAME with the name of the VM.
Verifying the startup scriptAfter the VM starts, view the external IP in a web browser to verify that the startup script created the web site. You might have to wait about 10 minutes for the sample startup script to finish.
RESTPassing a Windows startup script directly to a new VM
Pass the contents of a startup script directly to a Windows Server VM when you create it by using the following instances.insert
method.
POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/instances { ... "networkInterfaces": [ { "accessConfigs": [ { "type": "ONE_TO_ONE_NAT" } ] } ], "metadata": { "items": [ { "key": "windows-startup-script-ps1", "value": "Import-Module servermanager\nInstall-WindowsFeature Web-Server -IncludeAllSubFeature\necho '<html><body><p>Windows startup script added directly.</p></body></html>' > C:\\inetpub\\wwwroot\\index.html" } ] }, ... }
Replace the following:
PROJECT_ID: the project ID.
ZONE: the zone to create the VM in.
Passing a Windows startup script directly to an existing VM
Get the metadata.fingerprint
value of the VM by using the instances.get
method:
GET https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/instances/VM_NAME
Replace the following:
PROJECT_ID: the ID of the project where the VM exists.
ZONE: the zone of the VM.
VM_NAME: the name of the VM.
Pass the startup script by using the fingerprint
value, along with the metadata key and value for the startup script, in a call to the instances.setMetadata
method:
POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/instances/VM_NAME/setMetadata { "fingerprint": FINGERPRINT, "items": [ { "key": "windows-startup-script-ps1", "value": "Import-Module servermanager\nInstall-WindowsFeature Web-Server -IncludeAllSubFeature\necho '<html><body><p>Windows startup script added directly.</p></body></html>' > C:\\inetpub\\wwwroot\\index.html" } ], ... }
Replace the following:
PROJECT_ID: the ID of the project where the VM exists.
ZONE: the zone of the VM.
VM_NAME: the name of the VM.
FINGERPRINT: the metadata.fingerprint
value obtained by using the instances.get
method.
Verifying the startup script
After the VM starts, view the external IP in a web browser to verify that the startup script created the website. You might have to wait about 10 minutes for the sample startup script to finish.
Passing a Windows startup script from a local file Permissions required for this taskTo perform this task, you must have the following permissions:
compute.instances.setMetadata
on the VM.You can store a startup script in a local batch file, Command shell script, or unsigned PowerShell script on your workstation and pass the local file as metadata to a VM when you create it. You cannot use files stored on VMs as startup scripts.
Before passing a Windows startup script from a local file to a VM, do the following:
Create a local (.ps1
) file to store the startup script.
Note the relative path from gcloud CLI to the startup script.
Add the following startup script to the file:
# Installing IIS
Import-Module servermanager
Install-WindowsFeature Web-Server -IncludeAllSubFeature
# Ensure the directory exists
if (-not (Test-Path("C:\inetpub\wwwroot"))) {New-Item "C:\inetpub\wwwroot" -Type Directory}
# Write the expanded string out to the file, overwriting the file if it already exists.
"<html><body><p>Windows startup script passed from a file on your local workstation.</p></body></html>" | Out-File -FilePath C:\inetpub\wwwroot\index.html -Encoding ascii -Force
Passing a Windows startup script from a local file to a new VM
Create a VM and pass the contents of a local file to be used as the startup script by using the gcloud compute instances create
command with the --metadata-from-file
flag:
gcloud compute instances create VM_NAME \ --image-project=windows-cloud \ --image-family=windows-2019-core \ --metadata-from-file=windows-startup-script-ps1=FILE_PATH
Replace the following:
Pass a startup script to an existing VM from a local file by using the following gcloud compute instances add-metadata
command:
gcloud compute instances add-metadata VM_NAME \ --metadata-from-file=windows-startup-script-ps1=FILE_PATH
Replace the following:
View the external IP in a web browser to verify that the startup script created the web site. You might have to wait about 10 minutes for the sample startup script to finish.
gcloud (Command Prompt)Passing a Windows startup script from a local file to a new VM
Create a VM and pass the contents of a local file to be used as the startup script by using the gcloud compute instances create
command with the --metadata-from-file
flag:
gcloud compute instances create VM_NAME ^ --image-project=windows-cloud ^ --image-family=windows-2019-core ^ --metadata-from-file=windows-startup-script-ps1=FILE_PATH
Replace the following:
Pass a startup script to an existing VM from a local file by using the following gcloud compute instances add-metadata
command:
gcloud compute instances add-metadata VM_NAME ^ --metadata-from-file=windows-startup-script-ps1=FILE_PATH
Replace the following:
View the external IP in a web browser to verify that the startup script created the web site. You might have to wait about 10 minutes for the sample startup script to finish.
gcloud (PowerShell)Passing a Windows startup script from a local file to a new VM
Create a VM and pass the contents of a local file to be used as the startup script by using the gcloud compute instances create
command with the --metadata-from-file
flag:
gcloud compute instances create VM_NAME ` --image-project=windows-cloud ` --image-family=windows-2019-core ` --metadata-from-file=windows-startup-script-ps1=FILE_PATH
Replace the following:
Pass a startup script to an existing VM from a local file by using the following gcloud compute instances add-metadata
command:
gcloud compute instances add-metadata VM_NAME ` --metadata-from-file=windows-startup-script-ps1=FILE_PATH
Replace the following:
View the external IP in a web browser to verify that the startup script created the web site. You might have to wait about 10 minutes for the sample startup script to finish.
Passing a Windows startup script from Cloud Storage Permissions required for this taskTo perform this task, you must have the following permissions:
compute.instances.setMetadata
on the VM.You can store a startup script as a batch file, Command shell script, signed/unsigned PowerShell script or executable in Cloud Storage and pass it to a VM when you create it. After you add a startup script to Cloud Storage, you have a URL that you can use to reference the startup script when you create a VM.
Before adding a startup script from a Cloud Storage bucket, do the following:
Create a file to store the startup script. This example uses a PowerShell (.ps1
) file.
Add the following PowerShell script to the file, which installs a web server and creates a simple web page:
# Installing IIS
Import-Module servermanager
Install-WindowsFeature Web-Server -IncludeAllSubFeature
# Ensure the directory exists
if (-not (Test-Path("C:\inetpub\wwwroot"))) {New-Item "C:\inetpub\wwwroot" -Type Directory}
# Write the expanded string out to the file, overwriting the file if it already exists.
"<html><body><p>Windows startup script passed from Cloud Storage.</p></body></html>" | Out-File -FilePath C:\inetpub\wwwroot\index.html -Encoding ascii -Force
By default, project owners and project editors can access Cloud Storage files in the same project, unless there are explicit access controls that disallow it.
If the Cloud Storage bucket or object is less secure than metadata, there is a risk of privilege escalation if the startup script is modified and the VM reboots. This is because after the VM reboots, the startup script runs as LocalSystem
and can then use the permissions of the attached service account to access other resources.
Passing a startup script that is stored in Cloud Storage to a new VM
In the Google Cloud console, go to the Create an instance page.
For Boot disk, select Change, and do the following:
In the Identity and API access section, select a service account that has the Storage Object Viewer role.
Expand the Advanced options section, and then do the following:
In the Metadata section, add values for the following:
Key: the metadata key. Specify the windows-startup-script-url
metadata key so the script runs during every boot after the initial boot.
Value: the metadata value. Set to the Cloud Storage location of the startup script file using one of the following formats:
https://storage.googleapis.com/BUCKET/FILE
gs://BUCKET/FILE
Replace the following:
To create the VM, click Create.
Passing a startup script that is stored in Cloud Storage to an existing VM
In the Google Cloud console, go to the VM instances page.
Click the Name of the VM.
Click Edit.
Under Metadata, add the following values:
https://storage.googleapis.com/BUCKET/FILE
gs://BUCKET/FILE
Verifying the startup script
View the external IP in a web browser to verify that the startup script created the website. You might have to wait about 10 minutes for the sample startup script to finish.
gcloud (Bash)Passing a startup script that is stored in Cloud Storage to a new VM
Pass a startup script that is stored in Cloud Storage to a Windows Server VM by using the following gcloud compute instances create
command. For the value of the --scopes
flag, use storage-ro
so the VM can access Cloud Storage.
gcloud compute instances create VM_NAME \ --image-project=windows-cloud \ --image-family=windows-2019-core \ --scopes=storage-ro \ --metadata=windows-startup-script-url=CLOUD_STORAGE_URL
Replace the following:
https://storage.googleapis.com/BUCKET/FILE
gs://BUCKET/FILE
Pass a startup script that is stored in Cloud Storage to an existing VM by using the following gcloud compute instances add-metadata
command:
gcloud compute instances add-metadata VM_NAME \ --metadata=windows-startup-script-url=CLOUD_STORAGE_URL
Replace the following:
https://storage.googleapis.com/BUCKET/FILE
gs://BUCKET/FILE
View the external IP in a web browser to verify that the startup script created the web site. You might have to wait about 10 minutes for the sample startup script to finish.
gcloud (Command Prompt)Passing a startup script that is stored in Cloud Storage to a new VM
Pass a startup script that is stored in Cloud Storage to a Windows Server VM by using the following gcloud compute instances create
command. For the value of the --scopes
flag, use storage-ro
so the VM can access Cloud Storage.
gcloud compute instances create VM_NAME ^ --image-project=windows-cloud ^ --image-family=windows-2019-core ^ --scopes=storage-ro ^ --metadata=windows-startup-script-url=CLOUD_STORAGE_URL
Replace the following:
https://storage.googleapis.com/BUCKET/FILE
gs://BUCKET/FILE
Pass a startup script that is stored in Cloud Storage to an existing VM by using the following gcloud compute instances add-metadata
command:
gcloud compute instances add-metadata VM_NAME ^ --metadata=windows-startup-script-url=CLOUD_STORAGE_URL
Replace the following:
https://storage.googleapis.com/BUCKET/FILE
gs://BUCKET/FILE
View the external IP in a web browser to verify that the startup script created the web site. You might have to wait about 10 minutes for the sample startup script to finish.
gcloud (PowerShell)Passing a startup script that is stored in Cloud Storage to a new VM
Pass a startup script that is stored in Cloud Storage to a Windows Server VM by using the following gcloud compute instances create
command. For the value of the --scopes
flag, use storage-ro
so the VM can access Cloud Storage.
gcloud compute instances create VM_NAME ` --image-project=windows-cloud ` --image-family=windows-2019-core ` --scopes=storage-ro ` --metadata=windows-startup-script-url=CLOUD_STORAGE_URL
Replace the following:
https://storage.googleapis.com/BUCKET/FILE
gs://BUCKET/FILE
Pass a startup script that is stored in Cloud Storage to an existing VM by using the following gcloud compute instances add-metadata
command:
gcloud compute instances add-metadata VM_NAME ` --metadata=windows-startup-script-url=CLOUD_STORAGE_URL
Replace the following:
https://storage.googleapis.com/BUCKET/FILE
gs://BUCKET/FILE
View the external IP in a web browser to verify that the startup script created the web site. You might have to wait about 10 minutes for the sample startup script to finish.
RESTPassing a startup script that is stored in Cloud Storage to a new VM
Pass a startup script that is stored in Cloud Storage to a Windows Server VM by using the following instances.insert
method. To the scopes
field, add https://www.googleapis.com/auth/devstorage.read_only
so the VM can access Cloud Storage.
POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/instances { ... "networkInterfaces": [ { "accessConfigs": [ { "type": "ONE_TO_ONE_NAT" } ] } ], "serviceAccounts": [ { "email": "default", "scopes": [ "https://www.googleapis.com/auth/devstorage.read_only" ] } ], "metadata": { "items": [ { "key": "windows-startup-script-url", "value": "CLOUD_STORAGE_URL" }, ... ] }, ... }
Replace the following:
PROJECT_ID: the project ID.
ZONE: the zone to create the VM in.
CLOUD_STORAGE_URL: the metadata value. Set to the Cloud Storage location of the startup script file using one of the following formats:
https://storage.googleapis.com/BUCKET/FILE
gs://BUCKET/FILE
Passing a startup script that is stored in Cloud Storage to an existing VM
Get the metadata.fingerprint
value of the VM by using the instances.get
method:
GET https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/instances/VM_NAME
Replace the following:
PROJECT_ID: the ID of the project where the VM exists.
ZONE: the zone of the VM.
VM_NAME: the name of the VM
Pass the startup script by using the fingerprint
value, along with the metadata key and value for the startup script, in a call to the instances.setMetadata
method:
POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/instances/VM_NAME/setMetadata { "fingerprint": FINGERPRINT, "items": [ { "key": "windows-startup-script-url", "value": "CLOUD_STORAGE_URL" } ], ... }
Replace the following:
PROJECT_ID: the ID of the project where the VM exists.
ZONE: the zone of the VM.
VM_NAME: the name of the VM.
FINGERPRINT: the metadata.fingerprint
value obtained by using the instances.get
method.
CLOUD_STORAGE_URL: the metadata value. Set to the Cloud Storage location of the startup script file using one of the following formats:
https://storage.googleapis.com/BUCKET/FILE
gs://BUCKET/FILE
Verifying the startup script
View the external IP in a web browser to verify that the startup script created the website. You might have to wait about 10 minutes for the sample startup script to finish.
In a startup script you can access metadata values. For example, you can use the same script for multiple VMs, and parameterize each script individually by passing different metadata values to each VM.
To access a custom metadata value from a startup script, do the following:
Create a startup script that queries the value of a metadata key. For example, the following PowerShell (.ps1
) startup script queries the value of the foo
metadata key.
$METADATA_VALUE = (Invoke-RestMethod -Headers @{'Metadata-Flavor' = 'Google'} -Uri "http://metadata.google.internal/computeMetadata/v1/instance/attributes/foo")
# Installing IIS
Import-Module servermanager
Install-WindowsFeature Web-Server -IncludeAllSubFeature
# Ensure the directory exists
if (-not (Test-Path("C:\inetpub\wwwroot"))) {New-Item "C:\inetpub\wwwroot" -Type Directory}
# Write the expanded string out to the file, overwriting the file if it already exists.
"<html><body><p>Accessing metadata value of foo: $METADATA_VALUE</p></body></html>" | Out-File -FilePath C:\inetpub\wwwroot\index.html -Encoding ascii -Force
Set the value of the foo
metadata key when creating a VM by using the following gcloud compute instances create
command. For this example, the startup script is passed to the VM from a local file.
gcloud compute instances create VM_NAME \ --image-project=windows-cloud \ --image-family=windows-2019 \ --metadata-from-file=windows-startup-script-ps1=FILE_PATH \ --metadata=foo=bar
Replace the following:
VM_NAME: the name of the VM
FILE_PATH: the relative path to the startup script file
For more information about how to specify a metadata key-value pair, see Set and remove custom metadata.
View the external IP in a web browser to verify that the startup script outputs the value of foo
. You might have to wait about 10 minutes for the sample startup script to finish.
Rerun a startup script on a Windows VM by doing the following:
Running the following command:
C:\Program Files\Google\Compute Engine\metadata_scripts\run_startup_scripts.cmd
View the output from a Windows Server startup script by using any of the following and checking for GCEMetadataScripts
events:
Serial port 1 in the Google Cloud console. For more information, see Viewing serial port output.
Windows Event Viewer's Application Log.
IAP Desktop from a Windows workstation. For more information, see the GoogleCloudPlatform/iap-desktop repository on GitHub.
Learn how to use startup scripts on Linux VMs.
Learn how to add a shutdown script.
Learn more about VM metadata.
Learn how to run startup scripts on Windows VMs and join a Managed Microsoft AD domain.
RetroSearch is an open source project built by @garambo | Open a GitHub Issue
Search and Browse the WWW like it's 1997 | Search results from DuckDuckGo
HTML:
3.2
| Encoding:
UTF-8
| Version:
0.7.4