Qhov zoo tshaj plaws Minecraft server startup tsab ntawv

Qhov zoo tshaj plaws Minecraft server startup tsab ntawv

Tus sau nyiam qhov kev ua si heev, thiab nws tus kheej yog tus thawj coj ntawm lub server me me "rau cov phooj ywg nkaus xwb." Raws li ib txwm muaj ntawm cov amateurs, txhua yam ntawm cov neeg rau zaub mov yog modded, thiab qhov no entails instability thiab, vim li ntawd, crashes. Txij li thaum tus sau Powershell paub zoo dua qhov chaw ntawm cov khw muag khoom ntawm nws txoj kev, nws txiav txim siab ua "Cov ntawv zoo tshaj plaws los pib Minecraft 2020" Tib tsab ntawv ua lub hauv paus rau tus qauv hauv Ruvds khw. Tab sis tag nrho cov peev txheej twb muaj nyob rau hauv tsab xov xwm. Tam sim no, nyob rau hauv kev txiav txim, yuav ua li cas nws tau ua tag nrho.

Cov lus txib peb xav tau

Lwm txoj kev kaw lus

Muaj ib hnub, tom qab kev txhim kho ob peb mods ntxiv, kuv pom tias tus neeg rau zaub mov, pom meej, tab tom poob yam tsis tau tshaj tawm ua tsov rog. Cov neeg rau zaub mov tsis tau sau qhov yuam kev hauv latest.log lossis hauv kev debug, thiab lub console, uas nyob rau hauv txoj kev xav yuav tsum tau sau qhov yuam kev no thiab nres, raug kaw.

Yog tias nws tsis xav sau, nws tsis tas yuav. Peb muaj Powershell nrog cmdlet Tee-Object, uas siv ib qho khoom thiab tso tawm rau hauv cov ntaub ntawv thiab mus rau lub console tib lub sijhawm.

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

Txoj kev no, Powershell yuav khaws StandardOutput thiab sau rau hauv cov ntaub ntawv. Tsis txhob sim siv Pib- txheej txheemvim tias nws yuav rov qab System.ComponentModel.Component es tsis yog StandardOutput, thiab -RedirectStandardOutput yuav ua rau nws tsis yooj yim sua kom nkag mus rau hauv lub console, uas yog qhov peb xav kom zam.

Tua tawm cov lus sib cav

Tom qab txhim kho tib khub ntawm mods, tus sau pom tias tus neeg rau zaub mov kuj tsis muaj RAM txaus. Thiab qhov no yuav tsum tau hloov qhov kev sib cav pib. Hloov pauv lawv txhua zaus hauv start.bat, uas txhua tus siv, tsuas yog siv tsab ntawv no.

Txij li Tee-Object tsuas yog nyeem StandardOutput thaum lub executable hu ua "Ib yam li qhov no", koj yuav tau ua lwm tsab ntawv. Tsab ntawv no yuav raug tso tawm los ntawm Minecraft nws tus kheej. Cia peb pib nrog cov lus sib cav.

Txhawm rau kom ua siab ntev rau qhov kawg tub nkeeg yav tom ntej, tsab ntawv yuav tsum sau cov lus sib cav ntawm ya. Ua li no, cia peb pib los ntawm kev tshawb nrhiav qhov tseeb version forge.

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

Siv cov khoom sib cais, peb yuav nco ntsoov nqa cov khoom nrog tus lej loj tshaj plaws, txawm tias koj muab ntau npaum li cas. Qhov kawg laziness.

Tam sim no koj yuav tsum muab lub cim xeeb rau lub server. Ua li no, coj tus nqi ntawm qhov system nco thiab sau nws cov nyiaj hauv txoj hlua.

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

Tsim nyog rov pib dua

Tus sau tau pom .bat cov ntaub ntawv los ntawm lwm tus neeg, tab sis lawv tsis tau coj mus rau hauv tus account vim li cas lub server raug tso tseg. Qhov no tsis yooj yim, yuav ua li cas yog tias koj tsuas yog xav hloov cov ntaub ntawv mod lossis rho tawm ib yam dab tsi?
Tam sim no cia peb ua kom rov pib dua. Tus sau yav dhau los tuaj hla cov ntawv coj txawv txawv uas rov pib lub server txawm tias vim li cas lub server kaw. Peb yuav siv exitcode. Java siv 0 ua tiav, yog li peb yuav seev cev ntawm no.

Ua ntej, cia peb tsim cov haujlwm uas yuav rov pib dua lub server yog tias nws ua tsis tiav.

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

Tsab ntawv yuav nyob twj ywm hauv lub voj kom txog thaum lub server kaw ib txwm los ntawm nws tus kheej console siv / nres hais kom ua.

Yog tias peb txiav txim siab automate txhua yam, ces nws yuav zoo rau sau hnub pib, hnub ua tiav, thiab yog vim li cas rau kev ua tiav.

Txhawm rau ua qhov no, peb sau qhov txiaj ntsig ntawm Start-Process rau hauv qhov sib txawv. Hauv tsab ntawv nws zoo li no:

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

Thiab tom qab ntawd peb sau cov txiaj ntsig mus rau ib daim ntawv. Qhov no yog dab tsi rov qab rau peb hauv qhov sib txawv:

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

Tag nrho cov no tuaj yeem muab ntxiv rau hauv cov ntaub ntawv siv Add-Content. Muaj combed nws me ntsis, peb tau txais tsab ntawv no, thiab cia peb hu nws 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

Tam sim no cia peb tsim ib tsab ntawv uas launches handler.

Yog pib

Tus kws sau ntawv xav khiav ntau qhov sib txawv ntawm Minecraft los ntawm txhua txoj hauv kev hauv ib qho module, thiab tseem tuaj yeem khaws cov cav hauv ib lub nplaub tshev tshwj xeeb.

Qhov teeb meem yog tias cov txheej txheem yuav tsum tau pib los ntawm tus neeg siv uas nkag mus rau hauv qhov system. Qhov no tuaj yeem ua tiav ntawm lub desktop lossis WinRm. Yog tias koj khiav lub server ua tus neeg siv system lossis txawm tias tus thawj coj, tab sis tsis nkag mus, ces Server.jar yuav tsis tuaj yeem nyeem eula.txt thiab pib.

Peb tuaj yeem ua kom tsis siv neeg nkag los ntawm kev ntxiv peb qhov nkag rau hauv cov npe.

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

Nws tsis muaj kev nyab xeeb. Tus ID nkag mus thiab lo lus zais tau qhia ntawm no hauv cov ntawv dawb, yog li txhawm rau pib lub server koj yuav tsum tsim kom muaj ib tus neeg siv sib cais uas nkag mus rau ntawm tus neeg siv qib, lossis hauv ib pawg txawm nqaim. Nws yog nruj me ntsis txwv tsis pub siv tus txheej txheem tswj hwm rau qhov no.

Peb txheeb tawm qhov pib-login. Tam sim no koj yuav tsum tau sau npe ua haujlwm tshiab rau lub server. Peb yuav khiav cov lus txib los ntawm Powershell, yog li nws yuav zoo li no:

$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

Sib sau ua ke module

Tam sim no cia peb muab txhua yam rau hauv cov modules uas tuaj yeem siv tom qab. Tag nrho cov cai rau cov ntawv npaj ua tiav nyob ntawm no, ntshuam thiab siv.

Koj tuaj yeem siv txhua yam uas tau piav qhia saum toj no cais yog tias koj tsis xav thab nrog modules.

Pib-Minecraft

Ua ntej, cia peb tsim ib qho module uas yuav ua tsis muaj dab tsi ntau tshaj li khiav ib tsab ntawv uas yuav mloog thiab sau cov qauv tawm.

Hauv qhov txwv tsis pub, nws nug los ntawm lub nplaub tshev twg los tso Minecraft thiab qhov twg tso lub cav.

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

Thiab koj yuav tsum tso Minecraft zoo li no:

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

Tam sim no cia peb mus rau qhov npaj txhij-rau-siv Handler.ps1

Txhawm rau kom peb tsab ntawv lees txais cov kev txwv thaum hu, peb kuj yuav tsum tau qhia kom meej qhov parameter thaiv. Thov nco ntsoov, nws khiav Oracle Java, yog tias koj siv ib qho kev faib tawm sib txawv koj yuav tsum tau hloov txoj hauv kev rau cov ntaub ntawv executable.

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

Sau npe-Minecraft

Cov ntawv sau tau zoo ib yam li Start-Minecraft, tshwj tsis yog tias nws tsuas yog sau npe ua haujlwm tshiab. Txais tib cov lus sib cav. Tus neeg siv lub npe, yog tias tsis tau teev tseg, siv qhov tam sim no.

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

Sau npe-Autologon

Hauv cov kev txwv tsis pub dhau, tsab ntawv lees txais tus neeg siv lub npe thiab tus lej password. Yog tias Username tsis tau teev tseg, tus neeg siv lub npe tam sim no raug siv.

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

Khiav qhov tsab ntawv no zoo li no:

Set-Autologon -Password "PlaintextPassword"

Yuav siv li cas

Tam sim no cia saib seb tus sau nws tus kheej siv tag nrho cov no li cas. Yuav ua li cas kom xa tawm pej xeem Minecraft server ntawm Windows. Cia peb pib txij thaum pib.

1. Tsim tus neeg siv

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

2. Sau npe ua haujlwm kom khiav cov ntawv

Koj tuaj yeem sau npe siv lub module zoo li no:

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

Los yog siv cov cuab yeej txheem:

$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. Pab kom nws pib-login thiab reboot lub tshuab

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

Ua tiav

Tus neeg sau ua tsab ntawv, suav nrog rau nws tus kheej, yog li ntawd, nws yuav zoo siab los mloog koj cov lus qhia txhawm rau txhim kho tsab ntawv. Tus sau cia siab tias tag nrho cov cai no tsawg kawg yog qhov muaj txiaj ntsig zoo rau koj, thiab tias tsab xov xwm tau nthuav dav.

Qhov zoo tshaj plaws Minecraft server startup tsab ntawv

Tau qhov twg los: www.hab.com

Ntxiv ib saib