ʻO ka palapala hoʻomaka hoʻomaka server Minecraft maikaʻi loa

ʻO ka palapala hoʻomaka hoʻomaka server Minecraft maikaʻi loa

Aloha nui ka mea kākau i ka pāʻani, a ʻo ia iho ka luna hoʻomalu o kahi kikowaena liʻiliʻi "no nā hoaaloha." E like me ka mea maʻamau i waena o nā amateurs, ua hoʻololi ʻia nā mea āpau ma ke kikowaena, a ke komo nei kēia i ka instability a, ma muli o ka hopena, hāʻule. ʻOiai ʻoi aku ka ʻike o ka mea kākau o Powershell ma mua o ka wahi o nā hale kūʻai ma kona alanui, ua hoʻoholo ʻo ia e hana "ʻO ka ʻatikala maikaʻi loa e hoʻolauna iā Minecraft 2020" Ua lilo ka palapala like i kumu no ka template in Makeke Ruvds. Akā aia nā kumu a pau ma ka ʻatikala. I kēia manawa, ma ke ʻano, pehea i hana ʻia ai.

ʻO nā kauoha a mākou e pono ai

Ke kālai lāʻau ʻokoʻa

I kekahi lā, ma hope o ka hoʻokomo ʻana i ʻelua mau mods hou aʻe, ʻike wau ua hāʻule ka server, me ka ʻole o ka haʻi ʻana i ke kaua. ʻAʻole i kākau ke kikowaena i nā hewa ma latest.log a i ʻole i ka debug, a ua pani ʻia ka console, i ka manaʻo i kākau i kēia hewa a hoʻōki.

Inā ʻaʻole makemake ʻo ia e kākau, ʻaʻole pono ʻo ia. Loaʻa iā mākou Powershell me cmdlet Kahu-mea, ka mea e lawe i kahi mea a hoʻopuka iā ia i kahi faila a i ka console i ka manawa like.

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

Ma kēia ala, e ʻohi ʻo Powershell i ka StandardOutput a kākau iā ia i kahi faila. Mai ho'āʻo e hoʻohana Hoʻomaka-Kaʻinano ka mea, e hoʻihoʻi ʻo System.ComponentModel.Component ma mua o StandardOutput, a -RedirectStandardOutput e hiki ʻole ke komo i loko o ka console, ʻo ia ka mea a mākou e makemake ai e pale aku.

E hoʻolele i nā manaʻo

Ma hope o ka hoʻokomo ʻana i kēlā mau mods like, ʻike ka mea kākau ʻaʻole lawa ka RAM o ka server. A pono kēia e hoʻololi i nā manaʻo hoʻomaka. Ma mua o ka hoʻololi ʻana iā lākou i kēlā me kēia manawa i ka start.bat, ka mea e hoʻohana ai nā mea a pau, e hoʻohana wale i kēia palapala.

No ka mea heluhelu wale ʻo Tee-Object i ka StandardOutput ke kapa ʻia ka mea hoʻokō "E like me kēia", pono ʻoe e hana i kahi palapala ʻē aʻe. E hoʻokuʻu ʻia kēia palapala e Minecraft ponoʻī. E hoʻomaka kākou me nā hoʻopaʻapaʻa.

I mea e ʻoluʻolu ai i ka palaualelo hope loa i ka wā e hiki mai ana, pono e hōʻiliʻili ka palapala i nā manaʻo hoʻomaka ma ka lele. No ka hana ʻana i kēia, e hoʻomaka kākou ma ka ʻimi ʻana i ka mana hou loa noi.

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

Me ka hoʻohana ʻana i ka mea ʻano, e lawe mau mākou i ka mea me ka helu nui loa, ʻaʻole pili i ka nui o lākou āu e kau ai ma laila. Moloā hope loa.

I kēia manawa pono ʻoe e hāʻawi i ka hoʻomanaʻo i ke kikowaena. No ka hana ʻana i kēia, e lawe i ka nui o ka hoʻomanaʻo ʻōnaehana a kākau i kona nui ma ke kaula.

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

Hoʻomaka ʻakomi pololei

Ua ʻike ka mea kākau i nā faila .bat mai nā poʻe ʻē aʻe, akā ʻaʻole lākou i noʻonoʻo i ke kumu i hoʻōki ʻia ai ke kikowaena. He mea maʻalahi kēia, pehea inā pono ʻoe e hoʻololi i ka faila mod a i ʻole e holoi i kekahi mea?
I kēia manawa e hana i kahi hoʻomaka hou. Ua ʻike mua ka mea kākau i nā palapala ʻē aʻe i hoʻomaka hou i ke kikowaena me ke kumu o ka pani ʻana o ke kikowaena. E hoʻohana mākou i ka exitcode. Hoʻohana ʻo Java i ka 0 ma ke ʻano he holomua, no laila e hula mākou mai ʻaneʻi.

ʻO ka mea mua, e hana kākou i kahi hana e hoʻomaka hou ai i ke kikowaena inā hāʻule.

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

E mau ana ka palapala ma ka loop a hiki i ka pau ana o ke kikowaena mai kona console iho me ke kauoha / stop.

Inā hoʻoholo mākou e hoʻokaʻawale i nā mea āpau, a laila maikaʻi e hōʻiliʻili i ka lā hoʻomaka, ka lā hoʻopau, a me ke kumu hoʻi o ka hoʻopau ʻana.

No ka hana ʻana i kēia, kākau mākou i ka hopena o ka Start-Process i kahi loli. Ma ka palapala, ua like ia me keia:

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

A laila kākau mākou i nā hopena i kahi faila. ʻO kēia ka mea i hoʻihoʻi ʻia mai iā mākou ma ka ʻano hoʻololi:

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

Hiki ke hoʻohui ʻia kēia mau mea a pau i kahi faila me ka hoʻohana ʻana i Add-Content. Ma hope o ka hoʻopili liʻiliʻi ʻana, loaʻa iā mākou kēia palapala, a e kapa mākou iā ia 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

I kēia manawa, e hana kākou i kahi palapala e hoʻomaka ana i ka mea hoʻohana.

Hoʻomaka pololei

Makemake ka mea kākau e holo i nā ʻano like ʻole o Minecraft mai kēlā me kēia ala i hoʻokahi module, a hiki ke mālama i nā lāʻau i loko o kahi waihona kikoʻī.

ʻO ka pilikia, pono e hoʻomaka ke kaʻina hana e kahi mea hoʻohana i komo i ka ʻōnaehana. Hiki ke hana ʻia kēia ma o ka pākaukau a i ʻole WinRm. Inā holo ʻoe i ke kikowaena ma ke ʻano he mea hoʻohana ʻōnaehana a i ʻole he luna hoʻomalu, akā ʻaʻole ʻoe e komo, a laila ʻaʻole hiki iā Server.jar ke heluhelu eula.txt a hoʻomaka.

Hiki iā mākou ke hoʻohana i ka hoʻopaʻa inoa ma o ka hoʻohui ʻana i ʻekolu mau mea hoʻokomo i ka papa inoa.

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

ʻAʻole palekana. Hōʻike ʻia ka inoa inoa a me ka ʻōlelo huna ma ʻaneʻi ma ka plaintext, no laila e hoʻomaka i ka kikowaena pono ʻoe e hana i kahi mea hoʻohana kaʻawale i loaʻa i ka pae hoʻohana, a i ʻole ma kahi hui haiki. ʻAʻole ʻōlelo ʻia e hoʻohana i kahi luna maʻamau no kēia.

Hoʻokaʻawale mākou i ke komo ʻana. I kēia manawa pono ʻoe e hoʻopaʻa inoa i kahi hana hou no ke kikowaena. E holo mākou i ke kauoha mai Powershell, no laila e like me kēia:

$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

ʻO ka hui ʻana i ka module

I kēia manawa e hoʻokomo i nā mea a pau i loko o nā modula hiki ke hoʻohana ma hope. Aia nā code a pau no nā palapala i hoʻomākaukau ʻia, lawe mai a hoʻohana.

Hiki iā ʻoe ke hoʻohana i nā mea āpau i wehewehe ʻia ma luna nei inā ʻaʻole ʻoe makemake e hoʻopilikia i nā modula.

Hoʻomaka-Minecraft

ʻO ka mea mua, e hana mākou i kahi module e hana ʻole i kahi mea ʻē aʻe ma mua o ka holo ʻana i kahi palapala e hoʻolohe a hoʻopaʻa i ka standardoutput.

I loko o nā ʻāpana ʻāpana, nīnau ʻo ia mai kahi waihona e hoʻomaka ai i ka Minecraft a ma hea e waiho ai i ka lāʻau.

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

A pono ʻoe e hoʻomaka i ka Minecraft e like me kēia:

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

E neʻe kākou i ka Handler.ps1 mākaukau e hoʻohana

I mea e ʻae ai kā mākou palapala i nā ʻāpana ke kāhea ʻia, pono mākou e kuhikuhi i kahi poloka parameter. E ʻoluʻolu, e holo ana ʻo Oracle Java, inā ʻoe e hoʻohana ana i kahi mahele ʻokoʻa pono ʻoe e hoʻololi i ke ala i ka faila hoʻokō.

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

Kakau-Minecraft

Ua like ka palapala me Start-Minecraft, koe wale no ke kakau inoa i kahi hana hou. ʻAe i nā manaʻo like. ʻO ka inoa inoa, inā ʻaʻole i kuhikuhi ʻia, lawe i ka mea i kēia manawa.

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

Kakau-Autologon

I loko o ka ʻāpana ʻāpana, ʻae ka palapala i ka inoa mea hoʻohana a me ka ʻōlelo huna. Inā ʻaʻole i kuhikuhi ʻia ka inoa hoʻohana, hoʻohana ʻia ka inoa o ka mea hoʻohana i kēia manawa.

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

Ke holo nei kēia ʻatikala penei:

Set-Autologon -Password "PlaintextPassword"

Pehea e hoʻohana ai

I kēia manawa, e nānā kākou i ka hoʻohana ʻana o ka mea kākau iā ia iho. Pehea e kau pono ai i kahi kikowaena Minecraft lehulehu ma Windows. E hoʻomaka kākou mai kinohi mai.

1. Hana i mea hoʻohana

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

2. E hoʻopaʻa inoa i ka hana e holo i ka palapala

Hiki iā ʻoe ke hoʻopaʻa inoa me ka hoʻohana ʻana i kahi module e like me kēia:

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

A i ʻole e hoʻohana i nā mea hana maʻamau:

$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. E ho'ā i ke komo 'akomi a ho'omaka hou i ka mīkini

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

Ka pauʻana

Ua hana ka mea kākau i ka palapala, a nona iho, no laila, e hauʻoli ʻo ia e hoʻolohe i kāu mau manaʻo no ka hoʻomaikaʻi ʻana i ka palapala. Manaʻo ka mea kākau he mea liʻiliʻi loa kēia code a pau iā ʻoe, a he hoihoi ka ʻatikala.

ʻO ka palapala hoʻomaka hoʻomaka server Minecraft maikaʻi loa

Source: www.habr.com

Pākuʻi i ka manaʻo hoʻopuka