> ## Documentation Index
> Fetch the complete documentation index at: https://devdocs.xbox.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Implementación de compilaciones mediante PowerShell/API

> Implemente compilaciones de máquinas virtuales de PlayFab Multiplayer Servers desde PowerShell y la API de Multiplayer Servers, incluida la carga de recursos y la creación de compilaciones con Windows OS.

Este artículo proporciona información general sobre cómo implementar o crear compilaciones para máquinas virtuales que usan Windows OS en PowerShell en un dispositivo de desarrollo con Windows 10.

Al implementar una compilación mediante PowerShell/API, es probable que use una combinación de Game Manager y las API. Por ello, los comandos de PowerShell/API se enumeran a continuación por funcionalidad.

Si es la primera vez que implementa una compilación, le recomendamos implementar una compilación con el [ejemplo Wrapper](/services/playfab/multiplayer/servers/wrapper-sample), ya que incluye todos los recursos que necesita para implementar servidores.

<Note>
  Para poder usar y ver PlayFab Multiplayer Servers, debe habilitar la característica. Si es un usuario nuevo, le recomendamos usar el método de Game Manager para habilitar esta característica. Para obtener instrucciones, consulte [Habilitar la característica PlayFab Server](/services/playfab/multiplayer/servers/enable-playfab-multiplayer-servers).
</Note>

## Obtención del identificador de título y la clave secreta de desarrollador

* Obtenga su identificador de título de PlayFab
  * Inicie sesión en su cuenta de desarrollador en [PlayFab.com](https://developer.playfab.com)
  * En Game Manager, vaya a la página **My Studios and Titles**. Busque su título de juego y obtenga el identificador de título de juego de PlayFab

* Obtenga la clave secreta de desarrollador del título
  * En Game Manager, seleccione su título > configuración (icono de engranaje)
  * Seleccione **Title settings** y, después, seleccione la pestaña **Secret Keys** para obtener la clave secreta de desarrollador

Para más información sobre las claves secretas, consulte [Administración de claves secretas](/services/playfab/live-service-management/gamemanager/secret-key-management).

## Instalación del módulo de PowerShell PlayFab MultiplayerAPI

1. Abra Windows PowerShell como administrador

2. Si ha instalado anteriormente el módulo [PlayFab Multiplayer PowerShell](https://github.com/PlayFab/MultiplayerPowershell), desinstálelo con el siguiente comando. Este módulo está ahora en desuso.

```powershell theme={null}
Uninstall-Package PlayFabMultiplayer
```

Para ayudarle en la transición al nuevo módulo, consulte [Asignación de comandos](#mapping-commands) para encontrar los nuevos comandos equivalentes. Tenga en cuenta que tanto los comandos como los argumentos podrían ser diferentes.

3. Instale el nuevo [módulo PlayFabMultiplayer API](https://github.com/PlayFab/MpsPowershell)

Para obtener documentación detallada sobre cada comando, consulte la [documentación de cmdlets](https://github.com/PlayFab/MpsPowershell/tree/main/MpsPowershell/docs).

```powershell theme={null}
Install-Module -Name PlayFabMultiplayerApi
```

<Tip>
  Antes de instalar el módulo, es posible que primero deba establecer la directiva de ejecución ejecutando `Set-ExecutionPolicy -ExecutionPolicy Unrestricted -Scope CurrentUser` en PowerShell. Para obtener más información, consulte [Directivas de ejecución de PowerShell](https://learn.microsoft.com/en-us/powershell/module/microsoft.powershell.core/about/about_execution_policies).
</Tip>

4. Obtenga más información sobre los cmdlets del módulo de PowerShell PlayFab Multiplayer ejecutando el siguiente comando. O puede consultar la [documentación de referencia de cmdlets de PlayFabMultiplayerApi](https://github.com/PlayFab/MpsPowershell/tree/main/MpsPowershell/docs).

```powershell theme={null}
Get-Command -Module PlayFabMultiplayerApi | Get-Help
```

## Obtención de un EntityToken para el título

Ejecute el siguiente comando con su identificador de título y la clave de desarrollador asociada. Debe ejecutar este comando al inicio de cualquier sesión cuando use el módulo de PowerShell PlayFabMultiplayerApi.

Llama a la API [GetEntityToken](xref:titleid.playfabapi.com.authentication.authentication.getentitytoken) para obtener un EntityToken y lo almacena en una variable de entorno para su uso en cmdlets futuros.

```powershell theme={null}
Set-PfTitle -TitleID "mytitleID" -SecretKey "mysecretkey"
```

## Habilitación de la característica de servidores multijugador para el título

Ejecute el cmdlet siguiente para habilitar las características de Multiplayer Servers. Llama a la API de [habilitación de servidores multijugador](xref:titleid.playfabapi.com.multiplayer.multiplayerserver.enablemultiplayerserversfortitle).

```powershell theme={null}
Enable-PfMultiplayerServer
```

Si recibe un error que indica `Title must have a valid payment instrument associated with it in order to enable Multiplayer Servers`, consulte [Habilitar PlayFab Multiplayer Servers](/services/playfab/multiplayer/servers/enable-playfab-multiplayer-servers) mediante Game Manager para agregar su información de pago.

## Carga de un recurso

Cargar un recurso es obligatorio cuando se implementa una compilación para servidores Windows. Esto se debe a que los recursos personalizan la imagen de contenedor Windows administrada.

Sin embargo, es opcional al implementar una compilación para servidores Linux, ya que puede personalizar la imagen de contenedor Linux. Para obtener más información, consulte [Creación e implementación de compilaciones de Linux](/services/playfab/multiplayer/servers/deploying-linux-based-builds).

Ejecute este comando para cargar un recurso.

```powershell theme={null}
New-PfAsset -FilePath C:\MyAsset.zip -AssetName MyAsset.zip
```

donde:

* **Filepath**: ruta al archivo local que quiere cargar
* **AssetName**: nombre del recurso que se va a cargar

Para más detalles, consulte la [documentación de referencia de New-PfAsset](https://github.com/PlayFab/MpsPowershell/blob/main/MpsPowershell/docs/New-PfAsset.md).

## Creación de una compilación

* Al crear una compilación para servidores Windows, debe haber cargado un recurso. Si no es así, consulte [Carga de un recurso](#upload-an-asset).
* Al crear una compilación para servidores Linux, debe haber cargado su imagen de contenedor Linux personalizada en el registro de contenedores de PlayFab. Para obtener más información, consulte [Creación e implementación de compilaciones de Linux](/services/playfab/multiplayer/servers/deploying-linux-based-builds).

<Info>
  Asegúrese de usar los valores correctos para **$vmSize__ y __$regions** si planea aprovechar los recursos ofrecidos para la [evaluación gratuita](/services/playfab/multiplayer/servers/billing-for-thunderhead).
</Info>

A continuación se muestra código de ejemplo para ayudar a implementar compilaciones para servidores de juegos Windows.

```powershell theme={null}
$vmSize = "Standard_D2as_v4"
$regions = @( @{ StandbyServers = 1; MaxServers = 1; Region = 'EastUS'; ScheduledStandbySettings = $NULL } )
$ports = @( @{ Name = 'tcp_port'; Num = 8080; Protocol = 'TCP' }, @{ Name = 'udp_port'; Num = 8081; Protocol = 'UDP' } )
$gameAssets = @( @{ FileName = 'MyAsset.zip'; MountPath = 'C:\Assets' } )

$buildResponse = New-PfBuild -BuildName ExampleBuild -ContainerFlavor ManagedWindowsServerCore -StartMultiplayerServerCommand 'C:\Assets\MyCustomServer.exe' -GameAssetReferences $gameAssets -VMSize $vmSize -MultiplayerServerCountPerVM 1 -Ports $ports -RegionConfigurations $regions

# All PlayFabMultiplayerApi cmdlets return objects, so we can pass the returned object to ConvertTo-Json for human readability.
$buildResponse | ConvertTo-Json -depth 5
```

A continuación se muestra código de ejemplo para ayudar a implementar compilaciones para servidores de juegos Linux.

```powershell theme={null}
$vmSize = "Standard_D2as_v4"
$ports = @( @{ Name = 'tcp_port'; Num = 8080; Protocol = 'TCP' }, @{ Name = 'udp_port'; Num = 8081; Protocol = 'UDP' } )
$regions = @( @{ 'MaxServers' = 1; 'Region' = 'AustraliaEast'; StandbyServers = 1; 'ScheduledStandbySettings' = $NULL } )
$containerImageReference = @{ ImageName = "MyLinuxContainerImage"; Tag = "0.2" }

$buildResponse = New-PfBuild -BuildName ExampleBuild -ContainerFlavor CustomLinux -ContainerImageReference $containerImageReference -VMSize $vmSize -MultiplayerServerCountPerVM 1 -Ports $ports -RegionConfigurations $regions

# All PlayFabMultiplayerApi cmdlets return objects, so we can pass the returned object to ConvertTo-Json for human readability.
$buildResponse | ConvertTo-Json -depth 5
```

<Tip>
  Durante el desarrollo, apague las regiones sin usar o en mal estado para evitar el consumo de horas de núcleo de máquina virtual. El consumo de horas de núcleo comienza durante el inicio de la máquina virtual y continúa hasta que la máquina virtual se apaga. Las máquinas virtuales de una región no se apagarán automáticamente a menos que los servidores en espera de destino de la región lleguen a 0, o que se elimine una región.
</Tip>

### Apagado de máquinas virtuales

Hay tres formas de apagar máquinas virtuales

1. Establezca el valor de **servidores en espera de destino** de una región en 0; esto apagará las máquinas virtuales solo de esa región.
2. Elimine una región específica de una compilación.
3. Elimine toda la compilación; esto apagará las máquinas virtuales de **todas las regiones** de esta compilación.

## Enumeración de compilaciones implementadas

Para ver una lista de las compilaciones de su título, ejecute los comandos siguientes.

```powershell theme={null}
Get-PfBuild | ConvertTo-Json -depth 5
```

### Solicitud de un servidor multijugador

Una vez que haya creado una compilación, se crearán uno o varios servidores después de ejecutar su archivo .exe. Estos servidores están ahora "en espera".

Puede verlos al enumerar todos los servidores que ejecutan la compilación con este comando.

```powershell theme={null}
Get-PFMultiplayerServer -BuildId $buildResponse.data.BuildId -Region "EastUS"
```

Una vez que veamos algunos servidores en espera, solicitemos uno para jugar...

```powershell theme={null}
$sessionId = New-Guid
$serverResponse = Request-PfMultiplayerServer -BuildId $buildResponse.data.BuildId -PreferredRegions @('EastUS') -SessionId $sessionId
```

La respuesta a esa llamada incluye una dirección IPv4 y un número de puerto a los que pueden conectarse los clientes. En el caso de WindowsRunnerCSharp.exe, hospeda un servidor web sencillo, por lo que puede navegar a la dirección IPv4 y al número de puerto para obtener una respuesta:

```powershell theme={null}
curl "http://$($serverResponse.data.Ipv4Address):$($serverResponse.data.Ports[0].Num)"
```

Este es el núcleo de los servidores multijugador de PlayFab: en un plazo de 3 segundos desde que su servicio de emparejamiento llama a [RequestMultiplayerServer](xref:titleid.playfabapi.com.multiplayer.multiplayerserver.requestmultiplayerserver), PlayFab asignará un nuevo servidor.

Estos servidores provienen de grupos de servidores en espera que se rellenan continuamente y que usted configura por región y por compilación.

## Asignación de comandos

La tabla siguiente muestra el nuevo equivalente de los comandos antiguos. Se trata de una asignación rápida para ayudar a quienes han usado la versión anterior del módulo de PowerShell y necesitan convertir sus comandos existentes.

Asegúrese de leer la definición de cada comando para conocer todos los detalles del cambio, ya que algunos de los argumentos también han cambiado.

| Comando de MultiplayerPowershell (antiguo) | Módulo MpsPowershell API (nuevo)                                                                                                      |
| ------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------- |
| Add-PFMultiplayerAsset                     | New-PfAsset                                                                                                                           |
| Add-PFMultiplayerCertificate               | Invoke-PfUploadCertificate                                                                                                            |
| Enable-PFMultiplayerServer                 | [Enable-PfMultiplayerServer](https://github.com/PlayFab/MpsPowershell/blob/main/MpsPowershell/docs/Enable-PfMultiplayerServer.md)     |
| Get-PFMultiplayerAsset                     | [Get-PfAssetSummary](https://github.com/PlayFab/MpsPowershell/blob/main/MpsPowershell/docs/Get-PfAssetSummary.md)                     |
| Get-PFMultiplayerBuild                     | [Get-PfBuild](https://github.com/PlayFab/MpsPowershell/blob/main/MpsPowershell/docs/Get-PfBuild.md)                                   |
| Get-PFMultiplayerCertificate               | [Get-PfCertificateSummary](https://github.com/PlayFab/MpsPowershell/blob/main/MpsPowershell/docs/Get-PfCertificateSummary.md)         |
| Get-PFMultiplayerContainerImages           | [Get-PfContainerImage](https://github.com/PlayFab/MpsPowershell/blob/main/MpsPowershell/docs/Get-PfContainerImage.md)                 |
| Get-PFMultiplayerImageTags                 | [Get-PfContainerImageTag](https://github.com/PlayFab/MpsPowershell/blob/main/MpsPowershell/docs/Get-PfContainerImageTag.md)           |
| Get-PFMultiplayerQosServer                 | [Get-PfQosServer](https://github.com/PlayFab/MpsPowershell/blob/main/MpsPowershell/docs/Get-PfPartyQosServer.md)                      |
| Get-PFMultiplayerServer                    | [Get-PfMultiplayerServer](https://github.com/PlayFab/MpsPowershell/blob/main/MpsPowershell/docs/Get-PfMultiplayerServer.md)           |
| Get-PFTitleEntityToken                     | en desuso                                                                                                                             |
| New-PFMultiplayerBuild                     | [New-PfBuild](https://github.com/PlayFab/MpsPowershell/blob/main/MpsPowershell/docs/New-PfBuild.md)                                   |
| New-PFMultiplayerServer                    | [Request-PfMultiplayerServer](https://github.com/PlayFab/MpsPowershell/blob/main/MpsPowershell/docs/Request-PfMultiplayerServer.md)   |
| Remove-PFMultiplayerAsset                  | [Remove-PfAsset](https://github.com/PlayFab/MpsPowershell/blob/main/MpsPowershell/docs/Remove-PfAsset.md)                             |
| Remove-PFMultiplayerBuild                  | [Remove-PfBuild](https://github.com/PlayFab/MpsPowershell/blob/main/MpsPowershell/docs/Remove-PfBuild.md)                             |
| Remove-PFMultiplayerCertificate            | [Remove-PfCertificate](https://github.com/PlayFab/MpsPowershell/blob/main/MpsPowershell/docs/Remove-PfCertificate.md)                 |
| Remove-PFMultiplayerContainerImageTag      | [Invoke-PfImageUntagContainer](https://github.com/PlayFab/MpsPowershell/blob/main/MpsPowershell/docs/Invoke-PfImageUntagContainer.md) |
| Set-PFTitle                                | [Set-PfTitle](https://github.com/PlayFab/MpsPowershell/blob/main/MpsPowershell/docs/Set-PfTitle.md)                                   |

## Consulte también

* [Tutorial: Implementación de compilaciones mediante PowerShell/API](/services/playfab/multiplayer/servers/quickstart-for-multiplayer-servers-api-powershell)
* [Implementación de una compilación mediante Game Manager](/services/playfab/multiplayer/servers/deploy-using-game-manager)
* [Creación de su primer servidor](/services/playfab/multiplayer/servers/create-your-first-server)
* [Ejemplo Wrapper](/services/playfab/multiplayer/servers/wrapper-sample)
* [Ejemplos y recursos](/services/playfab/multiplayer/servers/server-samples-resources)


## Related topics

- [Tutorial: Implementación de compilaciones mediante PowerShell/API](/es/services/playfab/multiplayer/servers/quickstart-for-multiplayer-servers-api-powershell.md)
- [Administración de secretos (versión preliminar)](/es/services/playfab/multiplayer/servers/manage-secrets.md)
- [Implementación de compilaciones de servidores multijugador de PlayFab](/es/services/playfab/multiplayer/servers/deploying-playfab-multiplayer-server-builds.md)
- [Creación e implementación de compilaciones de Linux](/es/services/playfab/multiplayer/servers/deploying-linux-based-builds.md)
- [Ejemplo de Windows Runner](/es/services/playfab/multiplayer/servers/windows-runner-sample.md)
