Tutorials:PowerShell Cmdlets

From LANCommander
Revision as of 01:33, 2 December 2023 by DoctorDalek (talk | contribs)

When LANCommander executes PowerShell scripts through the Playnite addon, it imports a custom PowerShell module that adds useful cmdlets that can be used in your scripts. Examples of these are included under the "Functions" section of the LANCommander script editor. This page should be used as the official documentation of the cmdlets and their parameters.

Convert-AspectRatio

Calculates a resolution for the desired aspect ratio using an input display width and height.

Syntax

Convert-AspectRatio
    -Width <int>
    -Height <int>
    -AspectRatio <double>

Description

The Convert-AspectRatio cmdlet is most useful for calculating a resolution for a specific aspect ratio that will fit within a display by either using pillar or letter boxing. For example, some games may only support 4:3 displays and you may want to calculate the correct 4:3 resolution from your 16:9 display. This cmdlet is really useful when paired with Get-PrimaryDisplay.

Examples

Convert-AspectRatio -Width 2560 -Height 1440 -AspectRatio (4 / 3)

# Returns <DisplayResolution>
Width     : 1920
Height    : 1440

ConvertTo-StringBytes

Converts an input string into a byte array.

Syntax

ConvertTo-StringBytes
    -Input <string>
    -Utf16 <bool>
    -BigEndian <bool>
    -MaxLength <int>
    -MinLength <int>

Description

ConvertTo-StringBytes is extremely useful for patching strings in binary files. It will take any input string and convert it to a byte array. Length can be controlled using the -MaxLength and -MinLength parameters.

Examples

ConvertTo-StringBytes -Input "Hello, world!" -Utf16 1
72 0 101 0 108 0 108 0 111 0 44 0 32 0 119 0 111 0 114 0 108 0 100 0 33 0

ConvertTo-StringBytes -Input "Hello, world!" -MaxLength
72 101 108 108 111

ConvertTo-StringBytes -Input "Hello" -MaxLength 10 -MinLength 10
72 101 108 108 111 0 0 0 0 0

ConvertTo-StringBytes -Input "Hello" -Utf16 1 -BigEndian 1
0 72 0 101 0 108 0 108 0 111

Edit-PatchBinary

Patches binary files at a specified offset.

Syntax

Edit-PatchBinary
    -Offset <long>
    -Data <byte[]>
    -FilePath <string>
    -MaxLength <int>
    -MinLength <int>

Description

This cmdlet is useful when a binary file has to be patched at a specific offset. It can be extremely useful when paired with ConvertTo-StringBytes to update a player name in a binary file.

Examples

$bytes = ConvertTo-StringBytes -Input "Master Chief" -Utf16 1 -MaxLength 16 -MinLength 16

Edit-PatchBinary -FilePath "$($env:LOCALAPPDATA)\Microsoft\Halo 2\Saved Games\S0000000\profile" -Offset 0x08 -Data $bytes

Get-GameManifest

Parses a game's manifest YAML file from the specified install directory

Syntax

Get-GameManifest
    -Path <string>

Description

Used to deserialize a game's manifest file (_manifest.yml) from the specified install directory. Returns the game manifest as an object.

Examples

$manifest = Get-GameManifest -Path "C:\Games\Age of Empires II - The Age of Kings"
Write-Host $manifest.Title

Age of Empires II: The Age of Kings

Get-PrimaryDisplay

Gets the bounds of the machine's current primary display.

Syntax

Get-PrimaryDisplay

Description

The Get-PrimaryDisplay cmdlet takes no parameters and will only return the bounds of the current primary display attached to the machine. This is highly useful in where you might want to automatically set the game's resolution to match the primary display's resolution.

Examples

$Display = Get-PrimaryDisplay

Write-Host "$($Display.Bounds.Width)x$($Display.Bounds.Height)"

1920x1080

Install-Game

Installs a game using the game ID. Requires an active connection to the LANCommander server.

Syntax

Install-Game
    -Client <LANCommander.SDK.Client>
    -Id <Guid>
    -InstallDirectory <string>

Description

This cmdlet allows external PowerShell scripts to install games to the system. This is really only useful for admins that may want to install games from a remote PowerShell connection. Note that this requires an authenticated client. -InstallDirectory will default to the path C:\Games.

Examples

Import-Module "LANCommander.PowerShell.psd1"

$client = [LANCommander.SDK.Client]::new("http://<server>:1337")
$client.Authenticate("username", "password")

Install-Game -Client $client -Id <GameId> -InstallDirectory "C:\Games"