Ederede mmalite ihe nkesa Minecraft kacha mma

Ederede mmalite ihe nkesa Minecraft kacha mma

Onye edemede ahụ hụrụ egwuregwu ahụ n'anya nke ukwuu, ya onwe ya bụ onye nchịkwa nke obere ihe nkesa "naanị maka ndị enyi." Dị ka ọ na-adị n'etiti ndị na-amu amu, ihe niile dị na ihe nkesa na-emezigharị, nke a na-agụnye enweghị ntụkwasị obi na, n'ihi ya, mkpọka. Ebe ọ bụ na onye edemede nke Powershell maara nke ọma karịa ebe ụlọ ahịa dị n'okporo ámá ya, o kpebiri ime "Edemede kacha mma iji malite Minecraft 2020" Otu edemede ahụ jere ozi dị ka ntọala maka ndebiri n'ime Ruvds ahịa. Mana isi mmalite niile adịlarị na edemede ahụ. Ugbu a, n'usoro, ka esi mee ya niile.

Iwu ndị anyị chọrọ

Ndekọ osisi ọzọ

Otu ụbọchị, mgbe ị wụnyere mods di na nwunye ọzọ, achọpụtara m na ihe nkesa ahụ, o doro anya na ọ na-adaba n'ebughị agha. Ihe nkesa ahụ edeghị mperi na latest.log ma ọ bụ na debug, na njikwa, nke na tiori kwesịrị ide njehie a ma kwụsị, mechiri.

Ọ bụrụ na ọ chọghị ide, ọ dịghị mkpa. Anyị nwere Powershell na cmdlet Tee-Ihe, nke na-ewe ihe wee wepụta ya na faịlụ yana na njikwa n'otu oge.

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

N'ụzọ dị otú a, Powershell ga-ebulite StandardOutput wee dee ya na faịlụ. Agbalịla iji Usoro mmaliten'ihi na ọ ga-alaghachi System.ComponentModel.Component ma ọ bụghị StandardOutput, na -RedirectStandardOutput ga-eme ka ọ ghara ikwe omume ịbanye na njikwa, nke bụ ihe anyị chọrọ izere.

Mwepụta arụmụka

Mgbe ị wụnye ụdị mods ahụ, onye edemede ahụ chọpụtara na ihe nkesa ahụ enweghịkwa RAM zuru oke. Na nke a chọrọ ịgbanwe arụmụka mmalite. Kama ịgbanwe ha oge ọ bụla na start.bat, nke onye ọ bụla na-eji, jiri naanị edemede a.

Ebe Tee-Object na-agụ StandardOutput naanị mgbe a na-akpọ executable "Dịka Nke a", ị ga-eme edemede ọzọ. Minecraft ga-ewepụta edemede a n'onwe ya. Ka anyị malite na arụmụka.

Iji tinye aka na umengwụ kacha n'ọdịnihu, edemede ga-anakọta arụmụka mmalite na ofufe. Iji mee nke a, ka anyị malite site na-achọ ụdị kachasị ọhụrụ mechie.

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

N'iji ụdị-ihe, anyị ga-ewere ihe ahụ nwere ọnụ ọgụgụ kasị ukwuu, n'agbanyeghị ole n'ime ha tinyeworo ebe ahụ. Ugwu zuru oke.

Ugbu a ịkwesịrị ikenye ebe nchekwa na sava ahụ. Iji mee nke a, were ọnụọgụ nke ebe nchekwa sistemụ wee dee ego ya na eriri.

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

Malitegharịa ekwentị nke ọma

Onye edemede ahụ ahụla faịlụ .bat sitere na ndị ọzọ, mana ha echebaraghị ihe kpatara eji kwụsị ihe nkesa ahụ. Nke a adịghị mma, gịnị ma ọ bụrụ na ịchọrọ ịgbanwe faịlụ mod ma ọ bụ hichapụ ihe?
Ugbu a, ka anyị mee nke ọma Malitegharịa ekwentị. Onye ode akwụkwọ ahụ hụburu ederede dị iche iche nke malitegharịrị sava ahụ n'agbanyeghị ihe mere ihe nkesa ahụ ji mechie. Anyị ga-eji exitcode. Java na-eji 0 dị ka ihe ịga nke ọma, yabụ anyị ga-esi ebe a gbaa egwu.

Mbụ, ka anyị mepụta ọrụ ga-amalitegharị ihe nkesa ahụ ma ọ bụrụ na ọ daa.

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

Edemede a ga-anọgide na akaghị ruo mgbe ihe nkesa na-emechi adịkarị site na njikwa nke ya site na iji iwu / kwụsị.

Ọ bụrụ na anyị ekpebi imezi ihe niile, mgbe ahụ, ọ ga-adị mma ịnakọta ụbọchị mmalite, ụbọchị mmecha, yana ihe kpatara imecha.

Iji mee nke a, anyị na-ede nsonaazụ nke Start-Process n'ime mgbanwe. N'edemede ọ dị ka nke a:

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

Mgbe ahụ, anyị na-edepụta nsonaazụ ya na faịlụ. Nke a bụ ihe eweghachiri anyị na mgbanwe:

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

Enwere ike ịgbakwunye ihe a niile na faịlụ site na iji Tinye-Ọdịnaya. N'ịbụ onye agbachara ya ntakịrị, anyị nwetara edemede a, ka anyị kpọọ ya 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

Ugbu a, ka anyị mepụta edemede na-ebupụta onye njikwa.

Mmalite nke ọma

Onye edemede ahụ chọrọ ịgba ọsọ dị iche iche nke Minecraft site n'ụzọ ọ bụla n'otu modul, ma nwee ike ịchekwa ndekọ na nchekwa dị iche iche.

Nsogbu bụ na usoro a ga-amalite site n'aka onye ọrụ nke abanyela na usoro ahụ. Enwere ike ime nke a site na desktọpụ ma ọ bụ WinRm. Ọ bụrụ na ị na-agba ọsọ nkesa dị ka onye ọrụ usoro ma ọ bụ ọbụna onye nchịkwa, ma abanyela, mgbe ahụ Server.jar agaghị enwe ike ịgụ eula.txt wee malite.

Anyị nwere ike ime ka nbanye akpaaka site na ịgbakwunye ndenye atọ na ndekọ.

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

Ọ dịghị mma. A na-egosi nbanye na paswọọdụ ebe a na ederede doro anya, yabụ ịmalite sava ahụ ịkwesịrị ịmepụta onye ọrụ dị iche nke nwere ohere na ọkwa onye ọrụ, ma ọ bụ n'òtù dị warara karị. A naghị atụ aro ka ị jiri ọkọlọtọ nchịkwa maka nke a.

Anyị haziri nbanye akpaaka. Ugbu a ịkwesịrị ịdebanye aha ọrụ ọhụrụ maka sava ahụ. Anyị ga-agba ọsọ site na Powershell, yabụ ọ ga-adị ka nke a:

$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

Ịchịkọta modul

Ugbu a, ka anyị tinye ihe niile n'ime modul nke enwere ike iji mee ihe ma emechaa. Koodu niile maka edemede emebere dị ebe a, bubata na jiri.

Ị nwere ike iji ihe niile akọwara n'elu iche iche ma ọ bụrụ na ịchọghị inye nsogbu na modul.

Malite-Minecraft

Nke mbụ, ka anyị mepụta modul nke na-agaghị eme ihe ọ bụla karịa ịmegharị edemede nke ga-ege ntị ma dekọọ ihe mmepụta ihe.

N'ime ngọngọ parampat, ọ na-ajụ ebe nchekwa ọ ga-esi malite Minecraft na ebe ị ga-etinye ndekọ ahụ.

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

Ị ga-achọ ịmalite Minecraft dị ka nke a:

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

Ugbu a, ka anyị gaa n'ihu na Handler.ps1 dị njikere iji

Ka script anyị wee nabata paramita mgbe akpọrọ ya, anyị kwesịkwara ịkọwapụta ngọngọ parameter. Biko mara, ọ na-agba Oracle Java, ọ bụrụ na ị na-eji nkesa dị iche, ị ga-achọ ịgbanwe ụzọ gaa na faịlụ nwere ike ime.

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

Ndebanye aha-Minecraft

Edemede a dị ka Start-Minecraft, belụsọ na ọ na-edebanye aha ọrụ ọhụrụ. Nabata otu arụmụka ahụ. Aha njirimara, ọ bụrụ na akọwapụtaghị ya, na-ewere nke dị ugbu a.

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

Ndebanye aha-Autologon

N'ime ngọngọ paramita, edemede ahụ na-anabata paramita aha njirimara na paswọọdụ. Ọ bụrụ na akọwapụtaghị aha njirimara, a na-eji aha onye ọrụ ugbu a.

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

Ịme edemede a dị ka nke a:

Set-Autologon -Password "PlaintextPassword"

Otu esi eji

Ugbu a, ka anyị leba anya n'otú onye edemede ahụ n'onwe ya si eji ihe a nile eme ihe. Otu esi ebuga sava Minecraft nke ọma na Windows. Ka anyị malite site na mmalite.

1. Mepụta onye ọrụ

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

2. Deba aha ọrụ iji mee edemede ahụ

Ị nwere ike ịdebanye aha site na iji modul dị ka nke a:

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

Ma ọ bụ jiri ngwaọrụ ọkọlọtọ:

$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. Kwado akpaaka-nbanye na reboot igwe

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

Mmecha

Onye edemede ahụ mere edemede ahụ, gụnyere maka onwe ya, ya mere, ọ ga-enwe obi ụtọ ịge ntị na aro gị maka imeziwanye edemede ahụ. Onye edemede ahụ nwere olile anya na koodu a niile ma ọ dịkarịa ala bara uru nye gị, yana na isiokwu ahụ na-adọrọ mmasị.

Ederede mmalite ihe nkesa Minecraft kacha mma

isi: www.habr.com

Tinye a comment