Ny script fanombohana mpizara Minecraft tsara indrindra

Ny script fanombohana mpizara Minecraft tsara indrindra

Tena tian'ny mpanoratra ilay lalao, ary izy mihitsy no mpitantana ny lohamilina kely “ho an'ny namana.” Toy ny mahazatra eo amin'ireo mpankafy, ny zava-drehetra ao amin'ny mpizara dia novaina, ary izany dia miteraka tsy fandriam-pahalemana ary, vokatr'izany, fianjerana. Satria ny mpanoratra ny Powershell dia mahafantatra tsara kokoa noho ny toerana misy ny fivarotana eny an-dalambe, dia nanapa-kevitra ny hanao "Script tsara indrindra hanombohana Minecraft 2020" Io script io ihany no fototry ny môdely ao Ruvds tsena. Fa ny loharano rehetra dia efa ao amin'ny lahatsoratra. Ankehitriny, araka ny filaharany, ny fomba nanaovana izany rehetra izany.

Ny baiko ilaintsika

Alternative logging

Indray andro, rehefa avy nametraka mods roa hafa aho, dia hitako fa ny mpizara, toa, dia nianjera nefa tsy nanambara ady. Ny mpizara dia tsy nanoratra fahadisoana tao amin'ny latest.log na tao amin'ny debug, ary ny console, izay tokony ho nanoratra ity hadisoana ity ary nijanona, dia nakatona.

Raha tsy te hanoratra izy dia tsy mila izany. Manana Powershell miaraka amin'ny cmdlet izahay Tee-Object, izay maka zavatra iray ary mamoaka izany amin'ny rakitra iray sy amin'ny console miaraka.

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

Amin'izany fomba izany, Powershell dia haka ny StandardOutput ary hanoratra izany amin'ny rakitra. Aza manandrana mampiasa fanombohana-processsatria hamerina ny System.ComponentModel.Component fa tsy StandardOutput, ary ny -RedirectStandardOutput dia tsy afaka miditra ao amin'ny console, izay no tiantsika hialana.

Alefaso ny arguments

Taorian'ny fametrahana ireo mods roa ireo, dia nahatsikaritra ny mpanoratra fa tsy ampy RAM ihany koa ny mpizara. Ary izany dia mitaky ny fanovana ny hevitra fanombohana. Raha tokony hanova azy ireo isaky ny start.bat, izay ampiasain'ny rehetra, ampiasao fotsiny ity script ity.

Satria ny Tee-Object ihany no mamaky StandardOutput rehefa antsoina hoe "Toy izao" ny executable, dia tsy maintsy manao script hafa ianao. Ity script ity dia havoakan'ny Minecraft mihitsy. Andeha isika hanomboka amin'ny hevitra.

Mba hahatongavana amin'ny hakamoana farany amin'ny ho avy, ny script dia tsy maintsy manangona tohan-kevitra momba ny fanombohana. Mba hanaovana izany, andao hanomboka amin'ny fitadiavana ny kinova farany hanorina.

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

Amin'ny fampiasana karazana-object, dia horaisinay foana ilay zavatra manana isa be indrindra, na firy na firy amin'izy ireo no apetrakao. Ny hakamoana farany.

Ankehitriny dia mila manendry fahatsiarovana amin'ny mpizara ianao. Mba hanaovana izany, raiso ny habetsaky ny fitadidiana rafitra ary soraty amin'ny tady ny habeny.

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

Famerenana mandeha ho azy mety

Nahita rakitra .bat avy amin'ny olon-kafa ny mpanoratra, saingy tsy noraharahain'izy ireo ny antony nanakanana ny server. Tsy mety izany, ahoana raha mila manova ny rakitra mod ianao na mamafa zavatra?
Andeha isika hanao famerenana araka ny tokony ho izy. Ny mpanoratra teo aloha dia nahita sora-baventy hafahafa izay namerina ny mpizara na inona na inona antony nakaton'ny mpizara. Hampiasa code exit izahay. Java dia mampiasa 0 ho fahombiazana, ka handihy avy eto isika.

Voalohany, andao hamorona fiasa izay hamerina ny mpizara raha toa ka tsy mahomby izany.

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

Ny script dia hijanona ao amin'ny loop mandra-pahatongan'ny server mihidy ara-dalàna amin'ny console azy amin'ny alàlan'ny baiko / stop.

Raha manapa-kevitra ny hanao automatique ny zava-drehetra isika, dia tsara ny manangona ny daty fanombohana, ny datin'ny fahavitan'ny asa, ary koa ny anton'ny fahavitana.

Mba hanaovana izany, dia soraty ny vokatry ny Start-Process ho fari-piainana. Ao amin'ny script dia toa izao:

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

Ary avy eo dia soratanay amin'ny rakitra iray ny valiny. Ity no averina amintsika amin'ny variable:

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

Izany rehetra izany dia azo ampidirina amina rakitra mampiasa Add-Content. Rehefa avy nibango kely izahay dia mahazo ity script ity, ary ndao hiantso azy hoe 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

Andeha isika hamorona script izay manomboka handler.

Ahitsio fanombohana

Ny mpanoratra dia te-handefa dikan-teny samihafa amin'ny Minecraft avy amin'ny lalana rehetra amin'ny maody iray, ary afaka mitahiry logs ao anaty lahatahiry manokana.

Ny olana dia tsy maintsy atomboka amin'ny mpampiasa iray izay miditra amin'ny rafitra ny dingana. Azo atao amin'ny alàlan'ny desktop na WinRm izany. Raha toa ianao ka mitantana ny mpizara amin'ny maha-mpampiasa rafitra na mpitantana iray, nefa tsy miditra, dia tsy afaka mamaky ny eula.txt akory ny Server.jar ary manomboka.

Azontsika atao ny mampiditra fidirana automatique amin'ny alàlan'ny fampidirana fidirana telo amin'ny rejisitra.

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

Tsy azo antoka izany. Ny fidirana sy ny tenimiafina dia aseho eto amin'ny plaintext, noho izany mba hanombohana ny server dia mila mamorona mpampiasa mitokana ianao izay manana fidirana amin'ny haavon'ny mpampiasa, na ao anaty vondrona tery kokoa. Tsy soso-kevitra mihitsy ny hampiasa mpitantana manara-penitra amin'izany.

Nandamina ny fidirana ho azy izahay. Ankehitriny dia mila misoratra anarana asa vaovao ho an'ny mpizara ianao. Hanatanteraka ny baiko avy amin'ny Powershell izahay, ka ho toy izao izany:

$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

Ny fananganana ny module

Andeha isika hametraka ny zava-drehetra ao anaty modules izay azo ampiasaina any aoriana. Ny kaody rehetra ho an'ny script efa vita dia eto, manafatra ary mampiasa.

Azonao atao ny mampiasa ny zavatra rehetra voalaza etsy ambony raha tsy te hanelingelina ny modules ianao.

Manomboka-Minecraft

Voalohany, andao hamorona module iray izay tsy hanao afa-tsy ny fampandehanana script izay hihaino sy handrakitra ny output standard.

Ao amin'ny sakan'ny paramètre dia manontany izy hoe avy aiza ny lahatahiry hanombohana Minecraft ary aiza no hametrahana ny log.

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

Ary mila manomboka Minecraft toy izao ianao:

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

Andeha isika hiroso amin'ny Handler efa vonona.ps1

Mba hahafahan'ny scripty manaiky ny masontsivana rehefa antsoina, dia mila mamaritra sakana paramètre ihany koa isika. Azafady mariho fa mampiasa Oracle Java izy io, raha mampiasa fizarana hafa ianao dia mila manova ny lalana mankany amin'ny rakitra azo tanterahana.

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

Register-Minecraft

Ny script dia saika mitovy amin'ny Start-Minecraft, afa-tsy ny fanoratana asa vaovao fotsiny. Manaiky hevitra mitovy. Ny solon'anarana, raha tsy voalaza, dia maka ny anarana ankehitriny.

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

Register-Autologon

Ao amin'ny sakana paramètre, ny script dia manaiky ny mari-pamantarana Username sy Password. Raha tsy voalaza ny anaran'ny mpampiasa dia ny anaran'ny mpampiasa ankehitriny no ampiasaina.

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

Ny fampandehanana ity script ity dia toy izao:

Set-Autologon -Password "PlaintextPassword"

Ahoana ny fampiasana

Andeha hojerentsika izao ny fomba nampiasan’ny mpanoratra an’izany rehetra izany. Ahoana ny fametrahana mpizara Minecraft ho an'ny daholobe amin'ny Windows. Andeha isika hanomboka hatrany am-piandohana.

1. Mamorona mpampiasa

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

2. Soraty ny asa hampandehanana ny script

Azonao atao ny misoratra anarana amin'ny module toy izao:

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

Na mampiasa fitaovana mahazatra:

$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. Alefaso ny fidirana mandeha ho azy ary avereno indray ny milina

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

vita

Ny mpanoratra dia nanao ny script, anisan'izany ny tenany, noho izany, dia ho faly hihaino ny soso-kevitrao amin'ny fanatsarana ny script. Manantena ny mpanoratra fa ity kaody rehetra ity dia nahasoa anao farafaharatsiny, ary nahaliana ilay lahatsoratra.

Ny script fanombohana mpizara Minecraft tsara indrindra

Source: www.habr.com

Add a comment