Startskripts auf Windows-VMs verwenden


Ein Startskript ist eine Datei, die während des Startvorgangs einer VM-Instanz Aufgaben ausführt. Startskripts können für alle VMs in einem Projekt oder für eine einzelne VM gelten. Durch Metadaten auf VM-Ebene angegebene Startskripts überschreiben Startskripts, die durch Metadaten auf Projektebene angegeben werden, und Startskripts werden nur ausgeführt, wenn ein Netzwerk verfügbar ist. In diesem Dokument wird beschrieben, wie Startskripts auf Windows Server-VM-Instanzen verwendet werden. Informationen zum Hinzufügen eines Startskripts auf Projektebene finden Sie unter gcloud compute project-info add-metadata.

Windows-Startskripts müssen Command Shell-Skripts (.cmd), PowerShell-Skripts (.ps1) oder Batch-Dateiskripts (.bat) sein und die entsprechende Dateiendung haben.

Wenn Sie mithilfe eines der Verfahren in diesem Dokument ein Startskript angeben, führt Compute Engine folgende Schritte aus:

  1. Kopiert das Startskript auf die VM

  2. Task Scheduler führt das Startskript als LocalSystem-Konto aus, wenn die VM gebootet wird

Informationen zu den verschiedenen Aufgaben in Bezug auf Startskripts und wann die Ausführung der jeweiligen Aufgaben stattfinden soll, finden Sie im Übersichtsdokument für Startskripts.

Hinweise

  • Lesen Sie die Übersicht über Startskripts.
  • Grundlagen von VM-Metadaten
  • Richten Sie die Authentifizierung ein, falls Sie dies noch nicht getan haben. Bei der Authentifizierung wird Ihre Identität für den Zugriff auf Google Cloud-Dienste und APIs überprüft. Zur Ausführung von Code oder Beispielen aus einer lokalen Entwicklungsumgebung können Sie sich bei Compute Engine authentifizieren. Wählen Sie dazu eine der folgenden Optionen aus:

    Select the tab for how you plan to use the samples on this page:

    Console

    When you use the Google Cloud console to access Google Cloud services and APIs, you don't need to set up authentication.

    gcloud

    1. Install the Google Cloud CLI, then initialize it by running the following command:

      gcloud init
    2. Set a default region and zone.
    3. REST

      Verwenden Sie die von der gcloud CLI bereitgestellten Anmeldedaten, um die REST API-Beispiele auf dieser Seite in einer lokalen Entwicklungsumgebung zu verwenden.

        Install the Google Cloud CLI, then initialize it by running the following command:

        gcloud init

      Weitere Informationen finden Sie unter Für die Verwendung von REST authentifizieren in der Dokumentation zur Google Cloud-Authentifizierung.

Metadatenschlüssel für Windows-Startskripts

Ein Startskript wird von einem durch einen Metadatenschlüssel angegebenen Speicherort an eine VM übergeben. Ein Metadatenschlüssel gibt an, ob das Startskript lokal, in Cloud Storage gespeichert oder direkt an die VM übergeben wird. Der verwendete Metadatenschlüssel kann auch von der Größe oder dem Dateityp des Startskripts abhängen.

Die folgende Tabelle enthält die Metadatenschlüssel, die Sie für Windows-Startskripts verwenden können. Basierend auf dem Speicherort, der Größe und dem Dateityp des Startskripts finden Sie Informationen dazu, welche Schlüssel zu verwenden sind.

Metadatenschlüssel Nutzen für
sysprep-specialize-script-ps1 Übergabe eines nicht signierten PowerShell-Skripts, das lokal gespeichert oder direkt hinzugefügt wird und eine Größe von bis zu 256 KB hat
sysprep-specialize-script-cmd Übergabe eines Befehls-Shell-Skripts, das lokal gespeichert oder direkt hinzugefügt wird und bis zu 256 KB groß ist
sysprep-specialize-script-bat Übergabe eines Batchdateiskripts, das lokal gespeichert oder direkt hinzugefügt wird und eine Größe von bis zu 256 KB hat
sysprep-specialize-script-url Übergabe eines Batchdatei-, eines Befehls-Shells-, eines signierten oder nicht signierten PowerShell-Skripts oder ausführbarer Datei, das bzw. die in Cloud Storage gespeichert ist und eine Größe von mehr als 256 KB hat
windows-startup-script-ps1 Übergabe eines nicht signierten PowerShell-Skripts, das lokal gespeichert oder direkt hinzugefügt wird und eine Größe von bis zu 256 KB hat
windows-startup-script-cmd Übergabe eines Befehls-Shell-Skripts, das lokal gespeichert oder direkt hinzugefügt wird und bis zu 256 KB groß ist
windows-startup-script-bat Übergabe eines Batchdateiskripts, das lokal gespeichert oder direkt hinzugefügt wird und eine Größe von bis zu 256 KB hat
windows-startup-script-url Übergabe eines Batchdatei-, eines Befehls-Shells-, eines signierten oder nicht signierten PowerShell-Skripts oder ausführbarer Datei, das bzw. die in Cloud Storage gespeichert ist und eine Größe von mehr als 256 KB hat

Weitere Informationen zur Ausführungsreihenfolge der verschiedenen Startskripttypen finden Sie im Repository GoogleCloudPlatform/compute-image-windows auf GitHub.

Reihenfolge der Ausführung von Windows-Startskripts

Sie können mehrere Startskripts verwenden. Startskripts oder direkt hinzugefügte Startskripts werden vor in Cloud Storage gespeicherten Startskripts ausgeführt. Der Typ der Datei, die das Skript enthält, wirkt sich auch auf die Ausführungsreihenfolge aus. Die folgende Tabelle zeigt basierend auf dem Metadatenschlüssel die Reihenfolge der Ausführung von Windows-Startskripts.

Metadatenschlüssel Ausführungsreihenfolge
sysprep-specialize-script-ps1 Als Erstes beim ersten Start
sysprep-specialize-script-cmd Als Zweites während des ersten Starts
sysprep-specialize-script-bat Als Drittes beim ersten Start
sysprep-specialize-script-url Als Viertes beim ersten Start
windows-startup-script-ps1 Als Erstes bei jedem Start nach dem ersten Start
windows-startup-script-cmd Als Zweites während jedem Start nach dem ersten Start
windows-startup-script-bat Als Drittes bei jedem Start nach dem ersten Start
windows-startup-script-url Als Viertes bei jedem Start nach dem ersten Start

Windows-Startskript direkt übergeben

Übergeben des Inhalts einer Batchdatei, einer Befehls-Shell oder eines nicht signierten PowerShell-Startskripts direkt an eine Windows Server-VM. Die folgenden Verfahren zeigen, wie Sie ein nicht signiertes PowerShell-Skript übergeben.

Console

Windows-Startskript direkt an eine neue VM übergeben

  1. Rufen Sie in der Google Cloud Console die Seite Instanz erstellen auf.

    Zur Seite „Instanz erstellen“

  2. Wählen Sie für Bootlaufwerk die Option Ändern aus und gehen Sie so vor:

    1. Wählen Sie auf dem Tab Öffentliche Images ein Windows Server-Betriebssystem aus.
    2. Klicken Sie auf Auswählen.
  3. Maximieren Sie den Abschnitt Erweiterte Optionen und tun Sie Folgendes:

    1. Maximieren Sie den Bereich Verwaltung.
    2. Klicken Sie im Abschnitt Metadaten auf Element hinzufügen, um Schlüssel und Wert festzulegen:

      • Schlüssel: Legen Sie windows-startup-script-ps1 fest.

        Startskripts, die mithilfe von Metadatenschlüsseln an die VM übergeben werden, die mit windows-startup-script beginnen, werden bei jedem Start nach dem ersten Start der VM ausgeführt.

      • Wert: Fügen Sie das folgende Skript hinzu:

        # 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
        
  4. Klicken Sie auf Erstellen.

Windows-Startskript direkt an eine vorhandene VM übergeben

  1. Rufen Sie in der Google Cloud Console die Seite VM-Instanzen auf.

    Zu Seite „VM-Instanzen“

  2. Klicken Sie auf den Namen der VM.

  3. Klicken Sie auf Bearbeiten.

  4. Geben Sie unter Metadaten Folgendes an:

    • key: windows-startup-script-ps1
    • value: der Inhalt des Startskripts

Startskript überprüfen

Rufen Sie nach dem Start der VM die externe IP-Adresse in einem Webbrowser auf, um zu prüfen, ob die Website vom Startskript erstellt wurde. Es kann etwa zehn Minuten dauern, bis das Beispiel-Startskript abgeschlossen ist.

gcloud (Bash)

Windows-Startskript direkt an eine neue VM übergeben

Übergeben Sie mit dem folgenden gcloud compute instances create-Befehl den Inhalt eines Startskripts direkt an eine Windows Server-VM, wenn Sie es erstellen:

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'

Ersetzen Sie VM_NAME durch den Namen der VM.

Windows-Startskript direkt an eine vorhandene VM übergeben

Fügen Sie das Startskript mit dem folgenden gcloud compute instances add-metadata-Befehl direkt einer vorhandenen VM hinzu:

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'

Ersetzen Sie VM_NAME durch den Namen der VM.

Startskript überprüfen

Rufen Sie nach dem Start der VM die externe IP-Adresse in einem Webbrowser auf, um zu prüfen, ob die Website vom Startskript erstellt wurde. Es kann etwa zehn Minuten dauern, bis das Beispiel-Startskript abgeschlossen ist.

gcloud (Eingabeaufforderung)

Windows-Startskript direkt an eine neue VM übergeben

Übergeben Sie mit dem folgenden gcloud compute instances create-Befehl den Inhalt eines Startskripts direkt an eine Windows Server-VM, wenn Sie es erstellen:

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'

Ersetzen Sie VM_NAME durch den Namen der VM.

Windows-Startskript direkt an eine vorhandene VM übergeben

Fügen Sie das Startskript mit dem folgenden gcloud compute instances add-metadata-Befehl direkt einer vorhandenen VM hinzu:

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'

Ersetzen Sie VM_NAME durch den Namen der VM.

Startskript überprüfen

Rufen Sie nach dem Start der VM die externe IP-Adresse in einem Webbrowser auf, um zu prüfen, ob die Website vom Startskript erstellt wurde. Es kann etwa zehn Minuten dauern, bis das Beispiel-Startskript abgeschlossen ist.

gcloud (PowerShell)

Windows-Startskript direkt an eine neue VM übergeben

Übergeben Sie mit dem folgenden gcloud compute instances create-Befehl den Inhalt eines Startskripts direkt an eine Windows Server-VM, wenn Sie es erstellen:

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'

Ersetzen Sie VM_NAME durch den Namen der VM.

Windows-Startskript direkt an eine vorhandene VM übergeben

Fügen Sie das Startskript mit dem folgenden gcloud compute instances add-metadata-Befehl direkt einer vorhandenen VM hinzu:

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'

Ersetzen Sie VM_NAME durch den Namen der VM.

Startskript überprüfen

Rufen Sie nach dem Start der VM die externe IP-Adresse in einem Webbrowser auf, um zu prüfen, ob die Website vom Startskript erstellt wurde. Es kann etwa zehn Minuten dauern, bis das Beispiel-Startskript abgeschlossen ist.

REST

Windows-Startskript direkt an eine neue VM übergeben

Übergeben Sie mit dem folgenden instances.insert-Befehl den Inhalt eines Startskripts direkt an eine Windows Server-VM, wenn Sie es erstellen:

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"
      }
    ]
  },
  ...
}

Dabei gilt:

  • PROJECT_ID: die Projekt-ID

  • ZONE ist die Zone, in der die neue VM erstellt werden soll.

Windows-Startskript direkt an eine vorhandene VM übergeben

  1. Rufen Sie den Wert tags.fingerprint der VM mit der Methode instances.get ab.

    GET https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/instances/VM_NAME
    

    Dabei gilt:

    • PROJECT_ID: die Projekt-ID

    • ZONE: Zone der VM

    • VM_NAME: die Zone der VM

  2. Übergeben Sie das Startskript mithilfe des Werts fingerprint zusammen mit dem Metadatenschlüssel und dem Wert für das Startskript in einem Aufruf der Methode instances.setMetadata.

    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"
       }
     ],
     ...
    }
    

    Dabei gilt:

    • PROJECT_ID: die Projekt-ID

    • ZONE: Zone der VM

    • VM_NAME: die Zone der VM

    • FINGERPRINT: Der Wert für tags.fingerprint, der mit der Methode instances.get abgerufen wurde

Startskript überprüfen

Rufen Sie nach dem Start der VM die externe IP-Adresse in einem Webbrowser auf, um zu prüfen, ob die Website vom Startskript erstellt wurde. Es kann etwa zehn Minuten dauern, bis das Beispiel-Startskript abgeschlossen ist.

Windows-Startskript aus einer lokalen Datei übergeben

Sie können ein Startskript in einer lokalen Batchdatei, in einem Befehls-Shell-Skript oder in einem nicht signierten PowerShell-Skript auf Ihrer Workstation speichern und die lokale Datei beim Erstellen als Metadaten an eine VM übergeben. Auf VMs gespeicherte Dateien können nicht als Startskripts verwendet werden.

Bevor Sie ein Windows-Startskript aus einer lokalen Datei an eine VM übergeben, gehen Sie so vor:

  1. Erstellen Sie eine lokale Datei (.ps1), um das Startskript zu speichern.

  2. Notieren Sie sich den relativen Pfad von der gcloud CLI zum Startskript.

  3. Fügen Sie der Datei das folgende Startskript hinzu:

    # 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
    

gcloud (Bash)

Windows-Startskript aus einer lokalen Datei an eine neue VM übergeben

Erstellen Sie eine VM und übergeben Sie den Inhalt einer lokalen Datei, die als Startskript verwendet werden soll, mit dem Befehl gcloud compute instances create zusammen mit dem Flag --metadata-from-file:

gcloud compute instances create VM_NAME \
  --image-project=windows-cloud \
  --image-family=windows-2019-core \
  --metadata-from-file=windows-startup-script-ps1=FILE_PATH

Dabei gilt:

  • VM_NAME: Der Name der VM
  • FILE_PATH: der relative Pfad zur Startskriptdatei
Windows-Startskript aus einer lokalen Datei an eine vorhandene VM übergeben

Verwenden Sie folgenden gcloud compute instances add-metadata-Befehl, um ein Startskript aus einer lokalen Datei an eine vorhandene VM zu übergeben:

gcloud compute instances add-metadata VM_NAME \
  --metadata-from-file=windows-startup-script-ps1=FILE_PATH

Dabei gilt:

  • VM_NAME: Der Name der VM
  • FILE_PATH: der relative Pfad zur Startskriptdatei
Startskript überprüfen

Rufen Sie die externe IP-Adresse in einem Webbrowser auf, um zu prüfen, ob das Startskript die Website erstellt hat. Es kann etwa zehn Minuten dauern, bis das Beispiel-Startskript abgeschlossen ist.

gcloud (Eingabeaufforderung)

Windows-Startskript aus einer lokalen Datei an eine neue VM übergeben

Erstellen Sie eine VM und übergeben Sie den Inhalt einer lokalen Datei, die als Startskript verwendet werden soll, mit dem Befehl gcloud compute instances create zusammen mit dem Flag --metadata-from-file:

gcloud compute instances create VM_NAME ^
  --image-project=windows-cloud ^
  --image-family=windows-2019-core ^
  --metadata-from-file=windows-startup-script-ps1=FILE_PATH

Dabei gilt:

  • VM_NAME: Der Name der VM
  • FILE_PATH: der relative Pfad zur Startskriptdatei
Windows-Startskript aus einer lokalen Datei an eine vorhandene VM übergeben

Verwenden Sie folgenden gcloud compute instances add-metadata-Befehl, um ein Startskript aus einer lokalen Datei an eine vorhandene VM zu übergeben:

gcloud compute instances add-metadata VM_NAME ^
  --metadata-from-file=windows-startup-script-ps1=FILE_PATH

Dabei gilt:

  • VM_NAME: Der Name der VM
  • FILE_PATH: der relative Pfad zur Startskriptdatei
Startskript überprüfen

Rufen Sie die externe IP-Adresse in einem Webbrowser auf, um zu prüfen, ob das Startskript die Website erstellt hat. Es kann etwa zehn Minuten dauern, bis das Beispiel-Startskript abgeschlossen ist.

gcloud (PowerShell)

Windows-Startskript aus einer lokalen Datei an eine neue VM übergeben

Erstellen Sie eine VM und übergeben Sie den Inhalt einer lokalen Datei, die als Startskript verwendet werden soll, mit dem Befehl gcloud compute instances create zusammen mit dem Flag --metadata-from-file:

gcloud compute instances create VM_NAME `
  --image-project=windows-cloud `
  --image-family=windows-2019-core `
  --metadata-from-file=windows-startup-script-ps1=FILE_PATH

Dabei gilt:

  • VM_NAME: Der Name der VM
  • FILE_PATH: der relative Pfad zur Startskriptdatei
Windows-Startskript aus einer lokalen Datei an eine vorhandene VM übergeben

Verwenden Sie folgenden gcloud compute instances add-metadata-Befehl, um ein Startskript aus einer lokalen Datei an eine vorhandene VM zu übergeben:

gcloud compute instances add-metadata VM_NAME `
  --metadata-from-file=windows-startup-script-ps1=FILE_PATH

Dabei gilt:

  • VM_NAME: Der Name der VM
  • FILE_PATH: der relative Pfad zur Startskriptdatei
Startskript überprüfen

Rufen Sie die externe IP-Adresse in einem Webbrowser auf, um zu prüfen, ob das Startskript die Website erstellt hat. Es kann etwa zehn Minuten dauern, bis das Beispiel-Startskript abgeschlossen ist.

Windows-Startskript aus Cloud Storage übergeben

Sie können ein Startskript als Batchdatei, Befehls-Shell-Skript, signiertes oder unsigniertes PowerShell-Skript oder ausführbare Datei in Cloud Storage speichern und es beim Erstellen an eine VM übergeben. Nachdem Sie Cloud Storage ein Startskript hinzugefügt haben, haben Sie eine URL, mit der Sie beim Erstellen einer VM auf das Startskript verweisen können.

Führen Sie die folgenden Schritte aus, bevor Sie ein Startskript aus einem Cloud Storage-Bucket hinzufügen:

  1. Erstellen Sie eine Datei, in der das Startskript gespeichert wird. In diesem Beispiel wird eine PowerShell-Datei (.ps1) verwendet.

  2. Fügen Sie der Datei das folgende PowerShell-Skript hinzu, das einen Webserver installiert und eine einfache Webseite erstellt:

    # 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
    
  3. Cloud Storage-Bucket erstellen

  4. Laden Sie die Datei in den Cloud Storage-Bucket hoch.

Auswirkungen auf die Sicherheit

  • Standardmäßig können Projektinhaber und Projektbearbeiter auf Cloud Storage-Dateien im selben Projekt zugreifen, außer es gibt explizite Zugriffssteuerungen, die dies verhindern.

  • Wenn der Cloud Storage-Bucket oder das Cloud Storage-Objekt weniger sicher ist als Metadaten, besteht ein Risiko der Rechteausweitung, wenn das Startskript geändert wird und die VM neu gestartet wird. Dies liegt daran, dass das Startskript nach dem Neustart der VM als LocalSystem ausgeführt wird und dann mit den Berechtigungen des angehängten Dienstkontos auf andere Ressourcen zugreifen kann.

Console

In Cloud Storage gespeichertes Startskript an eine neue VM übergeben

  1. Rufen Sie in der Google Cloud Console die Seite Instanz erstellen auf.

    Zur Seite „Instanz erstellen“

  2. Wählen Sie für Bootlaufwerk die Option Ändern aus und gehen Sie so vor:

    1. Wählen Sie auf dem Tab Öffentliche Images ein Windows Server-Betriebssystem aus.
    2. Klicken Sie auf Auswählen.
  3. Wählen Sie im Abschnitt Identität und API-Zugriff ein Dienstkonto mit der Rolle Storage-Objekt-Betrachter aus.

  4. Maximieren Sie den Abschnitt Erweiterte Optionen und gehen Sie dann so vor:

    1. Maximieren Sie den Bereich Verwaltung.
    2. Fügen Sie im Abschnitt Metadaten Werte für Folgendes hinzu:

      • Key (Schlüssel): Metadatenschlüssel Geben Sie den Metadatenschlüssel windows-startup-script-url an, damit das Skript bei jedem Start nach dem ersten Start ausgeführt wird.

      • Wert: Der Metadatenwert. Legen Sie dafür den Cloud Storage-Speicherort der Startskriptdatei in einem der folgenden Formate fest:

        • Authentifizierte URL: https://storage.googleapis.com/BUCKET/FILE
        • gcloud-Speicher-URI: gs://BUCKET/FILE

        Ersetzen Sie Folgendes:

        • BUCKET ist der Name des Buckets, der die Startskriptdatei enthält.
        • FILE: Der Name der Startskriptdatei.
  5. Klicken Sie auf Erstellen, um die VM zu erstellen.

In Cloud Storage gespeichertes Startskript an eine vorhandene VM übergeben

  1. Rufen Sie in der Google Cloud Console die Seite VM-Instanzen auf.

    Zu Seite „VM-Instanzen“

  2. Klicken Sie auf den Namen der VM.

  3. Klicken Sie auf Bearbeiten.

  4. Fügen Sie unter Metadaten die folgenden Werte hinzu:

    • Authentifizierte URL: https://storage.googleapis.com/BUCKET/FILE
    • gcloud-Speicher-URI: gs://BUCKET/FILE

Startskript überprüfen

Rufen Sie die externe IP-Adresse in einem Webbrowser auf, um zu prüfen, ob das Startskript die Website erstellt hat. Es kann etwa zehn Minuten dauern, bis das Beispiel-Startskript abgeschlossen ist.

gcloud (Bash)

In Cloud Storage gespeichertes Startskript an eine neue VM übergeben

Mit dem Befehl gcloud compute instances create übergeben Sie ein in Cloud Storage gespeichertes Startskript an eine Windows Server-VM. Verwenden Sie für den Wert des Flags --scopes storage-ro, damit die VM auf Cloud Storage zugreifen kann.

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

Dabei gilt:

  • VM_NAME: der Name der VM.
  • CLOUD_STORAGE_URL: die Metadatenwerte. Legen Sie den Speicherort der Startskriptdatei in einem der folgenden Formate fest:
    • Authentifizierte URL: https://storage.googleapis.com/BUCKET/FILE
    • gcloud-Speicher-URI: gs://BUCKET/FILE
Übergabe eines Startskripts, das in Cloud Storage gespeichert ist, an eine vorhandene VM

Übergeben Sie ein Startskript, das in Cloud Storage gespeichert ist, mit dem folgenden gcloud compute instances add-metadata-Befehl an eine vorhandene VM:

gcloud compute instances add-metadata VM_NAME \
  --metadata=windows-startup-script-url=CLOUD_STORAGE_URL

Dabei gilt:

  • VM_NAME: der Name der VM.
  • CLOUD_STORAGE_URL: die Metadatenwerte. Legen Sie den Speicherort der Startskriptdatei in einem der folgenden Formate fest:
    • Authentifizierte URL: https://storage.googleapis.com/BUCKET/FILE
    • gcloud-Speicher-URI: gs://BUCKET/FILE
Startskript überprüfen

Rufen Sie die externe IP-Adresse in einem Webbrowser auf, um zu prüfen, ob das Startskript die Website erstellt hat. Es kann etwa zehn Minuten dauern, bis das Beispiel-Startskript abgeschlossen ist.

gcloud (Eingabeaufforderung)

In Cloud Storage gespeichertes Startskript an eine neue VM übergeben

Mit dem Befehl gcloud compute instances create übergeben Sie ein in Cloud Storage gespeichertes Startskript an eine Windows Server-VM. Verwenden Sie für den Wert des Flags --scopes storage-ro, damit die VM auf Cloud Storage zugreifen kann.

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

Dabei gilt:

  • VM_NAME: der Name der VM.
  • CLOUD_STORAGE_URL: die Metadatenwerte. Legen Sie den Speicherort der Startskriptdatei in einem der folgenden Formate fest:
    • Authentifizierte URL: https://storage.googleapis.com/BUCKET/FILE
    • gcloud-Speicher-URI: gs://BUCKET/FILE
Übergabe eines Startskripts, das in Cloud Storage gespeichert ist, an eine vorhandene VM

Übergeben Sie ein Startskript, das in Cloud Storage gespeichert ist, mit dem folgenden gcloud compute instances add-metadata-Befehl an eine vorhandene VM:

gcloud compute instances add-metadata VM_NAME ^
  --metadata=windows-startup-script-url=CLOUD_STORAGE_URL

Dabei gilt:

  • VM_NAME: der Name der VM.
  • CLOUD_STORAGE_URL: die Metadatenwerte. Legen Sie den Speicherort der Startskriptdatei in einem der folgenden Formate fest:
    • Authentifizierte URL: https://storage.googleapis.com/BUCKET/FILE
    • gcloud-Speicher-URI: gs://BUCKET/FILE
Startskript überprüfen

Rufen Sie die externe IP-Adresse in einem Webbrowser auf, um zu prüfen, ob das Startskript die Website erstellt hat. Es kann etwa zehn Minuten dauern, bis das Beispiel-Startskript abgeschlossen ist.

gcloud (PowerShell)

In Cloud Storage gespeichertes Startskript an eine neue VM übergeben

Mit dem Befehl gcloud compute instances create übergeben Sie ein in Cloud Storage gespeichertes Startskript an eine Windows Server-VM. Verwenden Sie für den Wert des Flags --scopes storage-ro, damit die VM auf Cloud Storage zugreifen kann.

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

Dabei gilt:

  • VM_NAME: der Name der VM.
  • CLOUD_STORAGE_URL: die Metadatenwerte. Legen Sie den Speicherort der Startskriptdatei in einem der folgenden Formate fest:
    • Authentifizierte URL: https://storage.googleapis.com/BUCKET/FILE
    • gcloud-Speicher-URI: gs://BUCKET/FILE
Übergabe eines Startskripts, das in Cloud Storage gespeichert ist, an eine vorhandene VM

Übergeben Sie ein Startskript, das in Cloud Storage gespeichert ist, mit dem folgenden gcloud compute instances add-metadata-Befehl an eine vorhandene VM:

gcloud compute instances add-metadata VM_NAME `
  --metadata=windows-startup-script-url=CLOUD_STORAGE_URL

Dabei gilt:

  • VM_NAME: der Name der VM.
  • CLOUD_STORAGE_URL: die Metadatenwerte. Legen Sie den Speicherort der Startskriptdatei in einem der folgenden Formate fest:
    • Authentifizierte URL: https://storage.googleapis.com/BUCKET/FILE
    • gcloud-Speicher-URI: gs://BUCKET/FILE
Startskript überprüfen

Rufen Sie die externe IP-Adresse in einem Webbrowser auf, um zu prüfen, ob das Startskript die Website erstellt hat. Es kann etwa zehn Minuten dauern, bis das Beispiel-Startskript abgeschlossen ist.

REST

In Cloud Storage gespeichertes Startskript an eine neue VM übergeben

Verwenden Sie die folgende instances.insert-Methode, um ein in Cloud Storage gespeichertes Startskript an eine Windows Server-VM zu übergeben. Fügen Sie dem Feld scopes den Wert https://www.googleapis.com/auth/devstorage.read_only hinzu, damit die VM auf Cloud Storage zugreifen kann.

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"
      },
      ...
    ]
  },
  ...
}

Dabei gilt:

  • PROJECT_ID: die Projekt-ID.

  • ZONE ist die Zone, in der die neue VM erstellt werden soll.

  • CLOUD_STORAGE_URL: der Metadatenwert. Legen Sie dafür den Cloud Storage-Speicherort der Startskriptdatei in einem der folgenden Formate fest:

    • Authentifizierte URL: https://storage.googleapis.com/BUCKET/FILE
    • gcloud-Speicher-URI: gs://BUCKET/FILE

In Cloud Storage gespeichertes Startskript an eine vorhandene VM übergeben

  1. Rufen Sie den Wert tags.fingerprint der VM mit der Methode instances.get ab.

    GET https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/instances/VM_NAME
    

    Dabei gilt:

    • PROJECT_ID: die Projekt-ID

    • ZONE: Zone der VM

    • VM_NAME: die Zone der VM

  2. Übergeben Sie das Startskript mithilfe des Werts fingerprint zusammen mit dem Metadatenschlüssel und dem Wert für das Startskript in einem Aufruf der Methode instances.setMetadata.

    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"
        }
      ],
      ...
    }
    

    Dabei gilt:

    • PROJECT_ID: die Projekt-ID.

    • ZONE: Zone der VM.

    • VM_NAME: Die Zone der VM.

    • FINGERPRINT: Der mit der Methode instances.get abgerufene Wert tags.fingerprint.

    • CLOUD_STORAGE_URL: der Metadatenwert. Legen Sie dafür den Cloud Storage-Speicherort der Startskriptdatei in einem der folgenden Formate fest:

      • Authentifizierte URL: https://storage.googleapis.com/BUCKET/FILE
      • gcloud-Speicher-URI: gs://BUCKET/FILE

Startskript überprüfen

Rufen Sie die externe IP-Adresse in einem Webbrowser auf, um zu prüfen, ob das Startskript die Website erstellt hat. Es kann etwa zehn Minuten dauern, bis das Beispiel-Startskript abgeschlossen ist.

Auf Metadaten aus einem Windows-Startskript zugreifen

In einem Startskript können Sie auf Metadatenwerte zugreifen. Sie können beispielsweise dasselbe Skript für mehrere VMs verwenden und jedes Skript einzeln parametrisieren. Dazu übergeben Sie verschiedene Metadatenwerte an jede VM.

So greifen Sie auf einen benutzerdefinierten Metadatenwert von einem Startskript zu:

  1. Erstellen Sie ein Startskript, das den Wert eines Metadatenschlüssels abfragt. Das folgende PowerShell-Startskript (.ps1) fragt beispielsweise den Wert des Metadatenschlüssels foo ab.

    $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
    
  2. Legen Sie den Wert des Metadatenschlüssels foo beim Erstellen einer VM mit dem folgenden gcloud compute instances create-Befehl fest. In diesem Beispiel wird das Startskript von einer lokalen Datei an die VM übergeben.

    gcloud

    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
    

    Dabei gilt:

    • VM_NAME: Der Name der VM

    • FILE_PATH: der relative Pfad zur Startskriptdatei

    Weitere Informationen zum Angeben eines Metadaten-Schlüssel/Wert-Paars finden Sie unter Benutzerdefinierte Metadaten festlegen und entfernen.

  3. Rufen Sie die externe IP-Adresse in einem Webbrowser auf, um zu prüfen, ob das Startskript den Wert von foo ausgibt. Es kann etwa zehn Minuten dauern, bis das Beispiel-Startskript abgeschlossen ist.

Windows-Startskript noch einmal ausführen

So führen Sie ein Startskript auf einer Windows-VM noch einmal aus:

  1. Verbindung zur VM herstellen.

  2. Führen Sie folgenden Befehl aus:

    C:\Program Files\Google\Compute Engine\metadata_scripts\run_startup_scripts.cmd
    

Ausgabe eines Windows-Startskripts ansehen

Sehen Sie sich die Ausgabe eines Windows Server-Startskript an. Verwenden Sie dazu eines der folgenden Dinge und prüfen Sie, ob GCEMetadataScripts-Ereignisse vorhanden sind:

Nächste Schritte