mirror of
https://github.com/mRemoteNG/mRemoteNG.git
synced 2026-02-17 22:11:48 +08:00
114 lines
4.3 KiB
PowerShell
114 lines
4.3 KiB
PowerShell
#####################################
|
|
# Author: David Sparer
|
|
# Summary:
|
|
# This is intended to be a template for creating connections in bulk. This uses the serializers directly from the mRemoteNG binaries.
|
|
# You will still need to create the connection info objects, but the library will handle serialization. It is expected that you
|
|
# are familiar with PowerShell. If this is not the case, reach out to the mRemoteNG community for help.
|
|
# Usage:
|
|
# Replace or modify the examples that are shown toward the end of the script to create your own connection info objects.
|
|
#####################################
|
|
|
|
$EncryptionKey = (Get-Credential -Message "Enter the encryption key you would like to use. This must match the encryption key used by the rest of the confCons file." -UserName "DontNeedUsername").Password
|
|
$PathToMrngFolder = ""
|
|
|
|
if ($PathToMrngFolder -eq "") {
|
|
Write-Error -Message 'You must set the $PathToMrngFolder variable in this script to the folder which contains mRemoteNG.exe'
|
|
}
|
|
|
|
$assembly = [System.Reflection.Assembly]::LoadFile((Join-Path -Path $PathToMrngFolder -ChildPath "mRemoteNG.exe"))
|
|
$assembly = [System.Reflection.Assembly]::LoadFile((Join-Path -Path $PathToMrngFolder -ChildPath "BouncyCastle.Crypto.dll"))
|
|
|
|
function New-mRemoteNGXmlSerializer {
|
|
[CmdletBinding()]
|
|
param (
|
|
[SecureString]
|
|
$EncryptionKey
|
|
)
|
|
|
|
PROCESS {
|
|
$cryptoProvider = New-Object -TypeName mRemoteNG.Security.SymmetricEncryption.AeadCryptographyProvider
|
|
$saveFilter = New-Object -TypeName mRemoteNG.Security.SaveFilter -ArgumentList @($false)
|
|
$xmlSerializer = New-Object -TypeName mRemoteNG.Config.Serializers.XmlConnectionNodeSerializer -ArgumentList @($cryptoProvider, $encryptionKey, $saveFilter)
|
|
Write-Output $xmlSerializer
|
|
}
|
|
}
|
|
|
|
function New-mRemoteNGConnectionInfo {
|
|
[CmdletBinding()]
|
|
param ()
|
|
|
|
PROCESS {
|
|
$connectionInfo = New-Object -TypeName mRemoteNG.Connection.ConnectionInfo
|
|
Write-Output $connectionInfo
|
|
}
|
|
}
|
|
|
|
function New-mRemoteNGContainerInfo {
|
|
[CmdletBinding()]
|
|
param ()
|
|
|
|
PROCESS {
|
|
$connectionInfo = New-Object -TypeName mRemoteNG.Container.ContainerInfo
|
|
Write-Output $connectionInfo
|
|
}
|
|
}
|
|
|
|
# Setup the services needed to do serialization
|
|
$xmlSerializer = New-mRemoteNGXmlSerializer -EncryptionKey $EncryptionKey
|
|
|
|
|
|
|
|
#----------------------------------------------------------------
|
|
# Example 1: serialize many connections, no containers
|
|
# Here you can define the number of connection info objects to create
|
|
# You can also provide a list of desired hostnames and iterate over those
|
|
$xml = ""
|
|
foreach($i in 1..5)
|
|
{
|
|
$connectionInfo = New-mRemoteNGConnectionInfo
|
|
|
|
# Set connection info properties
|
|
$connectionInfo.Name = "server-$i"
|
|
$connectionInfo.Hostname = "some-win-server-$i"
|
|
$connectionInfo.Protocol = [mRemoteNG.Connection.Protocol.ProtocolType]::RDP
|
|
$connectionInfo.Inheritance.Username = $true
|
|
$connectionInfo.Inheritance.Domain = $true
|
|
$connectionInfo.Inheritance.Password = $true
|
|
|
|
$serializedConnection = $xmlSerializer.SerializeConnectionInfo($connectionInfo).ToString()
|
|
$xml += $serializedConnection + [System.Environment]::NewLine
|
|
}
|
|
|
|
Write-Output $xml
|
|
|
|
|
|
|
|
|
|
#----------------------------------------------------------------
|
|
# Example 2: serialize a container which has connections
|
|
# You can also create containers and add connections to them, which will be nested correctly when serialized
|
|
$xml = ""
|
|
$container = New-mRemoteNGContainerInfo
|
|
$container.Name = "ProductionServers"
|
|
$serializedContainer = $xmlSerializer.SerializeConnectionInfo($container)
|
|
|
|
foreach($i in 1..3)
|
|
{
|
|
$connectionInfo = New-mRemoteNGConnectionInfo
|
|
|
|
# Set connection info properties
|
|
$connectionInfo.Name = "server-$i"
|
|
$connectionInfo.Hostname = "some-linux-server-$i"
|
|
$connectionInfo.Protocol = [mRemoteNG.Connection.Protocol.ProtocolType]::SSH2
|
|
$connectionInfo.Inheritance.Username = $true
|
|
$connectionInfo.Inheritance.Domain = $true
|
|
$connectionInfo.Inheritance.Password = $true
|
|
|
|
# serialize the connection
|
|
$serializedConnection = $xmlSerializer.SerializeConnectionInfo($connectionInfo)
|
|
# add the connection to the container
|
|
$serializedContainer.Add($serializedConnection)
|
|
}
|
|
|
|
# Call ToString() on the top-level container to get the XML of it and all its children
|
|
Write-Output $serializedContainer.ToString() |