Isikripthi sokuqalisa seseva yeMinecraft esifanelekileyo

Isikripthi sokuqalisa seseva yeMinecraft esifanelekileyo

Umbhali uwuthanda kakhulu umdlalo, kwaye yena ngokwakhe ungumlawuli weseva encinci "enzelwe abahlobo kuphela." Njengesiqhelo phakathi kwama-amateurs, yonke into ekumncedisi imodliwe, kwaye oku kubandakanya ukungazinzi kwaye, ngenxa yoko, ukungqubana. Kuba umbhali wePowershell wazi ngcono kunendawo yeevenkile kwisitrato sakhe, wagqiba kwelokuba enze "Esona sibhalo sibalaseleyo sokuQalisa iMinecraft ngo-2020" Iskripthi esifanayo sisebenze njengesiseko sethemplethi kwi Indawo yentengiso yaseRuvds. Kodwa yonke imithombo sele ikwinqaku. Ngoku, ngolungelelwano, ukuba kwenziwa njani konke.

Imiyalelo esiyifunayo

Ukugawulwa kwemithi okungenye

Ngenye imini, emva kokufaka ezinye iimodyuli ezimbalwa, ndafumanisa ukuba umncedisi, ngokucacileyo, wayeqhekeka ngaphandle kokubhengeza imfazwe. Umncedisi akazange abhale iimpazamo kwi latest.log okanye kwi-debug, kwaye i-console, enokuthi ngethiyori ibhale le mpazamo kwaye iyeke, yavalwa.

Ukuba akafuni ukubhala, akafuni. Sine-Powershell ene-cmdlet I-Tee-Object, ethatha into kwaye iyikhuphe kwifayile nakwi console ngexesha elinye.

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

Ngale ndlela, i-Powershell iya kuthatha i-StandardOutput kwaye ibhale kwifayile. Musa ukuzama ukusebenzisa Qala-Inkqubokuba iya kubuyisela i-System.ComponentModel.Component kwaye hayi i-StandardOutput, kwaye -RedirectStandardOutput iya kwenza ukuba kungenzeki ukungena kwi-console, into esifuna ukuyiphepha.

Qalisa iingxoxo

Emva kokufaka iimodyuli ezifanayo, umbhali waqaphela ukuba iseva nayo ayinayo i-RAM eyaneleyo. Kwaye oku kufuna ukutshintsha iingxoxo zokuqaliswa. Endaweni yokuzitshintsha ngalo lonke ixesha kwi-start.bat, esetyenziswa ngumntu wonke, sebenzisa nje esi script.

Ekubeni i-Tee-Object ifunda kuphela i-StandardOutput xa ephunyeziweyo ibizwa ngokuba "Kanye Nje Le", kuya kufuneka wenze esinye iskripthi. Esi script siya kusungulwa yiMinecraft ngokwayo. Masiqale ngeengxabano.

Ukuze uzibandakanye kubuvila bokugqibela kwixesha elizayo, iskripthi kufuneka siqokelele iingxoxo zokuqalisa ngempukane. Ukwenza oku, masiqale ngokukhangela inguqulelo yamva nje qulunqa.

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

Usebenzisa uhlobo-into, siyakuhlala sithatha into enelona nani likhulu, nokuba zingaphi na ozibeke apho. Ubuvila obugqibeleleyo.

Ngoku kufuneka unikeze imemori kwiseva. Ukwenza oku, thabatha inani lememori yenkqubo kwaye ubhale inani layo kumtya.

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

Lungisa ukuqalisa kwakhona okuzenzekelayo

Umbhali uye wabona iifayile ze-bat ezivela kwabanye abantu, kodwa abazange bathathele ingqalelo isizathu sokuba umncedisi wayeka. Oku akulunganga, kuthekani ukuba ufuna ukutshintsha ifayile yemod okanye ucime into?
Ngoku makhe siqale ngokutsha ngokufanelekileyo. Umbhali ngaphambili ufumene izikripthi ezingaqhelekanga eziqale ngokutsha iseva nokuba kutheni umncedisi evaliwe. Siza kusebenzisa ikhowudi yokuphuma. IJava isebenzisa u-0 njengempumelelo, ngoko ke siza kudanisa ukusuka apha.

Okokuqala, masenze umsebenzi oza kuqalisa kwakhona umncedisi ukuba awuphumelelanga.

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

Iscript siya kuhlala kwilophu de umncedisi avale ngokuqhelekileyo kwiconsole yakhe esebenzisa i/stop command.

Ukuba sithatha isigqibo sokwenza yonke into ngokuzenzekelayo, ngoko kuya kuba kuhle ukuqokelela umhla wokuqala, umhla wokugqiba, kunye nesizathu sokugqitywa.

Ukwenza oku, sibhala umphumo we-Start-Process ibe yinto eguquguqukayo. Kwiskripthi ibonakala ngolu hlobo:

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

Kwaye ke sibhala iziphumo kwifayile. Oku koko kubuyiselwe kuthi kuguquguquko:

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

Konke oku kunokongezwa kwifayile usebenzisa i-Add-Content. Emva kokuyikama kancinci, sifumana esi script, kwaye masiyibize ngokuba yi-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

Ngoku masenze iskripthi esivula isibambi.

Ukuqalisa okuchanekileyo

Umbhali ufuna ukuqhuba iinguqulelo ezahlukeneyo zeMinecraft ukusuka kuyo nayiphi na indlela kwimodyuli enye, kwaye ukwazi ukugcina izingodo kwifolda ethile.

Ingxaki kukuba inkqubo kufuneka iqalwe ngumsebenzisi ongene kwinkqubo. Oku kunokwenziwa nge desktop okanye WinRm. Ukuba usebenzisa umncedisi njengomsebenzisi wenkqubo okanye njengomlawuli, kodwa ungangeni, ngoko i-Server.jar ayizukwazi nokufunda eula.txt kwaye iqale.

Sinokwenza ukuba ungene ngokuzenzekelayo ngokongeza amangeniso amathathu kwirejista.

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

Ayikhuselekanga. Igama lokungena kunye negama lokugqitha ziboniswe apha kumbhalo ongenanto, ngoko ke ukuqalisa umncedisi kufuneka wenze umsebenzisi owahlukileyo onofikelelo kwinqanaba lomsebenzisi, okanye kwiqela elimxinwa ngakumbi. Akukhuthazwa ngokungqongqo ukusebenzisa umlawuli osemgangathweni kule nto.

Silungise i-auto-login. Ngoku kufuneka ubhalise umsebenzi omtsha kwiseva. Siza kuqhuba umyalelo ovela kwi-Powershell, ngoko iya kujongeka ngolu hlobo:

$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

Ukudibanisa imodyuli

Ngoku makhe sibeke yonke into kwiimodyuli ezinokuthi zisetyenziswe kamva. Yonke ikhowudi yemibhalo esele yenziwe ilapha, ngenisa kwaye usebenzise.

Ungasebenzisa yonke into echazwe apha ngasentla ngokwahlukileyo ukuba awufuni ukuzikhathaza ngeemodyuli.

Qala-Minecraft

Okokuqala, masenze imodyuli engayi kwenza nto ngaphandle kokuqhuba iskripthi esiya kumamela kwaye sirekhode imveliso esemgangathweni.

Kwibhloko yeeparamitha, ubuza ukuba yeyiphi ifolda yokuqalisa iMinecraft kunye nendawo yokubeka ilogi.

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

Kwaye kuya kufuneka uqalise iMinecraft ngolu hlobo:

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

Ngoku masiqhubele phambili kwi-Handler.ps1 esele ilungile

Ukuze iskripthi sethu samkele iparameters xa sibizwa, kufuneka sikhankanye ibhloko yepharamitha. Nceda uqaphele, iqhuba i-Oracle Java, ukuba usebenzisa unikezelo olwahlukileyo kuya kufuneka utshintshe umendo kwifayile ephunyeziweyo.

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

Bhalisa-Minecraft

Iskripthi siyafana ne-Start-Minecraft, ngaphandle kokuba sibhalisa kuphela umsebenzi omtsha. Yamkela iingxoxo ezifanayo. Igama lomsebenzisi, ukuba alichazwanga, lithatha elikhoyo.

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

Bhalisa-Autogon

Kwibhloko yeeparamitha, iskripthi samkela i-Username kunye nePassword parameters. Ukuba igama lomsebenzisi alichazwanga, igama lomsebenzisi wangoku liyasetyenziswa.

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

Ukuqhuba esi script kubonakala ngolu hlobo:

Set-Autologon -Password "PlaintextPassword"

Uyisebenzisa njani

Ngoku makhe sijonge indlela umbhali ngokwakhe ayisebenzisa ngayo yonke le nto. Uyithumela njani ngokufanelekileyo iseva yeMinecraft kawonkewonke kwiWindows. Masiqale kwasekuqaleni.

1. Yenza umsebenzisi

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

2. Bhalisa umsebenzi wokuqhuba iskripthi

Unokubhalisa usebenzisa imodyuli efana nale:

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

Okanye sebenzisa izixhobo eziqhelekileyo:

$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. Vumela ukungena ngokuzenzekelayo kwaye uqalise kwakhona umatshini

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

Ukugqiba

Umbhali wenze iskripthi, kubandakanywa naye, ngoko ke, uya kukuvuyela ukuphulaphula iziphakamiso zakho zokuphucula iskripthi. Umbhali unethemba lokuba yonke le khowudi ibiluncedo kancinci kuwe, kwaye inqaku belinomdla.

Isikripthi sokuqalisa seseva yeMinecraft esifanelekileyo

umthombo: www.habr.com

Yongeza izimvo