Madaidaicin rubutun farawa uwar garken Minecraft

Madaidaicin rubutun farawa uwar garken Minecraft

Marubucin yana son wasan sosai, kuma shi da kansa shine mai kula da ƙaramin uwar garken “don abokai kawai.” Kamar yadda aka saba a tsakanin masu son, duk abin da ke cikin uwar garken an canza shi, kuma wannan yana haifar da rashin kwanciyar hankali kuma, sakamakon haka, rushewa. Tun da marubucin Powershell ya san mafi kyau fiye da wurin da shagunan ke kan titinsa, ya yanke shawarar yin "Mafi kyawun Rubutun don ƙaddamar da Minecraft 2020" Rubutun iri ɗaya yayi aiki azaman tushen samfuri a ciki Ruvds kasuwa. Amma duk kafofin sun riga sun kasance a cikin labarin. Yanzu, cikin tsari, yadda aka yi duka.

Umurnin da muke bukata

Madadin shiga

Wata rana, bayan shigar da ƙarin mods biyu, na gano cewa uwar garken, a fili, yana faɗuwa ba tare da ayyana yaƙi ba. Sabar ba ta rubuta kurakurai a latest.log ko a debug ba, kuma na'urar wasan bidiyo, wacce a ka'idar yakamata ta rubuta wannan kuskure kuma ta tsaya, an rufe.

Idan ba ya so ya rubuta, ba ya bukata. Muna da Powershell tare da cmdlet Tee-Abu, wanda ke ɗaukar abu da fitar da shi zuwa fayil kuma zuwa na'ura mai kwakwalwa a lokaci guda.

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

Ta wannan hanyar, Powershell zai ɗauki StandardOutput kuma ya rubuta shi zuwa fayil. Kada kayi kokarin amfani Fara-Tsarinsaboda zai dawo da System.ComponentModel.Component kuma ba StandardOutput ba, kuma -RedirectStandardOutput zai sa ba shi yiwuwa a shiga cikin na'ura wasan bidiyo, wanda shine abin da muke so mu guje wa.

Kaddamar da muhawara

Bayan shigar da waɗannan nau'ikan mods guda biyu, marubucin ya lura cewa uwar garken shima ba shi da isasshen RAM. Kuma wannan yana buƙatar canza hujjojin ƙaddamarwa. Maimakon canza su kowane lokaci a start.bat, wanda kowa ke amfani da shi, kawai amfani da wannan rubutun.

Tun da Tee-Object kawai ke karanta StandardOutput lokacin da ake kiran mai aiwatarwa "Kamar Wannan", dole ne ku sake yin wani rubutun. Minecraft ita kanta za ta ƙaddamar da wannan rubutun. Bari mu fara da jayayya.

Domin shiga cikin lalaci na ƙarshe a nan gaba, dole ne rubutun ya tattara hujjojin ƙaddamarwa akan tashi. Don yin wannan, bari mu fara da neman sabuwar siga Ƙirƙira.

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

Yin amfani da nau'i-nau'i koyaushe za mu ɗauki abu mai lamba mafi girma, komai yawansu da kuka saka a wurin. Lalaci na ƙarshe.

Yanzu kuna buƙatar sanya ƙwaƙwalwar ajiya zuwa uwar garken. Don yin wannan, ɗauki adadin ƙwaƙwalwar tsarin kuma rubuta adadinsa a cikin kirtani.

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

Daidai sake kunnawa ta atomatik

Marubucin ya ga fayilolin jet daga wasu mutane, amma ba su yi la'akari da dalilin da ya sa aka dakatar da sabar ba. Wannan bai dace ba, menene idan kawai kuna buƙatar canza fayil ɗin mod ko share wani abu?
Yanzu bari mu yi dace sake kunnawa. Marubucin a baya ya ci karo da rubutun ban mamaki waɗanda suka sake kunna uwar garken ba tare da la’akari da dalilin da yasa uwar garken ta rufe ba. Za mu yi amfani da exitcode. Java yana amfani da 0 a matsayin nasara, don haka za mu yi rawa daga nan.

Da farko, bari mu ƙirƙiri aikin da zai sake kunna uwar garken idan ya gaza.

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

Rubutun zai ci gaba da kasancewa a cikin madauki har sai uwar garken ya ƙare kullum daga na'urar wasan bidiyo ta amfani da umarnin dakatarwa.

Idan muka yanke shawarar sarrafa komai, to zai yi kyau mu tattara ranar farawa, ranar ƙarshe, da kuma dalilin kammalawa.

Don yin wannan, muna rubuta sakamakon Fara-Tsarin zuwa madaidaici. A cikin rubutun yana kama da haka:

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

Sa'an nan kuma mu rubuta sakamakon zuwa fayil. Wannan shi ne abin da aka mayar mana a cikin ma'auni:

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

Ana iya ƙara duk waɗannan zuwa fayil ta amfani da Ƙara-abun ciki. Bayan mun tsefe shi kadan, mun sami wannan rubutun, kuma bari mu kira shi 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

Yanzu bari mu ƙirƙiri rubutun da zai ƙaddamar da mai sarrafa.

Madaidaicin farawa

Marubucin yana son gudanar da nau'ikan Minecraft daban-daban daga kowace hanya a cikin tsari ɗaya, kuma yana iya adana rajistan ayyukan a cikin takamaiman babban fayil.

Matsalar ita ce dole ne mai amfani ya fara aiwatar da tsarin. Ana iya yin wannan ta hanyar tebur ko WinRm. Idan kana gudanar da uwar garken a matsayin mai amfani da tsarin ko ma mai gudanarwa, amma ba ka shiga ba, Server.jar ba zai iya karanta eula.txt ba kuma ya fara.

Za mu iya kunna shiga ta atomatik ta ƙara shigarwar uku zuwa wurin yin rajista.

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

Ba lafiya. Ana nuna login da kalmar sirri a nan a bayyane, don haka don fara uwar garken kuna buƙatar ƙirƙirar mai amfani daban wanda ke da damar shiga matakin mai amfani, ko a cikin madaidaicin rukuni. Ba a ba da shawarar sosai don amfani da daidaitaccen mai gudanarwa don wannan ba.

Mun tsara hanyar shiga ta atomatik. Yanzu kuna buƙatar yin rajistar sabon ɗawainiya don uwar garken. Za mu gudanar da umarni daga Powershell, don haka zai yi kama da haka:

$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

Haɗa tsarin

Yanzu bari mu sanya komai a cikin modules waɗanda za a iya amfani da su daga baya. Duk lambar don shirye-shiryen rubutun suna nan, shigo da amfani.

Kuna iya amfani da duk abin da aka bayyana a sama daban idan ba ku so ku damu da kayayyaki.

Fara-Maynkraft

Da farko, bari mu ƙirƙiri wani tsarin da ba zai yi wani abu ba face gudanar da rubutun da zai saurara da rikodin daidaitattun fitarwa.

A cikin toshe sigogi, ya tambayi daga wane babban fayil don ƙaddamar da Minecraft da inda za a saka log ɗin.

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

Kuma kuna buƙatar ƙaddamar da Minecraft kamar haka:

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

Yanzu bari mu matsa zuwa Handler.ps1 mai shirye don amfani

Domin rubutun mu ya karɓi sigogi lokacin da aka kira, muna buƙatar kuma ƙididdige toshe madaidaici. Lura, yana gudanar da Oracle Java, idan kuna amfani da rarraba daban kuna buƙatar canza hanyar zuwa fayil ɗin da za'a iya aiwatarwa.

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

Rajista-Minecraft

Rubutun kusan iri ɗaya ne da Start-Minecraft, sai dai kawai yana yin rijistar sabon ɗawainiya. Ya yarda da hujja iri ɗaya. Sunan mai amfani, idan ba a ƙayyade ba, yana ɗaukar na yanzu.

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

Rajista-Autologon

A cikin toshe sigogi, rubutun yana karɓar sigogin sunan mai amfani da kalmar wucewa. Idan ba a bayyana sunan mai amfani ba, ana amfani da sunan mai amfani na yanzu.

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

Gudun wannan rubutun yayi kama da haka:

Set-Autologon -Password "PlaintextPassword"

Yadda zaka yi amfani

Yanzu bari mu dubi yadda marubucin da kansa ya yi amfani da wannan duka. Yadda ake tura sabar Minecraft ta jama'a da kyau akan Windows. Bari mu fara daga farkon.

1. Ƙirƙiri mai amfani

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

2. Yi rijistar aikin don gudanar da rubutun

Kuna iya yin rajista ta amfani da module kamar haka:

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

Ko amfani da daidaitattun kayan aikin:

$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. Kunna auto-login kuma sake yi na'ura

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

Ƙarshe

Marubucin ya yi rubutun, ciki har da kansa, don haka, zai yi farin cikin sauraron shawarwarinku don inganta rubutun. Marubucin yana fatan cewa duk wannan lambar ta kasance mafi ƙarancin amfani a gare ku, kuma labarin ya kasance mai ban sha'awa.

Madaidaicin rubutun farawa uwar garken Minecraft

source: www.habr.com

Add a comment