Usar secuencias de comandos de inicio en máquinas virtuales de Windows


Una secuencia de comandos de inicio es un archivo que realiza tareas durante el proceso de inicio de una instancia de máquina virtual (VM). Las secuencias de comandos de inicio se pueden aplicar a todas las VMs de un proyecto o a una sola VM. Las secuencias de comandos de inicio especificadas por los metadatos a nivel de VM anulan las secuencias de comandos de inicio especificadas por los metadatos a nivel de proyecto. Además, las secuencias de comandos de inicio solo se ejecutan cuando hay una red disponible. En este documento se describe cómo usar secuencias de comandos de inicio en instancias de máquina virtual de Windows Server. Para obtener información sobre cómo añadir una secuencia de comandos de inicio a nivel de proyecto, consulta gcloud compute project-info add-metadata.

Las secuencias de comandos de inicio de Windows deben ser de shell de comandos (.cmd), de PowerShell (.ps1) o de archivos por lotes (.bat), y deben tener la extensión de archivo adecuada.

Si especificas una secuencia de comandos de inicio mediante uno de los procedimientos de este documento, Compute Engine hará lo siguiente:

  1. Copia la secuencia de comandos de inicio en la VM.

  2. El Programador de tareas ejecuta la secuencia de comandos de inicio como la LocalSystem cuenta cuando se inicia la VM.

Para obtener información sobre las distintas tareas relacionadas con las secuencias de comandos de inicio y cuándo realizar cada una de ellas, consulta el documento de descripción general de las secuencias de comandos de inicio.

Antes de empezar

  • Consulta la descripción general de las secuencias de comandos de inicio.
  • Consulta información básica sobre los metadatos de las VMs.
  • Si aún no lo has hecho, configura la autenticación. La autenticación verifica tu identidad para acceder a Google Cloud servicios y APIs. Para ejecutar código o ejemplos desde un entorno de desarrollo local, puedes autenticarte en Compute Engine seleccionando una de las siguientes opciones:

    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. Instala Google Cloud CLI. Después de la instalación, inicializa la CLI de Google Cloud ejecutando el siguiente comando:

      gcloud init

      Si utilizas un proveedor de identidades (IdP) externo, primero debes iniciar sesión en la CLI de gcloud con tu identidad federada.

    2. Set a default region and zone.

    REST

    Para usar las muestras de la API REST de esta página en un entorno de desarrollo local, debes usar las credenciales que proporciones a la CLI de gcloud.

      Instala Google Cloud CLI. Después de la instalación, inicializa la CLI de Google Cloud ejecutando el siguiente comando:

      gcloud init

      Si utilizas un proveedor de identidades (IdP) externo, primero debes iniciar sesión en la CLI de gcloud con tu identidad federada.

    Para obtener más información, consulta el artículo Autenticarse para usar REST de la documentación sobre autenticación de Google Cloud .

Claves de metadatos para secuencias de comandos de inicio de Windows

Una secuencia de comandos de inicio se transfiere a una VM desde una ubicación especificada por una clave de metadatos. Una clave de metadatos especifica si la secuencia de comandos de inicio se almacena localmente, en Cloud Storage o se transfiere directamente a la VM. La clave de metadatos que utilices también puede depender del tamaño o del tipo de archivo de la secuencia de comandos de inicio.

En la siguiente tabla se muestran las claves de metadatos que puede usar para los scripts de inicio de Windows y se indica qué clave debe usar en función de la ubicación de almacenamiento, el tamaño y el tipo de archivo del script de inicio.

Clave de metadatos Usar para
sysprep-specialize-script-ps1 Transferir una secuencia de comandos de PowerShell sin firmar que esté almacenada localmente o que se haya añadido directamente y que tenga un tamaño de hasta 256 KB
sysprep-specialize-script-cmd Transferir una secuencia de comandos de shell que esté almacenada localmente o que se haya añadido directamente y que tenga un tamaño de hasta 256 KB
sysprep-specialize-script-bat Transferir una secuencia de comandos de un archivo por lotes almacenado de forma local o añadido directamente, con un tamaño de hasta 256 KB
sysprep-specialize-script-url Enviar un archivo de proceso por lotes, un shell de comandos, un script de PowerShell firmado o sin firmar, o un archivo ejecutable almacenado en Cloud Storage que tenga un tamaño superior a 256 KB
windows-startup-script-ps1 Transferir una secuencia de comandos de PowerShell sin firmar que esté almacenada localmente o que se haya añadido directamente y que tenga un tamaño de hasta 256 KB
windows-startup-script-cmd Transferir una secuencia de comandos de shell que esté almacenada localmente o que se haya añadido directamente y que tenga un tamaño de hasta 256 KB
windows-startup-script-bat Enviar una secuencia de comandos de un archivo por lotes almacenado de forma local o añadido directamente y que tenga un tamaño de hasta 256 KB
windows-startup-script-url Enviar un archivo de proceso por lotes, un shell de comandos, un script de PowerShell firmado o sin firmar, o un archivo ejecutable almacenado en Cloud Storage que tenga un tamaño superior a 256 KB

Para obtener más información sobre el orden de ejecución de los distintos tipos de scripts de inicio, consulta el repositorio GoogleCloudPlatform/compute-image-windows en GitHub.

Orden de ejecución de las secuencias de comandos de inicio de Windows

Puedes usar varias secuencias de comandos de inicio. Las secuencias de comandos de inicio almacenadas localmente o añadidas directamente se ejecutan antes que las secuencias de comandos de inicio almacenadas en Cloud Storage. El tipo de archivo que contiene la secuencia de comandos también influye en el orden de ejecución. En la siguiente tabla se muestra, en función de la clave de metadatos, el orden de ejecución de las secuencias de comandos de inicio de Windows.

Clave de metadatos Orden de ejecución
sysprep-specialize-script-ps1 Primero durante el arranque inicial
sysprep-specialize-script-cmd Segundo durante el arranque inicial
sysprep-specialize-script-bat Tercero durante el arranque inicial
sysprep-specialize-script-url Cuarto durante el arranque inicial
windows-startup-script-ps1 Primero durante cada inicio después del inicio inicial
windows-startup-script-cmd Segundo durante cada inicio después del inicio inicial
windows-startup-script-bat Tercera durante cada arranque después del arranque inicial
windows-startup-script-url Cuarto durante cada inicio después del inicio inicial

Transferir directamente una secuencia de comandos de inicio de Windows

Transfiere directamente el contenido de un archivo por lotes, un shell de comandos o una secuencia de comandos de inicio de PowerShell sin firmar a una VM de Windows Server. En los siguientes procedimientos se muestra cómo transferir una secuencia de comandos de PowerShell sin firmar.

Consola

Transferir una secuencia de comandos de inicio de Windows directamente a una máquina virtual nueva

  1. En la Google Cloud consola, ve a la página Crear una instancia.

    Ir a Crear una instancia

  2. En Disco de arranque, selecciona Cambiar y haz lo siguiente:

    1. En la pestaña Imágenes públicas, elige un sistema operativo Windows Server.
    2. Haz clic en Seleccionar.
  3. Despliega la sección Opciones avanzadas y haz lo siguiente:

    1. Despliega la sección Gestión.
    2. En la sección Metadatos, haz clic en Añadir elemento para definir la clave y el valor:

      • Clave: se ha asignado el valor windows-startup-script-ps1.

        Las secuencias de comandos de inicio que se transfieren a la VM mediante claves de metadatos que empiezan por windows-startup-script se ejecutan en cada arranque después del arranque inicial de la VM.

      • Valor: añade la siguiente secuencia de comandos:

        # 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. Haz clic en Crear.

Transferir una secuencia de comandos de inicio de Windows directamente a una VM que ya existe

  1. En la consola de Google Cloud , ve a la página Instancias de VM.

    Ir a instancias de VM

  2. Haz clic en el nombre de la VM.

  3. Haz clic en Editar.

  4. En Metadatos, especifique lo siguiente:

    • key: windows-startup-script-ps1
    • value: el contenido de la secuencia de comandos de inicio

Verificar la secuencia de comandos de inicio

Una vez que se haya iniciado la VM, consulta la IP externa en un navegador web para verificar que la secuencia de comandos de inicio ha creado el sitio web. Es posible que tengas que esperar unos 10 minutos para que finalice la secuencia de comandos de inicio de muestra.

gcloud (Bash)

Transferir una secuencia de comandos de inicio de Windows directamente a una máquina virtual nueva

Transfiere el contenido de una secuencia de comandos de inicio directamente a una VM de Windows Server cuando la crees mediante el siguiente comando gcloud compute instances create:

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'

Sustituye VM_NAME por el nombre de la VM.

Transferir una secuencia de comandos de inicio de Windows directamente a una VM que ya existe

Añade la secuencia de comandos de inicio directamente a una VM que ya tengas con el siguiente gcloud compute instances add-metadatacomando:

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'

Sustituye VM_NAME por el nombre de la VM.

Verificar la secuencia de comandos de inicio

Una vez que se haya iniciado la VM, consulta la IP externa en un navegador web para verificar que la secuencia de comandos de inicio ha creado el sitio web. Puede que tengas que esperar unos 10 minutos a que termine la secuencia de comandos de inicio de muestra.

gcloud (símbolo del sistema)

Transferir una secuencia de comandos de inicio de Windows directamente a una máquina virtual nueva

Transfiere el contenido de una secuencia de comandos de inicio directamente a una VM de Windows Server cuando la crees mediante el siguiente comando gcloud compute instances create:

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'

Sustituye VM_NAME por el nombre de la VM.

Transferir una secuencia de comandos de inicio de Windows directamente a una VM que ya existe

Añade la secuencia de comandos de inicio directamente a una VM que ya tengas con el siguiente gcloud compute instances add-metadatacomando:

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'

Sustituye VM_NAME por el nombre de la VM.

Verificar la secuencia de comandos de inicio

Una vez que se haya iniciado la VM, consulta la IP externa en un navegador web para verificar que la secuencia de comandos de inicio ha creado el sitio web. Puede que tengas que esperar unos 10 minutos a que termine la secuencia de comandos de inicio de muestra.

gcloud (PowerShell)

Transferir una secuencia de comandos de inicio de Windows directamente a una máquina virtual nueva

Transfiere el contenido de una secuencia de comandos de inicio directamente a una VM de Windows Server cuando la crees mediante el siguiente comando gcloud compute instances create:

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'

Sustituye VM_NAME por el nombre de la VM.

Transferir una secuencia de comandos de inicio de Windows directamente a una VM que ya existe

Añade la secuencia de comandos de inicio directamente a una VM que ya tengas con el siguiente gcloud compute instances add-metadatacomando:

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'

Sustituye VM_NAME por el nombre de la VM.

Verificar la secuencia de comandos de inicio

Una vez que se haya iniciado la VM, consulta la IP externa en un navegador web para verificar que la secuencia de comandos de inicio ha creado el sitio web. Puede que tengas que esperar unos 10 minutos a que termine la secuencia de comandos de inicio de muestra.

REST

Transferir una secuencia de comandos de inicio de Windows directamente a una máquina virtual nueva

Transfiere el contenido de una secuencia de comandos de inicio directamente a una VM de Windows Server cuando la crees mediante el siguiente instances.insert método.

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

Haz los cambios siguientes:

  • PROJECT_ID: el ID del proyecto.

  • ZONE: la zona en la que se creará la VM.

Transferir una secuencia de comandos de inicio de Windows directamente a una VM que ya existe

  1. Obtén el valor de metadata.fingerprint de la VM mediante el método instances.get:

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

    Haz los cambios siguientes:

    • PROJECT_ID: el ID del proyecto en el que se encuentra la VM.

    • ZONE: la zona de la VM.

    • VM_NAME: el nombre de la VM.

  2. Transfiere la secuencia de comandos de inicio mediante el valor fingerprint, junto con la clave y el valor de metadatos de la secuencia de comandos de inicio, en una llamada al método 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"
       }
     ],
     ...
    }
    

    Haz los cambios siguientes:

    • PROJECT_ID: el ID del proyecto en el que se encuentra la VM.

    • ZONE: la zona de la VM.

    • VM_NAME: el nombre de la VM.

    • FINGERPRINT: el valor metadata.fingerprint obtenido mediante el método instances.get.

Verificar la secuencia de comandos de inicio

Una vez que se haya iniciado la VM, consulta la IP externa en un navegador web para verificar que la secuencia de comandos de inicio ha creado el sitio web. Es posible que tengas que esperar unos 10 minutos para que finalice la secuencia de comandos de inicio de muestra.

Transferir una secuencia de comandos de inicio de Windows desde un archivo local

Puedes almacenar una secuencia de comandos de inicio en un archivo por lotes local, una secuencia de comandos de shell de comandos o una secuencia de comandos de PowerShell sin firmar en tu estación de trabajo y pasar el archivo local como metadatos a una VM cuando la crees. No puedes usar archivos almacenados en máquinas virtuales como secuencias de comandos de inicio.

Antes de transferir una secuencia de comandos de inicio de Windows de un archivo local a una máquina virtual, haz lo siguiente:

  1. Crea un archivo local (.ps1) para almacenar la secuencia de comandos de inicio.

  2. Tenga en cuenta la ruta relativa de la interfaz de línea de comandos de gcloud a la secuencia de comandos de inicio.

  3. Añade la siguiente secuencia de comandos de inicio al archivo:

    # 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)

Transferir una secuencia de comandos de inicio de Windows de un archivo local a una máquina virtual nueva

Crea una VM y transfiere el contenido de un archivo local para usarlo como secuencia de comandos de inicio con el gcloud compute instances create comando con la marca --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

Haz los cambios siguientes:

  • VM_NAME: el nombre de la VM
  • FILE_PATH: la ruta relativa al archivo de secuencia de comandos de inicio
Transferir una secuencia de comandos de inicio de Windows de un archivo local a una máquina virtual

Para transferir una secuencia de comandos de inicio a una VM que ya existe desde un archivo local, usa el siguiente gcloud compute instances add-metadatacomando:

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

Haz los cambios siguientes:

  • VM_NAME: el nombre de la VM
  • FILE_PATH: la ruta relativa al archivo de secuencia de comandos de inicio
Verificar la secuencia de comandos de inicio

Consulta la IP externa en un navegador web para verificar que la secuencia de comandos de inicio ha creado el sitio web. Puede que tengas que esperar unos 10 minutos a que termine la secuencia de comandos de inicio de muestra.

gcloud (símbolo del sistema)

Transferir una secuencia de comandos de inicio de Windows de un archivo local a una máquina virtual nueva

Crea una VM y transfiere el contenido de un archivo local para usarlo como secuencia de comandos de inicio con el gcloud compute instances create comando con la marca --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

Haz los cambios siguientes:

  • VM_NAME: el nombre de la VM
  • FILE_PATH: la ruta relativa al archivo de secuencia de comandos de inicio
Transferir una secuencia de comandos de inicio de Windows de un archivo local a una máquina virtual

Para transferir una secuencia de comandos de inicio a una VM que ya existe desde un archivo local, usa el siguiente gcloud compute instances add-metadatacomando:

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

Haz los cambios siguientes:

  • VM_NAME: el nombre de la VM
  • FILE_PATH: la ruta relativa al archivo de secuencia de comandos de inicio
Verificar la secuencia de comandos de inicio

Consulta la IP externa en un navegador web para verificar que la secuencia de comandos de inicio ha creado el sitio web. Puede que tengas que esperar unos 10 minutos a que termine la secuencia de comandos de inicio de muestra.

gcloud (PowerShell)

Transferir una secuencia de comandos de inicio de Windows de un archivo local a una máquina virtual nueva

Crea una VM y transfiere el contenido de un archivo local para usarlo como secuencia de comandos de inicio con el gcloud compute instances create comando con la marca --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

Haz los cambios siguientes:

  • VM_NAME: el nombre de la VM
  • FILE_PATH: la ruta relativa al archivo de secuencia de comandos de inicio
Transferir una secuencia de comandos de inicio de Windows de un archivo local a una máquina virtual

Para transferir una secuencia de comandos de inicio a una VM que ya existe desde un archivo local, usa el siguiente gcloud compute instances add-metadatacomando:

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

Haz los cambios siguientes:

  • VM_NAME: el nombre de la VM
  • FILE_PATH: la ruta relativa al archivo de secuencia de comandos de inicio
Verificar la secuencia de comandos de inicio

Consulta la IP externa en un navegador web para verificar que la secuencia de comandos de inicio ha creado el sitio web. Puede que tengas que esperar unos 10 minutos a que termine la secuencia de comandos de inicio de muestra.

Transferir una secuencia de comandos de inicio de Windows desde Cloud Storage

Puedes almacenar una secuencia de comandos de inicio como un archivo por lotes, una secuencia de comandos de shell de comandos, una secuencia de comandos de PowerShell firmada o sin firmar, o un archivo ejecutable en Cloud Storage y pasárselo a una VM cuando la crees. Después de añadir una secuencia de comandos de inicio a Cloud Storage, tendrás una URL que podrás usar para hacer referencia a la secuencia de comandos de inicio al crear una VM.

Antes de añadir una secuencia de comandos de inicio desde un segmento de Cloud Storage, haz lo siguiente:

  1. Crea un archivo para almacenar la secuencia de comandos de inicio. En este ejemplo se usa un archivo de PowerShell (.ps1).

  2. Añade la siguiente secuencia de comandos de PowerShell al archivo, que instala un servidor web y crea una página web sencilla:

    # 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. Crea un segmento de Cloud Storage.

  4. Añade el archivo al segmento de Cloud Storage.

Implicaciones para la seguridad

  • De forma predeterminada, los propietarios y editores de proyectos pueden acceder a los archivos de Cloud Storage del mismo proyecto, a menos que haya controles de acceso explícitos que lo impidan.

  • Si el segmento u objeto de Cloud Storage es menos seguro que los metadatos, existe el riesgo de que se produzca una elevación de privilegios si se modifica la secuencia de comandos de inicio y se reinicia la VM. Esto se debe a que, después de reiniciar la VM, la secuencia de comandos de inicio se ejecuta como LocalSystem y, a continuación, puede usar los permisos de la cuenta de servicio adjunta para acceder a otros recursos.

Consola

Transferir un script de inicio almacenado en Cloud Storage a una máquina virtual nueva

  1. En la Google Cloud consola, ve a la página Crear una instancia.

    Ir a Crear una instancia

  2. En Disco de arranque, selecciona Cambiar y haz lo siguiente:

    1. En la pestaña Imágenes públicas, elige un sistema operativo Windows Server.
    2. Haz clic en Seleccionar.
  3. En la sección Identidad y acceso a la API, selecciona una cuenta de servicio que tenga el rol Lector de objetos de Storage.

  4. Despliega la sección Opciones avanzadas y sigue estos pasos:

    1. Despliega la sección Gestión.
    2. En la sección Metadatos, añade valores para lo siguiente:

      • Clave: la clave de metadatos. Especifica la windows-startup-script-urlclave de metadatos para que la secuencia de comandos se ejecute durante cada arranque después del arranque inicial.

      • Valor: el valor de los metadatos. Define la ubicación de Cloud Storage del archivo de secuencia de comandos de inicio con uno de los siguientes formatos:

        • URL autenticada: https://storage.googleapis.com/BUCKET/FILE
        • URI de gcloud storage: gs://BUCKET/FILE

        Haz los cambios siguientes:

        • BUCKET: el nombre del segmento que contiene el archivo de secuencia de comandos de inicio
        • FILE: el nombre del archivo de secuencia de comandos de inicio
  5. Para crear la VM, haz clic en Crear.

Transferir una secuencia de comandos de inicio almacenada en Cloud Storage a una VM que ya existe

  1. En la consola de Google Cloud , ve a la página Instancias de VM.

    Ir a instancias de VM

  2. Haz clic en el nombre de la VM.

  3. Haz clic en Editar.

  4. En Metadatos, añade los siguientes valores:

    • URL autenticada: https://storage.googleapis.com/BUCKET/FILE
    • URI de gcloud storage: gs://BUCKET/FILE

Verificar la secuencia de comandos de inicio

Consulta la IP externa en un navegador web para verificar que la secuencia de comandos de inicio ha creado el sitio web. Es posible que tengas que esperar unos 10 minutos a que termine la secuencia de comandos de inicio de muestra.

gcloud (Bash)

Transferir un script de inicio almacenado en Cloud Storage a una VM nueva

Para pasar una secuencia de comandos de inicio almacenada en Cloud Storage a una VM de Windows Server, usa el siguiente gcloud compute instances createcomando. Para el valor de la marca --scopes, usa storage-ro para que la VM pueda acceder a 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

Haz los cambios siguientes:

  • VM_NAME: el nombre de la VM.
  • CLOUD_STORAGE_URL: los valores de los metadatos. Define la ubicación del archivo de secuencia de comandos de inicio con uno de los siguientes formatos:
    • URL autenticada: https://storage.googleapis.com/BUCKET/FILE
    • URI de gcloud storage: gs://BUCKET/FILE
Transferir una secuencia de comandos de inicio almacenada en Cloud Storage a una VM que ya existe

Para pasar una secuencia de comandos de inicio almacenada en Cloud Storage a una máquina virtual que ya tengas, usa el siguiente gcloud compute instances add-metadatacomando:

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

Haz los cambios siguientes:

  • VM_NAME: el nombre de la VM.
  • CLOUD_STORAGE_URL: los valores de los metadatos. Define la ubicación del archivo de secuencia de comandos de inicio con uno de los siguientes formatos:
    • URL autenticada: https://storage.googleapis.com/BUCKET/FILE
    • URI de gcloud storage: gs://BUCKET/FILE
Verificar la secuencia de comandos de inicio

Consulta la IP externa en un navegador web para verificar que la secuencia de comandos de inicio ha creado el sitio web. Es posible que tengas que esperar unos 10 minutos a que termine la secuencia de comandos de inicio de muestra.

gcloud (símbolo del sistema)

Transferir un script de inicio almacenado en Cloud Storage a una VM nueva

Para pasar una secuencia de comandos de inicio almacenada en Cloud Storage a una VM de Windows Server, usa el siguiente gcloud compute instances createcomando. Para el valor de la marca --scopes, usa storage-ro para que la VM pueda acceder a 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

Haz los cambios siguientes:

  • VM_NAME: el nombre de la VM.
  • CLOUD_STORAGE_URL: los valores de los metadatos. Define la ubicación del archivo de secuencia de comandos de inicio con uno de los siguientes formatos:
    • URL autenticada: https://storage.googleapis.com/BUCKET/FILE
    • URI de gcloud storage: gs://BUCKET/FILE
Transferir una secuencia de comandos de inicio almacenada en Cloud Storage a una VM que ya existe

Para pasar una secuencia de comandos de inicio almacenada en Cloud Storage a una máquina virtual que ya tengas, usa el siguiente gcloud compute instances add-metadatacomando:

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

Haz los cambios siguientes:

  • VM_NAME: el nombre de la VM.
  • CLOUD_STORAGE_URL: los valores de los metadatos. Define la ubicación del archivo de secuencia de comandos de inicio con uno de los siguientes formatos:
    • URL autenticada: https://storage.googleapis.com/BUCKET/FILE
    • URI de gcloud storage: gs://BUCKET/FILE
Verificar la secuencia de comandos de inicio

Consulta la IP externa en un navegador web para verificar que la secuencia de comandos de inicio ha creado el sitio web. Es posible que tengas que esperar unos 10 minutos a que termine la secuencia de comandos de inicio de muestra.

gcloud (PowerShell)

Transferir un script de inicio almacenado en Cloud Storage a una VM nueva

Para pasar una secuencia de comandos de inicio almacenada en Cloud Storage a una VM de Windows Server, usa el siguiente gcloud compute instances createcomando. Para el valor de la marca --scopes, usa storage-ro para que la VM pueda acceder a 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

Haz los cambios siguientes:

  • VM_NAME: el nombre de la VM.
  • CLOUD_STORAGE_URL: los valores de los metadatos. Define la ubicación del archivo de secuencia de comandos de inicio con uno de los siguientes formatos:
    • URL autenticada: https://storage.googleapis.com/BUCKET/FILE
    • URI de gcloud storage: gs://BUCKET/FILE
Transferir una secuencia de comandos de inicio almacenada en Cloud Storage a una VM que ya existe

Para pasar una secuencia de comandos de inicio almacenada en Cloud Storage a una máquina virtual que ya tengas, usa el siguiente gcloud compute instances add-metadatacomando:

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

Haz los cambios siguientes:

  • VM_NAME: el nombre de la VM.
  • CLOUD_STORAGE_URL: los valores de los metadatos. Define la ubicación del archivo de secuencia de comandos de inicio con uno de los siguientes formatos:
    • URL autenticada: https://storage.googleapis.com/BUCKET/FILE
    • URI de gcloud storage: gs://BUCKET/FILE
Verificar la secuencia de comandos de inicio

Consulta la IP externa en un navegador web para verificar que la secuencia de comandos de inicio ha creado el sitio web. Es posible que tengas que esperar unos 10 minutos a que termine la secuencia de comandos de inicio de muestra.

REST

Transferir un script de inicio almacenado en Cloud Storage a una máquina virtual nueva

Para pasar una secuencia de comandos de inicio almacenada en Cloud Storage a una VM de Windows Server, usa el siguiente instances.insertmétodo. En el campo scopes, añade https://www.googleapis.com/auth/devstorage.read_only para que la VM pueda acceder a 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"
      },
      ...
    ]
  },
  ...
}

Haz los cambios siguientes:

  • PROJECT_ID: el ID del proyecto.

  • ZONE: la zona en la que se creará la VM.

  • CLOUD_STORAGE_URL: el valor de los metadatos. Define la ubicación del archivo de la secuencia de comandos de inicio en Cloud Storage con uno de los siguientes formatos:

    • URL autenticada: https://storage.googleapis.com/BUCKET/FILE
    • URI de gcloud storage: gs://BUCKET/FILE

Transferir una secuencia de comandos de inicio almacenada en Cloud Storage a una VM que ya existe

  1. Obtén el valor de metadata.fingerprint de la VM mediante el método instances.get:

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

    Haz los cambios siguientes:

    • PROJECT_ID: el ID del proyecto en el que se encuentra la VM.

    • ZONE: la zona de la VM.

    • VM_NAME: el nombre de la VM

  2. Transfiere la secuencia de comandos de inicio mediante el valor fingerprint, junto con la clave y el valor de metadatos de la secuencia de comandos de inicio, en una llamada al método 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"
        }
      ],
      ...
    }
    

    Haz los cambios siguientes:

    • PROJECT_ID: el ID del proyecto en el que se encuentra la VM.

    • ZONE: la zona de la VM.

    • VM_NAME: el nombre de la VM.

    • FINGERPRINT: el valor metadata.fingerprint obtenido mediante el método instances.get.

    • CLOUD_STORAGE_URL: el valor de los metadatos. Define la ubicación del archivo de la secuencia de comandos de inicio en Cloud Storage con uno de los siguientes formatos:

      • URL autenticada: https://storage.googleapis.com/BUCKET/FILE
      • URI de gcloud storage: gs://BUCKET/FILE

Verificar la secuencia de comandos de inicio

Consulta la IP externa en un navegador web para verificar que la secuencia de comandos de inicio ha creado el sitio web. Es posible que tengas que esperar unos 10 minutos a que termine la secuencia de comandos de inicio de muestra.

Acceder a metadatos desde una secuencia de comandos de inicio de Windows

En una secuencia de comandos de inicio, puedes acceder a los valores de los metadatos. Por ejemplo, puedes usar el mismo script para varias máquinas virtuales y parametrizar cada script individualmente transfiriendo diferentes valores de metadatos a cada máquina virtual.

Para acceder a un valor de metadatos personalizado desde una secuencia de comandos de inicio, haz lo siguiente:

  1. Crea una secuencia de comandos de inicio que consulte el valor de una clave de metadatos. Por ejemplo, la siguiente secuencia de comandos de inicio de PowerShell (.ps1) consulta el valor de la clave de metadatos foo.

    $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. Define el valor de la clave de metadatos foo al crear una VM con el siguiente gcloud compute instances create comando. En este ejemplo, la secuencia de comandos de inicio se transfiere a la VM desde un archivo local.

    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
    

    Haz los cambios siguientes:

    • VM_NAME: el nombre de la VM

    • FILE_PATH: la ruta relativa al archivo de secuencia de comandos de inicio

    Para obtener más información sobre cómo especificar un par clave-valor de metadatos, consulta Definir y quitar metadatos personalizados.

  3. Consulta la IP externa en un navegador web para verificar que la secuencia de comandos de inicio muestra el valor de foo. Es posible que tengas que esperar unos 10 minutos a que termine la secuencia de comandos de inicio de muestra.

Volver a ejecutar una secuencia de comandos de inicio de Windows

Para volver a ejecutar una secuencia de comandos de inicio en una VM de Windows, haz lo siguiente:

  1. Conectarse a la VM.

  2. Ejecuta el siguiente comando:

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

Ver la salida de una secuencia de comandos de inicio de Windows

Para ver la salida de una secuencia de comandos de inicio de Windows Server, puede usar cualquiera de las siguientes opciones y buscar eventos GCEMetadataScripts:

  • Puerto serie 1 en la Google Cloud consola. Para obtener más información, consulta Ver salidas de puertos serie.

  • Registro de aplicación del Visor de eventos de Windows.

  • IAP Desktop desde una estación de trabajo Windows. Para obtener más información, consulta el repositorio GoogleCloudPlatform/iap-desktop en GitHub.

Siguientes pasos