Ole tala ole amataga ole server a Minecraft

Ole tala ole amataga ole server a Minecraft

E fiafia tele le tusitala i le taʻaloga, ma o ia lava o le pule o se tamaʻi 'auʻaunaga "mo uo." E pei ona masani ai le au amateurs, o mea uma i luga o le 'auʻaunaga e faʻaleleia, ma e aʻafia ai le le mautonu ma, o se taunuuga, faʻalavelave. Talu ai e sili atu le iloa e le tusitala o Powershell nai lo le nofoaga o faleoloa i luga o lona auala, na ia filifili e fai "Fa'amatalaga Sili e Fa'alauiloa Minecraft 2020" O le tusitusiga lava e tasi na avea ma faavae mo le mamanu i Ruvds maketi maketi. Ae o punaoa uma ua uma ona i totonu o le tusiga. Ia, i le faasologa, pe na faapefea ona faia uma.

O poloaiga tatou te manaomia

Su'ega fa'amau

I se tasi aso, ina ua uma ona faʻapipiʻi nisi mods, na ou iloa ai o le server, e foliga mai, o loʻo paʻu e aunoa ma le folafolaina o taua. E leʻi tusia e le 'auʻaunaga ni mea sese i le latest.log poʻo le debug, ma o le faʻamafanafanaga, lea i le talitonuga e tatau ona tusia lenei mea sese ma taofi, na tapunia.

Afai e le manao e tusi, e le manaomia. E iai a matou Powershell ma cmdlet Tee-meamea, lea e ave ai se mea ma faʻapipiʻi i se faila ma le faʻamafanafanaga i le taimi e tasi.

.handler.ps1 | Tee-Object .StandardOutput.txt -Append

I lenei auala, Powershell o le a pikiina le StandardOutput ma tusi i se faila. Aua le taumafai e fa'aoga Amata-Fa'agasologaaua o le a toe foi mai System.ComponentModel.Component nai lo StandardOutput, ma -RedirectStandardOutput o le a le mafai ai ona ulufale i totonu o le faʻamafanafanaga, o le mea lea tatou te manaʻo e aloese ai.

Tatala finauga

Ina ua uma ona faʻapipiʻi lena lava paga o mods, na matauina e le tusitala e le lava le RAM o le server. Ma o lenei mea e manaʻomia ai le suia o finauga faʻalauiloa. Nai lo le suia i taimi uma i le start.bat, lea e faʻaaogaina e tagata uma, naʻo le faʻaogaina o lenei tusitusiga.

Talu ai e na'o Tee-Object e faitau StandardOutput pe a ta'ua le fa'atinoina o le "Just Like This", e tatau ona e faia se isi tusitusiga. O lenei tusitusiga o le a faʻalauiloaina e Minecraft lava ia. Tatou amata i finauga.

Ina ia mafai ona fa'afiafia i le paie i le lumana'i, e tatau i le tusitusiga ona aoina fa'amatalaga fa'alauiloa i luga o le lele. Ina ia faia lenei mea, se'i o tatou amata i le su'eina o le lomiga fou faʻatau.

$forge = ((Get-ChildItem | Where-Object Name -Like "forge*").Name | Sort-Object -Descending) | Select-Object -last 1

I le fa'aaogaina o le fa'avasega-meafaitino, matou te ave pea le mea ma le numera tele, tusa lava po'o le a le tele o latou e tu'u i ai. O le paie sili.

Ole taimi nei e te manaʻomia le tuʻuina atu o le manatua ile server. Ina ia faia lenei mea, ave le aofaʻi o le manatua o le system ma tusi lona aofaʻi i le manoa.

$ram = ((Get-CimInstance Win32_PhysicalMemory | Measure-Object -Property capacity -Sum).sum /1gb)
$xmx = "-Xms" + $ram + "G"

Fa'asa'o otometi toe amata

O le tusitala na vaʻaia faila .bat mai isi tagata, ae latou te leʻi amanaia le mafuaaga na taofia ai le server. E le faigofie lenei mea, faʻapefea pe afai e te manaʻomia le suia o le faila mod pe tape se mea?
Se'i o tatou toe amata lelei. Na maua muamua e le tusitala ni tusitusiga uiga ese na toe amata ai le server e tusa lava po o le a le mafuaaga na tapunia ai le server. O le a matou fa'aogaina le exitcode. E fa'aaoga e Java le 0 e manuia ai, o lea o le a tatou siva mai ai.

Muamua, tatou faia se galuega e toe amata ai le server pe a le manuia.

function Get-MinecraftExitCode {
   
    do {
        
        if ($global:Process.ExitCode -ne 0) {
            Write-Log
            Restart-Minecraft
        }
        else {
            Write-Log
        }
 
    } until ($global:Process.ExitCode -eq 0)
    
}

O le tusitusiga o le a tumau i totonu o le matasele seia tapuni le server masani mai lana lava faʻamafanafanaga e faʻaaoga ai le /stop command.

Afai tatou te filifili e otometi mea uma, o le a manaia le aoina o le aso amata, aso faʻamaeʻa, ma le mafuaʻaga o le maeʻa.

Ina ia faia lenei mea, matou te tusia le taunuuga o le Start-Process i se fesuiaiga. I le script e pei o lenei:

$global:Process = Start-Process -FilePath  "C:Program Files (x86)common filesOracleJavajavapath_target_*java.exe" -ArgumentList "$xmx -server -jar $forge nogui" -Wait -NoNewWindow -PassThru

Ona matou tusia lea o taunuuga i se faila. O le mea lea e toe faafoi mai ia i matou i le fesuiaiga:

$global:Process.StartTime
$global:Process.ExitCode	
$global:Process.ExitTime

O nei mea uma e mafai ona faʻaopoopo i se faila e faʻaaoga ai le Add-Content. A uma ona selu teisi, ona tatou maua lea o le tusitusiga lea, ma taʻu o le handler.ps1.

Add-Content -Value "Start time:" -Path $Logfile 
$global:Process.StartTime
 
Add-Content -Value "Exit code:" -Path $Logfile 
$global:Process.ExitCode | Add-Content $Logfile
    
Add-Content -Value "Exit time:" -Path $Logfile 
$global:Process.ExitTime | Add-Content $Logfile

Se'i o tatou faia se fa'amatalaga e fa'alauiloa ai le fa'afoe.

Sa'o le amataga

E manaʻo le tusitala e taʻavale ituaiga eseese o Minecraft mai soʻo se auala i se tasi module, ma mafai foi ona teuina ogalaau i totonu o se pusa patino.

O le faʻafitauli o le faʻagasologa e tatau ona amataina e se tagata faʻaoga o loʻo saini i totonu o le polokalama. E mafai ona faia lenei mea e ala i le komepiuta poʻo WinRm. Afai e te faʻatautaia le server o se tagata faʻaoga faiga poʻo se pule foi, ae e te le saini i totonu, ona le mafai lea e Server.jar ona faitau eula.txt ma amata.

E mafai ona matou fa'aogaina le saini otometi e ala i le fa'aopoopoina o fa'amaumauga se tolu i le resitala.

New-ItemProperty -Path "HKLM:SOFTWAREMicrosoftWindows NTCurrentVersionWinlogon" -Name DefaultUserName -Value $Username -ErrorAction SilentlyContinue
New-ItemProperty -Path "HKLM:SOFTWAREMicrosoftWindows NTCurrentVersionWinlogon" -Name DefaultPassword -Value $Password  -ErrorAction SilentlyContinue
New-ItemProperty -Path "HKLM:SOFTWAREMicrosoftWindows NTCurrentVersionWinlogon" -Name AutoAdminLogon -Value 1 -ErrorAction SilentlyContinue

E le saogalemu. O le login ma le password o loʻo faʻaalia iinei i le faʻamatalaga manino, o lea e amata ai le server e te manaʻomia le fatuina o se tagata faʻaoga ese e mafai ona maua i le tulaga faʻaoga, poʻo se vaega vaapiapi. E matua le fautuaina le faʻaaogaina o se faʻatonu masani mo lenei mea.

Sa matou fa'avasegaina le auto-login. Ole taimi nei e te mana'omia le resitalaina o se galuega fou mo le 'au'aunaga. O le a matou faʻatautaia le faʻatonuga mai le Powershell, o lea o le a pei o lenei:

$Trigger = New-ScheduledTaskTrigger -AtLogOn
$User = "ServerAdmin"
$PS = New-ScheduledTaskAction -Execute 'PowerShell.exe" -Argument "Start-Minecraft -Type Forge -LogFile "C:minecraftstdout.txt" -MinecraftPath "C:minecraft"'
Register-ScheduledTask -TaskName "StartSSMS" -Trigger $Trigger -User $User -Action $PS -RunLevel Highest

Faʻapipiʻiina o le module

Se'i o tatou tu'u mea uma i modules e mafai ona fa'aaoga mulimuli ane. O tulafono uma mo tusitusiga ua saunia o loʻo i ai iinei, faʻaulufale mai ma faʻaoga.

E mafai ona e faʻaogaina mea uma o loʻo faʻamatalaina i luga pe afai e te le manaʻo e faʻalavelave i modules.

Amata-Minecraft

Muamua, tatou faia se module e leai se mea e sili atu nai lo le faʻataʻitaʻiina o se tusitusiga e faʻalogo ma faʻamaumau standardoutput.

I totonu o poloka poloka, na ia fesili mai ai po o fea le pusa e faʻalauiloa ai Minecraft ma le mea e tuʻu ai le ogalaau.

Set-Location (Split-Path $MyInvocation.MyCommand.Path)
function Start-Minecraft {
    [CmdletBinding()]
    param (
        [Parameter()]
        [ValidateNotNullOrEmpty()]
        [string]
        $LogFile,
 
        [Parameter(Mandatory)]  
        [ValidateSet('Vanilla', 'Forge')]
        [ValidateNotNullOrEmpty()]
        [string]
        $Type,
 
        [Parameter(Mandatory)]
        [ValidateNotNullOrEmpty()]
        [string[]]
        $MinecraftPath
 
    )
    powershell.exe -file .handler.ps1 -type $type -MinecraftPath $MinecraftPath | Tee-Object $LogFile -Append
}
Export-ModuleMember -Function Start-Minecraft

Ma e te manaʻomia le faʻalauiloaina o Minecraft e pei o lenei:

Start-Minecraft -Type Forge -LogFile "C:minecraftstdout.txt" -MinecraftPath "C:minecraft"

Se'i o tatou aga'i atu i le Handler.ps1 sauni e fa'aoga

Ina ia mafai e le matou tusitusiga ona talia faʻamaufaʻailoga pe a valaʻau, matou te manaʻomia foi ona faʻamaonia se poloka poloka. Faamolemole ia matau, o loʻo taʻavale Oracle Java, afai o loʻo e faʻaaogaina se isi tufatufaga e te manaʻomia le suia o le ala i le faila faila.

param (
    [Parameter()]
    [ValidateNotNullOrEmpty()]
    [string]$type,
 
    [Parameter()]
    [ValidateNotNullOrEmpty()]
    [string]$MinecraftPath,
 
    [Parameter()]
    [ValidateNotNullOrEmpty()]
    [string]$StandardOutput
)
 
Set-Location $MinecraftPath
 
function Restart-Minecraft {
 
    Write-host "=============== Starting godlike game server ============"
 
    $forge = ((Get-ChildItem | Where-Object Name -Like "forge*").Name | Sort-Object -Descending) | Select-Object -first 1
 
    $ram = ((Get-CimInstance Win32_PhysicalMemory | Measure-Object -Property capacity -Sum).sum /1gb)
    $xmx = "-Xms" + $ram + "G"
    $global:Process = Start-Process -FilePath  "C:Program Files (x86)common filesOracleJavajavapath_target_*java.exe" -ArgumentList "$xmx -server -jar $forge nogui" -Wait -NoNewWindow -PassThru
    
}
 
function Write-Log {
    Write-host "Start time:" $global:Process.StartTime
 
    Write-host "Exit code:" $global:Process.ExitCode
    
    Write-host "Exit time:" $global:Process.ExitTime
 
    Write-host "=============== Stopped godlike game server ============="
}
 
function Get-MinecraftExitCode {
   
    do {
        
        if ($global:Process.ExitCode -ne 0) {
            Restart-Minecraft
            Write-Log
        }
        else {
            Write-Log
        }
 
    } until ($global:Process.ExitCode -eq 0)
    
}
 
Get-MinecraftExitCode

Resitala-Minecraft

O le tusitusiga e toetoe lava tutusa ma le Start-Minecraft, sei vagana ua na o le resitalaina o se galuega fou. Taliaina finauga tutusa. Ole igoa ole igoa, pe a le fa'amaoti mai, e ave le igoa ole iai nei.

function Register-Minecraft {
    [CmdletBinding()]
    param (
        [Parameter()]
        [ValidateNotNullOrEmpty()]
        [string]
        $LogFile,
 
        [Parameter(Mandatory)]  
        [ValidateSet('Vanilla', 'Forge')]
        [ValidateNotNullOrEmpty()]
        [string]$Type,
 
        [Parameter(Mandatory)]
        [ValidateNotNullOrEmpty()]
        [string]$MinecraftPath,
 
        [Parameter(Mandatory)]
        [ValidateNotNullOrEmpty()]
        [string]$User,
 
        [Parameter(Mandatory)]
        [string]$TaskName = $env:USERNAME
    )
 
    $Trigger = New-ScheduledTaskTrigger -AtLogOn
    $arguments = "Start-Minecraft -Type $Type -LogFile $LogFile -MinecraftPath $MinecraftPath"
    $PS = New-ScheduledTaskAction -Execute "PowerShell" -Argument "-noexit -command $arguments"
    Register-ScheduledTask -TaskName $TaskName -Trigger $Trigger -User $User -Action $PS -RunLevel Highest
    
}
 
Export-ModuleMember -Function Register-Minecraft

Resitala-Autologon

I totonu o poloka poloka, e talia e le tusitusiga le igoa ole Username ma le Password. Afai e le'i fa'ailoa mai le Igoa o le Fa'aoga, e fa'aoga le igoa ole tagata o iai nei.

function Set-Autologon {
 
    param (
        [Parameter(
        HelpMessage="Username for autologon")]
        $Username = $env:USERNAME,
 
        [Parameter(Mandatory=$true,
        HelpMessage="User password")]
        [ValidateNotNullOrEmpty()]
        $Password
    )
 
    $i = Get-ItemProperty -Path "HKLM:SOFTWAREMicrosoftWindows NTCurrentVersionWinlogon"
 
    if ($null -eq $i) {
        New-ItemProperty -Path "HKLM:SOFTWAREMicrosoftWindows NTCurrentVersionWinlogon" -Name DefaultUserName -Value $Username
        New-ItemProperty -Path "HKLM:SOFTWAREMicrosoftWindows NTCurrentVersionWinlogon" -Name DefaultPassword -Value $Password 
        New-ItemProperty -Path "HKLM:SOFTWAREMicrosoftWindows NTCurrentVersionWinlogon" -Name AutoAdminLogon -Value 1
        Write-Verbose "Set-Autologon will enable user auto logon."
 
    }
    else {
        Set-ItemProperty -Path "HKLM:SOFTWAREMicrosoftWindows NTCurrentVersionWinlogon" -Name DefaultUserName -Value $Username
        Set-ItemProperty -Path "HKLM:SOFTWAREMicrosoftWindows NTCurrentVersionWinlogon" -Name DefaultPassword -Value $Password
        Set-ItemProperty -Path "HKLM:SOFTWAREMicrosoftWindows NTCurrentVersionWinlogon" -Name AutoAdminLogon -Value 1
    }
 
    
    Write-Verbose "Autologon was set successfully."
 
}

O le fa'atinoina o lenei tusitusiga e pei o lenei:

Set-Autologon -Password "PlaintextPassword"

Auala e faʻaoga ai

Se'i o tatou va'ai pe fa'apefea ona fa'aogaina e le tusitala ia mea uma. E faʻafefea ona faʻapipiʻi lelei se tagata lautele Minecraft server i Windows. Tatou amata mai lava i le amataga.

1. Fausia se tagata fa'aoga

$pass = Get-Credential
New-LocalUser -Name "MinecraftServer" -Password $pass.Password -AccountNeverExpires -PasswordNeverExpires -UserMayNotChangePassword

2. Resitala le galuega e fa'atino ai le tusitusiga

E mafai ona e lesitala e faʻaaoga ai se module e pei o lenei:

Register-Minecraft -Type Forge -LogFile "C:minecraftstdout.txt" -MinecraftPath "C:minecraft" -User "MInecraftServer" -TaskName "MinecraftStarter"

Pe fa'aaoga meafaigaluega masani:

$Trigger = New-ScheduledTaskTrigger -AtLogOn
$User = "ServerAdmin"
$PS = New-ScheduledTaskAction -Execute 'PowerShell.exe" -Argument "Start-Minecraft -Type Forge -LogFile "C:minecraftstdout.txt" -MinecraftPath "C:minecraft"'
Register-ScheduledTask -TaskName "StartSSMS" -Trigger $Trigger -User $User -Action $PS -RunLevel Highest

3. Fa'agaoioi le auto-login ma toe fa'aola le masini

Set-Autologon -Username "MinecraftServer" -Password "Qw3"

Maea

Na faia e le tusitala le tusitusiga, e aofia ai mo ia lava, o le mea lea, o le a fiafia e faʻalogo i au fautuaga mo le faʻaleleia o le tusitusiga. O loʻo faʻamoemoe le tusitala o nei tulafono uma e sili ona aoga ia te oe, ma o le tusiga e manaia.

Ole tala ole amataga ole server a Minecraft

puna: www.habr.com

Faaopoopo i ai se faamatalaga