An sgriobt tòiseachaidh frithealaiche Minecraft foirfe

An sgriobt tòiseachaidh frithealaiche Minecraft foirfe

Tha gaol mòr aig an ùghdar air a’ gheama, agus tha e fhèin na rianadair air frithealaiche beag “dìreach airson caraidean.” Mar as àbhaist am measg neo-dhreuchdail, tha a h-uile càil air an fhrithealaiche air a mhodhadh, agus tha seo a 'ciallachadh neo-sheasmhachd agus, mar thoradh air sin, tubaistean. Leis gu bheil fios aig ùghdar Powershell nas fheàrr na far a bheil na stòran air an t-sràid aige, chuir e roimhe "An sgriobt as fheàrr airson Minecraft a chuir air bhog 2020" Bha an aon sgriobt mar bhunait airson an teamplaid ann an Ruvds margaidh. Ach tha na stòran uile anns an artaigil mu thràth. A nis, ann an òrdugh, mar a rinneadh e uile.

Na h-òrdughan a tha a dhìth oirnn

Clàradh eile

Aon latha, às deidh dhomh modan no dhà a bharrachd a chuir a-steach, fhuair mi a-mach gu robh am frithealaiche, a rèir coltais, a ’bualadh gun a bhith ag ainmeachadh cogadh. Cha do sgrìobh am frithealaiche mearachdan ann an latest.log no ann an deasbaid, agus chaidh an consol, a bu chòir a bhith air a’ mhearachd seo a sgrìobhadh agus a stad, a dhùnadh.

Mura h-eil e airson sgrìobhadh, chan fheum e. Tha Powershell againn le cmdlet Tee-Rud, a bheir nì agus a bheir a-mach e gu faidhle agus chun consol aig an aon àm.

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

San dòigh seo, togaidh Powershell an StandardOutput agus sgrìobhaidh e gu faidhle e. Na feuch ri cleachdadh Tòiseachadh - Pròiseasoir tillidh e System.ComponentModel.Component agus chan e StandardOutput, agus -RedirectStandardOutput nì e do-dhèanta a dhol a-steach don consol, agus is e sin a tha sinn airson a sheachnadh.

Cuir air bhog argamaidean

Às deidh dha an aon phaidhir mhodan sin a chuir a-steach, mhothaich an t-ùghdar nach robh RAM gu leòr aig an fhrithealaiche cuideachd. Agus feumaidh seo na h-argamaidean tòiseachaidh atharrachadh. An àite a bhith gan atharrachadh a h-uile turas ann an start.bat, a bhios a h-uile duine a 'cleachdadh, dìreach cleachd an sgriobt seo.

Leis nach leugh Tee-Object StandardOutput ach nuair a chanar “Just Like This” ris an so-ghnìomhaiche, feumaidh tu sgriobt eile a dhèanamh. Thèid an sgriobt seo a chuir air bhog le Minecraft fhèin. Feuch an tòisich sinn leis na h-argamaidean.

Gus a dhol an sàs ann an leisg mu dheireadh san àm ri teachd, feumaidh an sgriobt argamaidean tòiseachaidh a chruinneachadh air an itealan. Gus seo a dhèanamh, leig leinn tòiseachadh le bhith a 'lorg an tionndadh as ùire A 'giùlan.

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

A’ cleachdadh seòrsa-rud, gabhaidh sinn an-còmhnaidh an nì leis an àireamh as motha, ge bith cia mheud dhiubh a chuir thu ann. Leisg mu dheireadh.

A-nis feumaidh tu cuimhne a shònrachadh don fhrithealaiche. Gus seo a dhèanamh, gabh an àireamh de chuimhne siostam agus sgrìobh an àireamh ann an sreang.

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

Ath-thòiseachadh fèin-ghluasadach ceart

Tha an t-ùghdar air faidhlichean .bat fhaicinn bho dhaoine eile, ach cha tug iad aire don adhbhar a chaidh stad a chuir air an fhrithealaiche. Tha seo mì-ghoireasach, dè ma dh'fheumas tu dìreach am faidhle mod atharrachadh no rudeigin a sguabadh às?
A-nis leig leinn ath-thòiseachadh ceart a dhèanamh. Thàinig an t-ùghdar thairis air sgriobtaichean neònach roimhe a thòisich air an fhrithealaiche a-rithist ge bith carson a dhùin am frithealaiche. Cleachdaidh sinn còd fàgail. Bidh Java a’ cleachdadh 0 mar shoirbheachas, agus mar sin dannsaidh sinn às an seo.

An toiseach, cruthaichidh sinn gnìomh a nì ath-thòiseachadh air an fhrithealaiche ma dh'fhàilligeas e.

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

Fuirichidh an sgriobt anns an lùb gus an dùin am frithealaiche sìos gu h-àbhaisteach bhon chonsail aige fhèin a’ cleachdadh an àithne / stad.

Ma cho-dhùnas sinn a h-uile càil a dhèanamh fèin-ghluasadach, bhiodh e math an ceann-latha tòiseachaidh, an ceann-latha crìochnachaidh, agus cuideachd an adhbhar airson a chrìochnachadh a chruinneachadh.

Gus seo a dhèanamh, bidh sinn a’ sgrìobhadh toradh Start-Process gu caochladair. Anns an sgriobt tha e coltach mar seo:

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

Agus an uairsin bidh sinn a 'sgrìobhadh nan toraidhean gu faidhle. Seo na tha air a thilleadh thugainn anns a’ chaochladair:

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

Faodar seo uile a chur ri faidhle a’ cleachdadh Add-Content. Às deidh dhuinn a chìreadh beagan, gheibh sinn an sgriobt seo, agus canaidh sinn 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

A-nis cruthaichidh sinn sgriobt a chuireas air bhog inneal-làimhseachaidh.

Toiseach tòiseachaidh ceart

Tha an t-ùghdar ag iarraidh a bhith a 'ruith diofar dhreachan de Minecraft bho shlighe sam bith ann an aon mhodal, agus cuideachd a bhith comasach air logaichean a stòradh ann am pasgan sònraichte.

Is e an duilgheadas a th 'ann gum feum am pròiseas a bhith air a thòiseachadh le neach-cleachdaidh a tha air logadh a-steach don t-siostam. Faodar seo a dhèanamh tron ​​​​desktop no WinRm. Ma ruitheas tu am frithealaiche mar neach-cleachdaidh siostam no eadhon rianadair, ach nach log thu a-steach, cha bhith Server.jar eadhon comasach air eula.txt a leughadh agus tòiseachadh.

Is urrainn dhuinn logadh a-steach fèin-ghluasadach a chomasachadh le bhith a’ cur trì inntrigidhean ris a’ chlàr.

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

Chan eil e sàbhailte. Tha an logadh a-steach agus am facal-faire air an comharrachadh an seo ann an teacsa shìmplidh, mar sin gus am frithealaiche a thòiseachadh feumaidh tu neach-cleachdaidh fa leth a chruthachadh aig a bheil cothrom aig ìre an neach-cleachdaidh, no ann am buidheann eadhon nas cumhainge. Chan eilear a’ moladh rianadair àbhaisteach a chleachdadh airson seo.

Rinn sinn rèiteachadh air an logadh a-steach fèin-ghluasadach. A-nis feumaidh tu gnìomh ùr a chlàradh airson an fhrithealaiche. Ruithidh sinn an àithne bho Powershell, agus mar sin seallaidh e mar seo:

$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

A 'cruinneachadh a' mhodail

A-nis leig dhuinn a h-uile càil a chuir ann am modalan a ghabhas cleachdadh nas fhaide air adhart. Tha an còd gu lèir airson sgriobtaichean deiseil an seo, cuir a-steach agus cleachd.

Faodaidh tu a h-uile dad a tha air a mhìneachadh gu h-àrd a chleachdadh air leth mura h-eil thu airson dragh a chuir air modalan.

Tòisich minecraft

An toiseach, cruthaichidh sinn modal nach dèan dad a bharrachd air a bhith a’ ruith sgriobt a dh’èisteas ri agus a chlàras toradh àbhaisteach.

Anns a 'bhloc paramadairean, tha e a' faighneachd dè am pasgan airson Minecraft a chuir air bhog agus càite an cuir thu an 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

Agus feumaidh tu Minecraft mar seo a chuir air bhog:

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

A-nis gluaisidh sinn air adhart chun an Handler.ps1 deiseil airson a chleachdadh

Gus an gabh an sgriobt againn ri paramadairean nuair a thèid an gairm, feumaidh sinn cuideachd bloc paramadair a shònrachadh. Thoir an aire, tha e a’ ruith Oracle Java, ma tha thu a’ cleachdadh cuairteachadh eadar-dhealaichte feumaidh tu an t-slighe atharrachadh chun fhaidhle so-ghnìomhaichte.

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

Clàradh minecraft

Tha an sgriobt cha mhòr an aon rud ri Start-Minecraft, ach a-mhàin gu bheil e a’ clàradh gnìomh ùr. Gabh ris na h-aon argamaidean. Bidh an t-ainm-cleachdaiche, mura h-eil e air a shònrachadh, a’ gabhail an tè làithreach.

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

Clàr-Autologon

Anns a ’bhloc paramadairean, tha an sgriobt a’ gabhail ris na paramadairean Ainm-cleachdaidh agus Facal-faire. Mura deach an t-ainm-cleachdaiche a shònrachadh, thèid ainm a' chleachdaiche làithreach a chleachdadh.

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

Tha ruith an sgriobt seo a’ coimhead mar seo:

Set-Autologon -Password "PlaintextPassword"

Mar a chleachdar tu

A-nis leig dhuinn sùil a thoirt air mar a tha an t-ùghdar fhèin a 'cleachdadh seo uile. Mar a chleachdas tu frithealaiche poblach Minecraft gu ceart air Windows. Feuch an tòisich sinn bhon fhìor thoiseach.

1. Cruthaich neach-cleachdaidh

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

2. Clàraich an obair gus an sgriobt a ruith

Faodaidh tu clàradh a’ cleachdadh modal mar seo:

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

No cleachd innealan àbhaisteach:

$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. Dèan comas fèin-logadh a-steach agus ath-thòisich an inneal

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

Crìochnachadh

Rinn an t-ùghdar an sgriobt, a 'gabhail a-steach dha fhèin, mar sin, bidh e toilichte èisteachd ris na molaidhean agad airson an sgriobt a leasachadh. Tha an t-ùghdar an dòchas gun robh a h-uile còd seo co-dhiù cho feumail dhut, agus gu robh an artaigil inntinneach.

An sgriobt tòiseachaidh frithealaiche Minecraft foirfe

Source: www.habr.com

Cuir beachd ann