PowerShell_Scripts/xserver/Invoke-XApp.ps1
Gal Szkolnik 1c4e9feb1f Stuff
Invoke-XApp (untested)
Find-MTU (grabbed from web)
Get-FreeDiskSpace (Wmi based)
WinCreds package
Generate-FancyZones for FancyZones PowerToy
2021-11-30 22:04:04 -05:00

107 lines
No EOL
3.3 KiB
PowerShell

<#
.SYNOPSIS
Invoke a graphical application on X-Server.
.DESCRIPTION
Invoke a graphical application, making sure an X server connection is active, start the x-server if needed, and if the application is remote, make sure the remote session has the correct DISPLAY values set.
.INPUTS
Inputs to this cmdlet (if any)
.OUTPUTS
Output from this cmdlet (if any)
.NOTES
General notes
.EXAMPLE
Invoke-XApp xclock
.EXAMPLE
Invoke-XApp xclock -Remote remote@example.com
.COMPONENT
The component this cmdlet belongs to
.ROLE
The role this cmdlet belongs to
.FUNCTIONALITY
The functionality that best describes this cmdlet
#>
[CmdletBinding(SupportsShouldProcess, ConfirmImpact = 'Medium')]
#[OutputType([String])]
# # Param2 help description
# [Parameter(ParameterSetName='Parameter Set 1')]
# [AllowNull()]
# [AllowEmptyCollection()]
# [AllowEmptyString()]
# [ValidateScript({$true})]
# [ValidateRange(0,5)]
# [int]
# $Param2,
# # Param3 help description
# [Parameter(ParameterSetName='Another Parameter Set')]
# [ValidatePattern("[a-z]*")]
# [ValidateLength(0,15)]
# [String]
# $Param3
Param (
# Param1 help description
[Parameter(Mandatory, Position = 0, ParameterSetName = 'Parameter Set 1')]
[string[]]$Command,
[string[]]$Remote,
[ValidateSet('pwsh', 'bash', 'zsh', 'sh')]
[string]$RemoteShell = 'pwsh',
[string]$PrivateKeyPath
)
begin {
$null = Get-Command 'xlaunch' -ErrorAction Stop
if ( -not $(Get-Process -ProcessName 'vcxsrv' -ErrorAction SilentlyContinue) ) {
$local:LaunchCfg = $env:XLAUNCH_CONFIG
if ( -not $env:XLAUNCH_CONFIG ) {
New-TemporaryFile | Tee-Object -Variable 'LaunchCfg' | Remove-Item
}
Write-Verbose "LaunchCfg=$LaunchCfg"
if ( -not (Test-Path $LaunchCfg) ) {
Write-Verbose "Creating missing $LaunchCfg..."
New-Item -ItemType File -Path $LaunchCfg -Value @(
'<?xml version="1.0" encoding="UTF-8"?>'
, '<XLaunch '
, ' WindowMode="MultiWindow"'
, ' ClientMode="NoClient"'
, ' LocalClient="False"'
, ' Display="-1"'
, ' LocalProgram=""'
, ' RemoteProgram=""'
, ' RemotePassword=""'
, ' PrivateKey=""'
, ' RemoteHost=""'
, ' RemoteUser=""'
, ' XDMCPHost=""'
, ' XDMCPBroadcast="False"'
, ' XDMCPIndirect="False"'
, ' Clipboard="True"'
, ' ClipboardPrimary="True"'
, ' ExtraParams=""'
, ' Wgl="True"'
, ' DisableAC="False"'
, ' XDMCPTerminate="False"'
, '/>' )
}
& xlaunch --run $LaunchCfg
}
}
process {
if ( -not "Command" ) {
Write-Warning "No command supplied, exiting."
return
}
if ($pscmdlet.ShouldProcess("Target", "Operation")) {
if ( $Remote ) {
$local:RemoteCommand = "bash", "-c", "'DISPLAY=`"localhost:`"`$( xauth list | awk `"{ print `$1 }`" | cut -d: -f2 | tail -1 ) $Command'"
& ssh -i $PrivateKeyPath $Remote $RemoteCommand
}
}
}
end {
}