Qoraagu aad buu u jecel yahay ciyaarta, isaga laftiisuna waa maamulaha server yar "oo saaxiibbo u gaar ah." Sida caadiga ah ee ka mid ah hiwaayadda, wax kasta oo ku jira server-ka waa la bedelay, tani waxay keenaysaa xasillooni darro iyo, natiijada, shilalka. Maaddaama qoraaga Powershell uu ka yaqaanno si ka wanaagsan goobta dukaamada ku yaal jidkiisa, wuxuu go'aansaday inuu sameeyo "Qoraalka ugu Wanaagsan ee lagu Daah-furayo Minecraft 2020" Qoraal la mid ah ayaa u adeegay aasaaska qaab-dhismeedka gudaha
Awaamiirta aan u baahanahay
Goynta beddelka ah
Maalin maalmaha ka mid ah, ka dib markii aan rakibay dhowr mods oo dheeraad ah, waxaan ogaaday in server-ka, sida muuqata, uu burburay isaga oo aan ku dhawaaqin dagaal. Seerfarku khalad kuma qorin latest.log ama debug, iyo console-ka, kaas oo aragti ahaan ay ahayd in uu khaladkan qoro oo uu joojiyo, waa la xidhay.
Haddii uusan rabin inuu qoro, uma baahna. Waxaan leenahay Powershell oo leh cmdlet Tee-Wax, kaas oo qaada shay oo u soo saaraya faylka iyo console-ka isku mar.
.handler.ps1 | Tee-Object .StandardOutput.txt -Append
Sidan, Powershell waxay soo qaadan doontaa StandardOutput oo u qori doonta fayl. Ha isku dayin inaad isticmaasho Habka Bilawgasababtoo ah waxay soo celin doontaa System.ComponentModel.Component halkii ay ka ahaan lahayd StandardOutput, iyo -RedirectStandardOutput waxay ka dhigaysaa mid aan macquul ahayn in la galo console-ka, taas oo ah waxa aan rabno inaan iska ilaalino.
Bilaw doodaha
Ka dib markii la rakibay isla labada nooc ee mods, qoraagu wuxuu ogaaday in server-ku aanu sidoo kale haysan RAM ku filan. Tanina waxay u baahan tahay in la beddelo doodaha bilawga ah. Halkii aad ka beddeli lahayd mar kasta start.bat, oo qof kastaa isticmaalo, kaliya isticmaal qoraalkan.
Maadaama Tee-Object kaliya akhriyo StandardOutput marka la fulin karo loo yaqaan "Just Like This", waa inaad samaysaa qoraal kale. Qoraalkan waxaa bilaabi doona Minecraft lafteeda. Aan ku bilowno doodaha.
Si loo galo caajisnimada kama dambaysta ah ee mustaqbalka, qoraalku waa inuu ururiyaa doodaha bilawga ah ee duulista. Si tan loo sameeyo, aan ku bilowno raadinta nuqulkii ugu dambeeyay Gadaal.
$forge = ((Get-ChildItem | Where-Object Name -Like "forge*").Name | Sort-Object -Descending) | Select-Object -last 1
Adigoo adeegsanayna shayga kala-soocidda, waxaan had iyo jeer qaadan doonnaa shayga lambarka ugu weyn, iyadoon loo eegayn inta aad dhigto. caajisnimada ugu dambeysa.
Hadda waxaad u baahan tahay inaad ku meelayso xusuusta server-ka. Si tan loo sameeyo, qaado qaddarka xusuusta nidaamka oo ku qor qaddarkeeda xadhig.
$ram = ((Get-CimInstance Win32_PhysicalMemory | Measure-Object -Property capacity -Sum).sum /1gb)
$xmx = "-Xms" + $ram + "G"
Si toos ah dib u bilaabo
Qoraagu wuxuu arkay .faylalka fiidka ee dad kale, laakiin ma aysan xisaabtamin sababta loo joojiyay server-ka. Tani waa dhib, ka waran haddii aad u baahan tahay oo kaliya inaad bedesho faylka mod ama wax tirtirto?
Hadda aan sameyno dib u bilow habboon. Qoraagu waxa uu hore ula kulmay qoraallo yaab leh oo dib u bilaabay seerfarka iyada oo aan loo eegin sababta uu seerfarku u xidhay. Waxaan isticmaali doonaa exitcode. Java waxay u isticmaashaa 0 guul ahaan, markaa halkan ayaan ka dheeli doonaa.
Marka hore, aan abuurno shaqo dib u bilaabi doonta server-ka haddii uu ku guuldareysto.
function Get-MinecraftExitCode {
do {
if ($global:Process.ExitCode -ne 0) {
Write-Log
Restart-Minecraft
}
else {
Write-Log
}
} until ($global:Process.ExitCode -eq 0)
}
Qoraalku wuxuu ku sii jirayaa wareegga ilaa uu seerfarku si caadi ah uga xidhmo konsole-kiisa iyadoo la isticmaalayo amarka/joojinta.
Haddii aan go'aansanno in aan wax walba si otomaatig ah u samayno, markaa way fiicnaan lahayd in la ururiyo taariikhda bilawga, taariikhda dhamaystirka, iyo sidoo kale sababta dhamaystirka.
Si tan loo sameeyo, waxaan u qornaa natiijada habka-Bilow doorsoome. Qoraalku wuxuu u eg yahay sidan:
$global:Process = Start-Process -FilePath "C:Program Files (x86)common filesOracleJavajavapath_target_*java.exe" -ArgumentList "$xmx -server -jar $forge nogui" -Wait -NoNewWindow -PassThru
Kadibna natiijada waxaan ku qornaa fayl. Kani waa waxa nagu soo noqday doorsoomayaasha:
$global:Process.StartTime
$global:Process.ExitCode
$global:Process.ExitTime
Waxaas oo dhan waxaa lagu dari karaa fayl iyadoo la isticmaalayo Add-Content. Inaga oo inyar u shanlaynay, waxa aanu helnaa qoraalkan, oo aynu ugu yeedhno 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
Hadda aynu abuurno qoraal bilaabaya maamulaha.
Bilawga saxda ah
Qoraagu wuxuu rabaa in uu ku socodsiiyo noocyo kala duwan oo Minecraft ah waddo kasta oo ku taal hal cutub, iyo sidoo kale in uu awood u yeesho in uu ku kaydiyo diiwaannada gal gaar ah.
Dhibaatadu waxay tahay in habka waa in uu bilaabo isticmaalaha soo galay nidaamka. Tan waxaa lagu samayn karaa desktop-ka ama WinRm. Haddii aad u maamusho server-ka sidii nidaam isticmaale ama xitaa maamule, laakiin aadan soo galin, markaa Server.jar xitaa ma awoodi doono inuu akhriyo eula.txt oo bilaabo.
Waxaan awood u siin karnaa galitaanka tooska ah annagoo ku darayna saddex gelis diiwaanka.
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
Ma aha ammaan. Gelitaanka iyo erayga sirta ah ayaa halkan lagu muujiyey qoraal cad, markaa si aad u bilowdo server-ka waxaad u baahan tahay inaad abuurto isticmaale gooni ah oo geli kara heerka isticmaale, ama koox xitaa ka sii yar. Si adag looguma talinayo in loo isticmaalo maamulaha caadiga ah tan.
Waxaan habaynnay soo gelista otomaatiga ah. Hadda waxaad u baahan tahay inaad hawl cusub u diiwaan geliso server-ka. Waxaan ka maamuli doonaa amarka Powershell, marka waxay u ekaan doontaa sidan:
$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
Isku-dubarid moduleka
Hadda aan wax walba gelinno modules la isticmaali karo hadhow. Dhammaan koodka qoraallada diyaarsan waa halkan, soo deji oo isticmaal.
Waxaad si gaar ah u isticmaali kartaa wax kasta oo kor lagu sharaxay haddii aadan rabin inaad ku dhibto modules.
Start-Maynkraft
Marka hore, aynu abuurno module ah oo aan samayn doonin wax ka badan samaynta qoraal dhegaysan doona oo duubi doona heerka wax soo saarka.
Xakamaynta xuduudaha, wuxuu waydiinayaa galka laga bilaabayo Minecraft iyo meesha lagu dhejiyo 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
Oo waxaad u baahan doontaa inaad bilowdo Minecraft sidan oo kale:
Start-Minecraft -Type Forge -LogFile "C:minecraftstdout.txt" -MinecraftPath "C:minecraft"
Hadda aan u gudubno Handler-ka diyaar u ah in la isticmaalo.ps1
Si qoraalkayagu u aqbalo cabbirrada marka la wacayo, waxaan sidoo kale u baahannahay inaan qeexno xannibaad xaddidan. Fadlan ogow, waxay ku shaqeysaa Oracle Java, haddii aad isticmaaleyso qeybin ka duwan waxaad u baahan doontaa inaad bedesho jidka faylka la fulin karo.
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
Diiwaangeli-Maynkraft
Qoraalku wuxuu la mid yahay Start-Minecraft, marka laga reebo inay diiwaangeliso hawl cusub oo keliya. Aqbala doodaha isku midka ah. Magaca isticmaalaha, haddii aan la cayimin, waxa uu qaadanayaa kan hadda jira.
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
Diiwaangeli-Autologon
Xudduudaha xannibaadda, qoraalku wuxuu aqbalayaa cabbirrada magaca isticmaalaha iyo erayga sirta ah. Haddii aan la cayimin magaca isticmaalaha, magaca isticmaalaha hadda waa la isticmaalayaa.
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."
}
Ku socodsiinta qoraalkan wuxuu u eg yahay sidan:
Set-Autologon -Password "PlaintextPassword"
Sida loo isticmaalo
Bal hadda aan eegno sida qoraaga laftiisa uu u isticmaalo waxaas oo dhan. Sida saxda ah ee loo geeyo server-ka guud ee Minecraft Windows. Aan ka bilowno bilowgii hore.
1. Abuur isticmaale
$pass = Get-Credential
New-LocalUser -Name "MinecraftServer" -Password $pass.Password -AccountNeverExpires -PasswordNeverExpires -UserMayNotChangePassword
2. Diiwaangeli hawsha si aad u socodsiiso qoraalka
Waxaad isku qori kartaa adigoo isticmaalaya module sidan oo kale ah:
Register-Minecraft -Type Forge -LogFile "C:minecraftstdout.txt" -MinecraftPath "C:minecraft" -User "MInecraftServer" -TaskName "MinecraftStarter"
Ama isticmaal qalabka caadiga ah:
$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. Si toos ah u gal oo dib u kici mishiinka
Set-Autologon -Username "MinecraftServer" -Password "Qw3"
Buuxi
Qoraagu wuxuu sameeyay qoraalka, oo uu ku jiro naftiisa, sidaa darteed, wuu ku farxi doonaa inuu dhagaysto talooyinkaaga hagaajinta qoraalka. Qoraagu waxa uu rajaynayaa in dhammaan koodkan uu ugu yaraan faa'iido kuu leeyahay, iyo in maqaalku ahaa mid xiiso leh.
Source: www.habr.com