Sengoloa se loketseng sa ho qala seva sa Minecraft

Sengoloa se loketseng sa ho qala seva sa Minecraft

Mongoli o rata papali eo haholo, 'me eena ka boeena ke molaoli oa seva e nyenyane "bakeng sa metsoalle feela." Joalo ka tloaelo har'a batho ba sa tsebeng letho, ntho e 'ngoe le e' ngoe e ho seva e fetotsoe, 'me sena se kenyelletsa ho hloka botsitso' me, ka lebaka leo, ho senyeha. Kaha mongoli oa Powershell o tseba hantle ho feta sebaka sa mabenkele seterateng sa hae, o ile a etsa qeto ea ho etsa "Script e Molemohali ea ho Qala Minecraft 2020" Mongolo o tšoanang o sebelitse e le motheo oa template ho Mmaraka oa Ruvds. Empa mehloli eohle e se e ntse e le sehloohong. Jwale, ka tatelano, kamoo tsohle di entsweng.

Litaelo tseo re li hlokang

Mokhoa o mong oa ho rema lifate

Ka letsatsi le leng, ka mor'a ho kenya li-mods tse ling tse 'maloa, ke ile ka fumana hore seva, kamoo ho bonahalang kateng, se ne se senyeha ntle le ho phatlalatsa ntoa. Seva ha ea ka ea ngola liphoso ho latest.log kapa ho debug, 'me console, eo ka khopolo e neng e lokela ho ngola phoso ena le ho emisa, e koetsoe.

Haeba a sa batle ho ngola, ha a hloke. Re na le Powershell e nang le cmdlet Ntho ea Tee, e nkang ntho ebe e e hlahisa ho faele le ho console ka nako e le 'ngoe.

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

Ka tsela ena, Powershell e tla nka StandardOutput ebe e e ngolla faeleng. U se ke ua leka ho sebelisa Qala-Tshebetsohobane e tla khutlisa System.ComponentModel.Component eseng StandardOutput, le -RedirectStandardOutput e tla etsa hore ho se khonehe ho kena ka har'a console, e leng seo re batlang ho se qoba.

Qala likhang

Kamora ho kenya li-mods tse tšoanang, mongoli o ile a hlokomela hore seva le sona ha se na RAM e lekaneng. 'Me sena se hloka ho fetola likhang tsa ho qala. Ho e-na le ho li fetola nako le nako ho start.bat, eo bohle ba e sebelisang, sebelisa feela mongolo ona.

Kaha Tee-Object e bala StandardOutput feela ha e phethisoang e bitsoa "Just Like This", u tla tlameha ho etsa mongolo o mong. Script ena e tla hlahisoa ke Minecraft ka boeona. A re qaleng ka likhang.

E le hore u kenelle botsoang ba ho qetela nakong e tlang, script e tlameha ho bokella likhang tsa ho qala hang-hang. Ho etsa sena, a re qaleng ka ho batla mofuta oa morao-rao ho itlama.

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

Ka ho sebelisa mofuta-ntho, re tla lula re nka ntho e nang le palo e kholo ka ho fetisisa, ho sa tsotellehe hore na u beha tse kae moo. Botsoa ba ho qetela.

Hona joale o hloka ho fana ka memori ho seva. Ho etsa sena, nka palo ea memori ea tsamaiso 'me u ngole palo ea eona ka khoele.

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

Lokisa ho qala bocha ka boiketsetso

Mongoli o bone lifaele tsa .bat ho batho ba bang, empa ha baa ka ba ela hloko lebaka leo seva se emisitsoeng ka lona. Sena ha se na thuso, ho thoe'ng haeba u hloka feela ho fetola faele ea mod kapa ho hlakola ntho e itseng?
Joale ha re qaleng bocha ka nepo. Sengoli se kile sa kopana le mangolo a makatsang a ileng a qala seva bocha ho sa tsotelehe hore na ke hobane'ng ha seva se koetse. Re tla sebelisa exitcode. Java e sebelisa 0 e le katleho, kahoo re tla tantša ho tloha mona.

Taba ea pele, a re theheng tšebetso e tla qala seva bocha haeba e hloleha.

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

Sengoloa se tla lula se le ka har'a loop ho fihlela seva se koala ka mokhoa o tloaelehileng ho tsoa ho khomphutha ea sona se sebelisa taelo ea /stop.

Haeba re etsa qeto ea ho iketsetsa ntho e 'ngoe le e' ngoe, ho tla ba monate ho bokella letsatsi la ho qala, letsatsi la ho qeta, le lebaka la ho qeta.

Ho etsa sena, re ngola sephetho sa Start-Process ho fetoha. Ka script e shebahala tjena:

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

Ebe re ngola liphetho faeleng. Sena ke se khutliselitsoeng ho rona ho feto-fetoha:

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

Tsena tsohle li ka ekeletsoa faeleng ka ho sebelisa Add-Content. Ka mor'a ho e kopanya hanyenyane, re fumana lengolo lena, 'me re le bitse 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

Joale ha re theheng sengoloa se qalang handler.

Ho qala hantle

Sengoli se batla ho tsamaisa mefuta e fapaneng ea Minecraft ho tloha tseleng efe kapa efe mojuleng o le mong, hape o khona ho boloka lingoloa foldareng e itseng.

Bothata ke hore ts'ebetso e tlameha ho qalisoa ke mosebelisi ea keneng ho sistimi. Sena se ka etsoa ka desktop kapa WinRm. Haeba o tsamaisa seva joalo ka mosebelisi oa sistimi kapa esita le motsamaisi, empa o sa kene, joale Server.jar e ke ke ea khona le ho bala eula.txt le ho qala.

Re ka nolofalletsa ho kena ka boiketsetso ka ho kenyelletsa tse tharo ho registry.

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

Ha e bolokehe. Ho kena le phasewete li bonts'itsoe mona ka mokhoa o hlakileng, kahoo ho qala seva o hloka ho theha mosebelisi ea ka thoko ea nang le phihlello boemong ba mosebelisi, kapa sehlopheng se fokolang le ho feta. Ha ho khothalletsoe ho sebelisa molaoli ea tloaelehileng bakeng sa sena.

Re hlophisitse ho kena ka bohona. Hona joale o hloka ho ngolisa mosebetsi o mocha bakeng sa seva. Re tla tsamaisa taelo e tsoang ho Powershell, kahoo e tla shebahala tjena:

$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

Ho kopanya mojule

Joale ha re kenyeng tsohle ka har'a li-module tse ka sebelisoang hamorao. Khoutu eohle ea mangolo a seng a entsoe e teng mona, kenya le ho e sebelisa.

U ka sebelisa ntho e 'ngoe le e' ngoe e hlalositsoeng ka holimo ka thoko haeba u sa batle ho khathatseha ka li-module.

Qala Minecraft

Taba ea pele, ha re theheng mojule o ke keng oa etsa letho haese ho tsamaisa mongolo o tla mamela le ho rekota tlhahiso e tloaelehileng.

Ka har'a li-parameter block, o botsa ho tsoa foldareng efe ea ho qala Minecraft le hore na o tla beha log hokae.

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

'Me u tla hloka ho qala Minecraft ka tsela ena:

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

Joale ha re feteleng ho Handler.ps1 e seng e loketse ho sebelisoa

E le hore script ea rona e amohele mekhahlelo ha e bitsoa, ​​re boetse re hloka ho hlakisa sebaka sa parameter block. Ka kopo hlokomela, e tsamaisa Oracle Java, haeba u sebelisa phepelo e fapaneng u tla hloka ho fetola tsela ea faele e sebetsang.

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

Ngolisa - Minecraft

Script e batla e tšoana le Start-Minecraft, ntle le hore e ngolisa mosebetsi o mocha feela. E amohela likhang tse tšoanang. Lebitso la mosebelisi, haeba le sa hlalosoa, le nka la hajoale.

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

Ngolisa-Autogon

Ka har'a li-parameter block, script e amohela li-parameter tsa Username le Password. Haeba Username e ne e sa hlalosoa, ho tla sebelisoa lebitso la mosebelisi oa hajoale.

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."
 
}

Ho tsamaisa script ho shebahala tjena:

Set-Autologon -Password "PlaintextPassword"

Mokhoa oa ho sebelisa

Jwale ha re shebeng hore na mongodi ka boyena o sebedisa tsena tsohle jwang. Mokhoa oa ho tsamaisa seva ea Minecraft ka nepo ho Windows. A re qaleng ho tloha qalong.

1. Etsa mosebelisi

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

2. Ngolisa mosebetsi ho tsamaisa script

U ka ingolisa u sebelisa mojule o kang ona:

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

Kapa sebelisa lisebelisoa tse tloaelehileng:

$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. Numella ho kena ka boits'oaro le ho qala mochini bocha

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

Qetellong

Mongoli o ile a iketsetsa script, ho kenyeletsa le eena, ka hona, o tla thabela ho mamela litlhahiso tsa hau bakeng sa ho ntlafatsa script. Sengoli se tšepa hore khoutu ena kaofela e bile le thuso ho uena, le hore sengoloa se ne se khahla.

Sengoloa se loketseng sa ho qala seva sa Minecraft

Source: www.habr.com

Eketsa ka tlhaloso