Started adding PowerShell cmdlets useful for LANCommander scripting
parent
dc2eff4972
commit
baa2b9b206
|
@ -0,0 +1,45 @@
|
||||||
|
using System;
|
||||||
|
using System.Management.Automation;
|
||||||
|
|
||||||
|
namespace LANCommander.PowerShell.Cmdlets
|
||||||
|
{
|
||||||
|
public class DisplayResolution
|
||||||
|
{
|
||||||
|
public int Width { get; set; }
|
||||||
|
public int Height { get; set; }
|
||||||
|
}
|
||||||
|
|
||||||
|
[Cmdlet(VerbsData.Convert, "AspectRatio")]
|
||||||
|
[OutputType(typeof(string))]
|
||||||
|
public class ConvertAspectRatioCmdlet : PSCmdlet
|
||||||
|
{
|
||||||
|
[Parameter(Mandatory = true, Position = 0)]
|
||||||
|
public int Width { get; set; }
|
||||||
|
|
||||||
|
[Parameter(Mandatory = true, Position = 1)]
|
||||||
|
public int Height { get; set; }
|
||||||
|
|
||||||
|
[Parameter(Mandatory = true, Position = 2)]
|
||||||
|
public double AspectRatio { get; set; }
|
||||||
|
|
||||||
|
protected override void ProcessRecord()
|
||||||
|
{
|
||||||
|
var resolution = new DisplayResolution();
|
||||||
|
|
||||||
|
// Display is wider, pillar box
|
||||||
|
if ((Width / Height) < AspectRatio)
|
||||||
|
{
|
||||||
|
resolution.Width = (int)Math.Ceiling(Height * AspectRatio);
|
||||||
|
resolution.Height = Height;
|
||||||
|
}
|
||||||
|
// Letterbox
|
||||||
|
else
|
||||||
|
{
|
||||||
|
resolution.Width = Width;
|
||||||
|
resolution.Height = (int)Math.Ceiling(Width * (1 / AspectRatio));
|
||||||
|
}
|
||||||
|
|
||||||
|
WriteObject(resolution);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,40 @@
|
||||||
|
using LANCommander.SDK;
|
||||||
|
using LANCommander.SDK.Helpers;
|
||||||
|
using System.Management.Automation;
|
||||||
|
|
||||||
|
namespace LANCommander.PowerShell.Cmdlets
|
||||||
|
{
|
||||||
|
[Cmdlet(VerbsData.ConvertTo, "StringBytes")]
|
||||||
|
[OutputType(typeof(byte[]))]
|
||||||
|
public class ConvertToStringBytesCmdlet : PSCmdlet
|
||||||
|
{
|
||||||
|
[Parameter(Mandatory = true, Position = 0, ValueFromPipeline = true, ValueFromPipelineByPropertyName = true)]
|
||||||
|
public string Input { get; set; }
|
||||||
|
|
||||||
|
[Parameter]
|
||||||
|
public bool Utf16 { get; set; } = false;
|
||||||
|
|
||||||
|
[Parameter]
|
||||||
|
public bool BigEndian { get; set; } = false;
|
||||||
|
|
||||||
|
[Parameter]
|
||||||
|
public int MaxLength { get; set; } = 0;
|
||||||
|
|
||||||
|
protected override void ProcessRecord()
|
||||||
|
{
|
||||||
|
byte[] output;
|
||||||
|
|
||||||
|
if (MaxLength > 0 && Input.Length > MaxLength)
|
||||||
|
Input = Input.Substring(0, MaxLength);
|
||||||
|
|
||||||
|
if (Utf16 && BigEndian)
|
||||||
|
output = System.Text.Encoding.BigEndianUnicode.GetBytes(Input);
|
||||||
|
else if (Utf16)
|
||||||
|
output = System.Text.Encoding.Unicode.GetBytes(Input);
|
||||||
|
else
|
||||||
|
output = System.Text.Encoding.ASCII.GetBytes(Input);
|
||||||
|
|
||||||
|
WriteObject(output);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,30 @@
|
||||||
|
using System;
|
||||||
|
using System.IO;
|
||||||
|
using System.Management.Automation;
|
||||||
|
|
||||||
|
namespace LANCommander.PowerShell.Cmdlets
|
||||||
|
{
|
||||||
|
[Cmdlet(VerbsData.Edit, "PatchBinary")]
|
||||||
|
[OutputType(typeof(string))]
|
||||||
|
public class EditPatchBinaryCmdlet : PSCmdlet
|
||||||
|
{
|
||||||
|
[Parameter(Mandatory = true, Position = 0)]
|
||||||
|
public long Offset { get; set; }
|
||||||
|
|
||||||
|
[Parameter(Mandatory = true, Position = 1)]
|
||||||
|
public byte[] Data { get; set; }
|
||||||
|
|
||||||
|
[Parameter(Mandatory = true, Position = 2)]
|
||||||
|
public string FilePath { get; set; }
|
||||||
|
|
||||||
|
protected override void ProcessRecord()
|
||||||
|
{
|
||||||
|
using (var writer = File.OpenWrite(FilePath))
|
||||||
|
{
|
||||||
|
writer.Seek(Offset, SeekOrigin.Begin);
|
||||||
|
|
||||||
|
writer.Write(Data, 0, Data.Length);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,19 @@
|
||||||
|
using LANCommander.SDK;
|
||||||
|
using LANCommander.SDK.Helpers;
|
||||||
|
using System.Management.Automation;
|
||||||
|
|
||||||
|
namespace LANCommander.PowerShell.Cmdlets
|
||||||
|
{
|
||||||
|
[Cmdlet(VerbsCommon.Get, "GameManifest")]
|
||||||
|
[OutputType(typeof(GameManifest))]
|
||||||
|
public class GetGameManifestCmdlet : PSCmdlet
|
||||||
|
{
|
||||||
|
[Parameter(Mandatory = true, Position = 0, ValueFromPipeline = true, ValueFromPipelineByPropertyName = true)]
|
||||||
|
public string Path { get; set; }
|
||||||
|
|
||||||
|
protected override void ProcessRecord()
|
||||||
|
{
|
||||||
|
WriteObject(ManifestHelper.Read(Path));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,18 @@
|
||||||
|
using System.Linq;
|
||||||
|
using System.Management.Automation;
|
||||||
|
using System.Windows.Forms;
|
||||||
|
|
||||||
|
namespace LANCommander.PowerShell.Cmdlets
|
||||||
|
{
|
||||||
|
[Cmdlet(VerbsCommon.Get, "PrimaryDisplay")]
|
||||||
|
[OutputType(typeof(string))]
|
||||||
|
public class GetPrimaryDisplayCmdlet : PSCmdlet
|
||||||
|
{
|
||||||
|
protected override void ProcessRecord()
|
||||||
|
{
|
||||||
|
var screens = Screen.AllScreens;
|
||||||
|
|
||||||
|
WriteObject(screens.First(s => s.Primary));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,24 @@
|
||||||
|
using LANCommander.SDK;
|
||||||
|
using LANCommander.SDK.Helpers;
|
||||||
|
using System.Management.Automation;
|
||||||
|
|
||||||
|
namespace LANCommander.PowerShell.Cmdlets
|
||||||
|
{
|
||||||
|
[Cmdlet(VerbsCommunications.Write, "GameManifest")]
|
||||||
|
[OutputType(typeof(string))]
|
||||||
|
public class WriteGameManifestCmdlet : PSCmdlet
|
||||||
|
{
|
||||||
|
[Parameter(Mandatory = true, Position = 0, ValueFromPipeline = true, ValueFromPipelineByPropertyName = true)]
|
||||||
|
public string Path { get; set; }
|
||||||
|
|
||||||
|
[Parameter(Mandatory = true, Position = 1, ValueFromPipeline = true, ValueFromPipelineByPropertyName = true)]
|
||||||
|
public GameManifest Manifest { get; set; }
|
||||||
|
|
||||||
|
protected override void ProcessRecord()
|
||||||
|
{
|
||||||
|
var destination = ManifestHelper.Write(Manifest, Path);
|
||||||
|
|
||||||
|
WriteObject(destination);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,31 @@
|
||||||
|
using System.IO;
|
||||||
|
using System.Management.Automation;
|
||||||
|
using System.Text.RegularExpressions;
|
||||||
|
|
||||||
|
namespace LANCommander.PowerShell.Cmdlets
|
||||||
|
{
|
||||||
|
|
||||||
|
[Cmdlet(VerbsCommunications.Write, "ReplaceContentInFile")]
|
||||||
|
[OutputType(typeof(string))]
|
||||||
|
public class ReplaceContentInFileCmdlet : PSCmdlet
|
||||||
|
{
|
||||||
|
[Parameter(Mandatory = true, Position = 0)]
|
||||||
|
public string Pattern { get; set; }
|
||||||
|
|
||||||
|
[Parameter(Mandatory = true, Position = 1)]
|
||||||
|
public string Substitution { get; set; }
|
||||||
|
|
||||||
|
[Parameter(Mandatory = true, Position = 2)]
|
||||||
|
public string FilePath { get; set; }
|
||||||
|
|
||||||
|
protected override void ProcessRecord()
|
||||||
|
{
|
||||||
|
var contents = File.ReadAllText(FilePath);
|
||||||
|
var regex = new Regex(Pattern, RegexOptions.Multiline);
|
||||||
|
|
||||||
|
var result = regex.Replace(contents, Substitution);
|
||||||
|
|
||||||
|
WriteObject(result);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,68 @@
|
||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<Project ToolsVersion="15.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
||||||
|
<Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props" Condition="Exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props')" />
|
||||||
|
<PropertyGroup>
|
||||||
|
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
|
||||||
|
<Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
|
||||||
|
<ProjectGuid>{807943BF-0C7D-4ED3-8393-CFEE64E3138C}</ProjectGuid>
|
||||||
|
<OutputType>Library</OutputType>
|
||||||
|
<AppDesignerFolder>Properties</AppDesignerFolder>
|
||||||
|
<RootNamespace>LANCommander.PowerShell</RootNamespace>
|
||||||
|
<AssemblyName>LANCommander.PowerShell</AssemblyName>
|
||||||
|
<TargetFrameworkVersion>v4.7.2</TargetFrameworkVersion>
|
||||||
|
<FileAlignment>512</FileAlignment>
|
||||||
|
<Deterministic>true</Deterministic>
|
||||||
|
</PropertyGroup>
|
||||||
|
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
|
||||||
|
<DebugSymbols>true</DebugSymbols>
|
||||||
|
<DebugType>full</DebugType>
|
||||||
|
<Optimize>false</Optimize>
|
||||||
|
<OutputPath>bin\Debug\</OutputPath>
|
||||||
|
<DefineConstants>DEBUG;TRACE</DefineConstants>
|
||||||
|
<ErrorReport>prompt</ErrorReport>
|
||||||
|
<WarningLevel>4</WarningLevel>
|
||||||
|
</PropertyGroup>
|
||||||
|
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
|
||||||
|
<DebugType>pdbonly</DebugType>
|
||||||
|
<Optimize>true</Optimize>
|
||||||
|
<OutputPath>bin\Release\</OutputPath>
|
||||||
|
<DefineConstants>TRACE</DefineConstants>
|
||||||
|
<ErrorReport>prompt</ErrorReport>
|
||||||
|
<WarningLevel>4</WarningLevel>
|
||||||
|
</PropertyGroup>
|
||||||
|
<ItemGroup>
|
||||||
|
<Reference Include="System" />
|
||||||
|
<Reference Include="System.Core" />
|
||||||
|
<Reference Include="System.Management.Automation, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">
|
||||||
|
<HintPath>..\packages\PowerShellStandard.Library.5.1.1\lib\net452\System.Management.Automation.dll</HintPath>
|
||||||
|
</Reference>
|
||||||
|
<Reference Include="System.Windows.Forms" />
|
||||||
|
<Reference Include="System.Xml.Linq" />
|
||||||
|
<Reference Include="System.Data.DataSetExtensions" />
|
||||||
|
<Reference Include="Microsoft.CSharp" />
|
||||||
|
<Reference Include="System.Data" />
|
||||||
|
<Reference Include="System.Net.Http" />
|
||||||
|
<Reference Include="System.Xml" />
|
||||||
|
</ItemGroup>
|
||||||
|
<ItemGroup>
|
||||||
|
<Compile Include="Cmdlets\Edit-PatchBinary.cs" />
|
||||||
|
<Compile Include="Cmdlets\Write-ReplaceContentInFile.cs" />
|
||||||
|
<Compile Include="Cmdlets\ConvertTo-StringBytes.cs" />
|
||||||
|
<Compile Include="Cmdlets\Get-PrimaryDisplay.cs" />
|
||||||
|
<Compile Include="Cmdlets\Convert-AspectRatio.cs" />
|
||||||
|
<Compile Include="Cmdlets\Get-GameManifest.cs" />
|
||||||
|
<Compile Include="Cmdlets\Write-GameManifest.cs" />
|
||||||
|
<Compile Include="Properties\AssemblyInfo.cs" />
|
||||||
|
</ItemGroup>
|
||||||
|
<ItemGroup>
|
||||||
|
<None Include="LANCommander.PowerShell.psd1" />
|
||||||
|
<None Include="packages.config" />
|
||||||
|
</ItemGroup>
|
||||||
|
<ItemGroup>
|
||||||
|
<ProjectReference Include="..\LANCommander.SDK\LANCommander.SDK.csproj">
|
||||||
|
<Project>{4c2a71fd-a30b-4d62-888a-4ef843d8e506}</Project>
|
||||||
|
<Name>LANCommander.SDK</Name>
|
||||||
|
</ProjectReference>
|
||||||
|
</ItemGroup>
|
||||||
|
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
|
||||||
|
</Project>
|
Binary file not shown.
|
@ -0,0 +1,36 @@
|
||||||
|
using System.Reflection;
|
||||||
|
using System.Runtime.CompilerServices;
|
||||||
|
using System.Runtime.InteropServices;
|
||||||
|
|
||||||
|
// General Information about an assembly is controlled through the following
|
||||||
|
// set of attributes. Change these attribute values to modify the information
|
||||||
|
// associated with an assembly.
|
||||||
|
[assembly: AssemblyTitle("LANCommander.PowerShell")]
|
||||||
|
[assembly: AssemblyDescription("")]
|
||||||
|
[assembly: AssemblyConfiguration("")]
|
||||||
|
[assembly: AssemblyCompany("")]
|
||||||
|
[assembly: AssemblyProduct("LANCommander.PowerShell")]
|
||||||
|
[assembly: AssemblyCopyright("Copyright © 2023")]
|
||||||
|
[assembly: AssemblyTrademark("")]
|
||||||
|
[assembly: AssemblyCulture("")]
|
||||||
|
|
||||||
|
// Setting ComVisible to false makes the types in this assembly not visible
|
||||||
|
// to COM components. If you need to access a type in this assembly from
|
||||||
|
// COM, set the ComVisible attribute to true on that type.
|
||||||
|
[assembly: ComVisible(false)]
|
||||||
|
|
||||||
|
// The following GUID is for the ID of the typelib if this project is exposed to COM
|
||||||
|
[assembly: Guid("807943bf-0c7d-4ed3-8393-cfee64e3138c")]
|
||||||
|
|
||||||
|
// Version information for an assembly consists of the following four values:
|
||||||
|
//
|
||||||
|
// Major Version
|
||||||
|
// Minor Version
|
||||||
|
// Build Number
|
||||||
|
// Revision
|
||||||
|
//
|
||||||
|
// You can specify all the values or you can default the Build and Revision Numbers
|
||||||
|
// by using the '*' as shown below:
|
||||||
|
// [assembly: AssemblyVersion("1.0.*")]
|
||||||
|
[assembly: AssemblyVersion("1.0.0.0")]
|
||||||
|
[assembly: AssemblyFileVersion("1.0.0.0")]
|
|
@ -0,0 +1,4 @@
|
||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<packages>
|
||||||
|
<package id="PowerShellStandard.Library" version="5.1.1" targetFramework="net472" />
|
||||||
|
</packages>
|
|
@ -11,6 +11,8 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LANCommander.SDK", "LANComm
|
||||||
EndProject
|
EndProject
|
||||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LANCommander.PCGamingWiki", "LANCommander.PCGamingWiki\LANCommander.PCGamingWiki.csproj", "{2436B817-4475-4E70-9BB2-E1E7866DB79F}"
|
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LANCommander.PCGamingWiki", "LANCommander.PCGamingWiki\LANCommander.PCGamingWiki.csproj", "{2436B817-4475-4E70-9BB2-E1E7866DB79F}"
|
||||||
EndProject
|
EndProject
|
||||||
|
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "LANCommander.PowerShell", "LANCommander.PowerShell\LANCommander.PowerShell.csproj", "{807943BF-0C7D-4ED3-8393-CFEE64E3138C}"
|
||||||
|
EndProject
|
||||||
Global
|
Global
|
||||||
GlobalSection(SolutionConfigurationPlatforms) = preSolution
|
GlobalSection(SolutionConfigurationPlatforms) = preSolution
|
||||||
Debug|Any CPU = Debug|Any CPU
|
Debug|Any CPU = Debug|Any CPU
|
||||||
|
@ -33,6 +35,10 @@ Global
|
||||||
{2436B817-4475-4E70-9BB2-E1E7866DB79F}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
{2436B817-4475-4E70-9BB2-E1E7866DB79F}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||||
{2436B817-4475-4E70-9BB2-E1E7866DB79F}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
{2436B817-4475-4E70-9BB2-E1E7866DB79F}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||||
{2436B817-4475-4E70-9BB2-E1E7866DB79F}.Release|Any CPU.Build.0 = Release|Any CPU
|
{2436B817-4475-4E70-9BB2-E1E7866DB79F}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||||
|
{807943BF-0C7D-4ED3-8393-CFEE64E3138C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||||
|
{807943BF-0C7D-4ED3-8393-CFEE64E3138C}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||||
|
{807943BF-0C7D-4ED3-8393-CFEE64E3138C}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||||
|
{807943BF-0C7D-4ED3-8393-CFEE64E3138C}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||||
EndGlobalSection
|
EndGlobalSection
|
||||||
GlobalSection(SolutionProperties) = preSolution
|
GlobalSection(SolutionProperties) = preSolution
|
||||||
HideSolutionNode = FALSE
|
HideSolutionNode = FALSE
|
||||||
|
|
Loading…
Reference in New Issue