Public/Scripts/Invoke-FleetScript.ps1
|
function Invoke-FleetScript { <# .SYNOPSIS Runs a script on a host. .DESCRIPTION Sends POST /api/v1/fleet/scripts/run. Supply ScriptId, ScriptContents, or ScriptName. ScriptName requires FleetId. Running by script ID or inline contents against a host is available in Fleet Free. FleetId requires Fleet Premium. .PARAMETER HostId Target host ID. .PARAMETER ScriptId Saved script ID. .PARAMETER ScriptContents Inline script text, up to 10,000 characters. .PARAMETER ScriptName Saved script name. Requires FleetId. .PARAMETER FleetId Fleet Premium. Fleet that owns the named script. .EXAMPLE Invoke-FleetScript -HostId 10 -ScriptId 4 .EXAMPLE Invoke-FleetScript -HostId 10 -ScriptContents "echo hello" .NOTES FleetId and ScriptName require Fleet Premium. Fleet Free responds with HTTP 402. https://fleetdm.com/docs/rest-api/rest-api#run-script .LINK https://fleetdm.com/docs/rest-api/rest-api#run-script #> [CmdletBinding(SupportsShouldProcess, ConfirmImpact = 'High', DefaultParameterSetName = 'ById')] param( [Parameter(Mandatory, ValueFromPipeline, ValueFromPipelineByPropertyName)] [Alias('Id')] [ValidateRange(1, [int]::MaxValue)] [int]$HostId, [Parameter(Mandatory, ParameterSetName = 'ById')] [ValidateRange(1, [int]::MaxValue)] [int]$ScriptId, [Parameter(Mandatory, ParameterSetName = 'ByContents')] [ValidateNotNullOrEmpty()] [ValidateLength(1, 10000)] [string]$ScriptContents, [Parameter(Mandatory, ParameterSetName = 'ByName')] [ValidateNotNullOrEmpty()] [string]$ScriptName, [Parameter(Mandatory, ParameterSetName = 'ByName')] [ValidateRange(0, [int]::MaxValue)] [int]$FleetId ) process { $body = @{ host_id = $HostId } switch ($PSCmdlet.ParameterSetName) { 'ById' { $body['script_id'] = $ScriptId } 'ByContents' { $body['script_contents'] = $ScriptContents } 'ByName' { $body['script_name'] = $ScriptName $body['fleet_id'] = $FleetId } } if ($PSCmdlet.ShouldProcess("host $HostId", 'Run script')) { $result = Invoke-FleetDMRequest -Endpoint 'scripts/run' -Method POST -Body $body if ($result -and $result.PSObject) { $result.PSObject.TypeNames.Insert(0, 'FleetDM.ScriptExecution') } return $result } } } |