Panulis resep pisan kana kaulinan, sareng anjeunna nyalira mangrupikeun pangurus server leutik "murni pikeun réréncangan." Sakumaha biasa diantara amatir, sagalana dina server ieu modded, sarta ieu merlukeun instability sarta, salaku hasilna, ngadat. Kusabab panulis Powershell terang langkung saé tibatan lokasi toko di jalanna, anjeunna mutuskeun pikeun ngadamel "Skrip pangsaéna pikeun ngaluncurkeun Minecraft 2020" Aksara sarua dilayanan salaku dadasar pikeun template di
Paréntah urang peryogi
logging alternatif
Hiji dinten, saatos masang sababaraha mods deui, kuring mendakan yén server, katingalina, nabrak tanpa nyatakeun perang. Server henteu nyerat kasalahan dina latest.log atanapi di debug, sareng konsol, anu dina téori kedah nyerat kasalahan ieu sareng dieureunkeun, ditutup.
Upami anjeunna henteu hoyong nyerat, anjeunna henteu kedah. Simkuring gaduh Powershell kalawan cmdlet Tee-Objék, nu nyandak hiji obyék sarta outputs kana file jeung konsol dina waktos anu sareng.
.handler.ps1 | Tee-Object .StandardOutput.txt -Append
Ku cara ieu, Powershell bakal nyandak StandardOutput sareng nyerat kana file. Ulah coba ngagunakeun Mimitian-Proséssabab bakal balik System.ComponentModel.Component teu StandardOutput, sarta -RedirectStandardOutput bakal nyieun teu mungkin pikeun asup kana konsol nu, nu naon urang hayang ulah aya.
Ngajalankeun argumen
Saatos masang pasangan mods anu sami, panulis ningali yén server ogé henteu gaduh cukup RAM. Sareng ieu peryogi ngarobih argumen peluncuran. Gantina ngarobah aranjeunna unggal waktu di start.bat, nu dulur migunakeun, ngan make Aksara ieu.
Kusabab Tee-Objék ngan maca StandardOutput nalika laksana disebut "Sapertos Ieu", anjeun kedah ngadamel naskah anu sanés. Skrip ieu bakal diluncurkeun ku Minecraft sorangan. Hayu urang mimitian ku argumen.
Dina raraga indulge dina puguh pamungkas dina mangsa nu bakal datang, naskah kudu ngumpulkeun argumen peluncuran on laleur. Jang ngalampahkeun ieu, hayu urang mimitian ku milarian versi panganyarna forge.
$forge = ((Get-ChildItem | Where-Object Name -Like "forge*").Name | Sort-Object -Descending) | Select-Object -last 1
Ngagunakeun diurutkeun-obyek, urang bakal salawasna nyandak obyék kalawan jumlah pangbadagna, euweuh urusan sabaraha di antarana anjeun nempatkeun aya. Puguh pamungkas.
Ayeuna anjeun kudu napelkeun memori ka server. Jang ngalampahkeun ieu, nyandak jumlah memori sistem jeung nulis jumlah na dina string.
$ram = ((Get-CimInstance Win32_PhysicalMemory | Measure-Object -Property capacity -Sum).sum /1gb)
$xmx = "-Xms" + $ram + "G"
Ngalereskeun balikan deui otomatis
Panulis geus katempo file .bat ti jalma séjén, Tapi maranéhna teu tumut kana akun alesan naha server dieureunkeun. Ieu henteu pikaresepeun, kumaha upami anjeun ngan ukur kedah ngarobih file mod atanapi ngahapus hiji hal?
Ayeuna hayu urang balikan deui anu leres. Panulis saméméhna datang di sakuliah Aksara aneh nu restarted server paduli naha server pareum. Urang bakal ngagunakeun exitcode. Java ngagunakeun 0 salaku kasuksésan, jadi urang bakal tari ti dieu.
Kahiji, hayu urang nyieun hiji fungsi nu bakal balikan deui server lamun gagal.
function Get-MinecraftExitCode {
do {
if ($global:Process.ExitCode -ne 0) {
Write-Log
Restart-Minecraft
}
else {
Write-Log
}
} until ($global:Process.ExitCode -eq 0)
}
Skrip bakal tetep dina loop dugi server pareum normal tina konsol sorangan nganggo paréntah / stop.
Upami urang mutuskeun pikeun ngajadikeun otomatis sadayana, maka langkung saé pikeun ngumpulkeun tanggal mimiti, tanggal parantosan, sareng ogé alesan parantosan.
Jang ngalampahkeun ieu, urang nulis hasil Start-Proses kana variabel. Dina naskah sigana kieu:
$global:Process = Start-Process -FilePath "C:Program Files (x86)common filesOracleJavajavapath_target_*java.exe" -ArgumentList "$xmx -server -jar $forge nogui" -Wait -NoNewWindow -PassThru
Teras we nyerat hasil kana file. Ieu naon anu dipulangkeun ka kami dina variabel:
$global:Process.StartTime
$global:Process.ExitCode
$global:Process.ExitTime
Sadaya ieu tiasa ditambihan kana file nganggo Add-Content. Sanggeus combed eta saeutik, urang meunang naskah ieu, sarta hayu urang nelepon deui 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
Ayeuna hayu urang nyieun skrip anu ngajalankeun Handler.
ngamimitian bener
Panulis hoyong ngajalankeun vérsi anu béda tina Minecraft tina jalur mana waé dina hiji modul, sareng ogé tiasa nyimpen log dina polder khusus.
Masalahna nyaéta prosésna kedah dimimitian ku pangguna anu asup kana sistem. Ieu tiasa dilakukeun via desktop atanapi WinRm. Lamun ngajalankeun server salaku pamaké sistem atawa malah administrator, tapi teu asup, lajeng Server.jar moal malah bisa maca eula.txt tur mimitian.
Urang tiasa ngaktipkeun login otomatis ku nambahkeun tilu éntri kana pendaptaran.
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
Éta henteu aman. Login sareng kecap akses dituduhkeun di dieu dina plaintext, janten pikeun ngamimitian server anjeun kedah nyiptakeun pangguna anu misah anu ngagaduhan aksés dina tingkat pangguna, atanapi dina grup anu langkung sempit. Ieu mastikeun teu dianjurkeun ngagunakeun administrator baku pikeun ieu.
Urang nyortir kaluar otomatis-login. Ayeuna anjeun kedah ngadaptarkeun tugas énggal pikeun server. Kami bakal ngajalankeun paréntah ti Powershell, janten sapertos kieu:
$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
Ngarakit modul
Ayeuna hayu urang nempatkeun sadayana kana modul anu tiasa dianggo engké. Sadaya kode pikeun naskah anu siap-siap aya di dieu, impor sareng dianggo.
Anjeun tiasa nganggo sadayana anu dijelaskeun di luhur nyalira upami anjeun henteu hoyong ngaganggu modul.
Mimitian-Minecraft
Kahiji, hayu urang nyieun modul nu bakal ngalakukeun nanaon leuwih ti ngajalankeun skrip nu bakal ngadangukeun tur ngarekam standardoutput.
Dina blok parameter, anjeunna naroskeun ti mana folder pikeun ngaluncurkeun Minecraft sareng dimana nempatkeun 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
Sareng anjeun kedah ngaluncurkeun Minecraft sapertos kieu:
Start-Minecraft -Type Forge -LogFile "C:minecraftstdout.txt" -MinecraftPath "C:minecraft"
Ayeuna hayu urang ngaléngkah ka Handler.ps1 anu siap dianggo
Supados Aksara urang narima parameter nalika disebut, urang ogé kudu nangtukeun blok parameter. Punten dicatet, éta ngajalankeun Oracle Java, upami anjeun nganggo distribusi anu béda anjeun kedah ngarobih jalur kana file anu tiasa dieksekusi.
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
Ngadaptar-Minecraft
Naskah praktis sami sareng Start-Minecraft, kecuali ngan ukur ngadaptarkeun tugas énggal. Narima argumen anu sarua. Ngaran pamaké, lamun teu dieusian, nyokot nu ayeuna.
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
Ngadaptar-Autologon
Dina blok parameter, naskah narima parameter Ngaran pamaké sarta Sandi. Lamun Ngaran pamaké teu dieusian, ngaran pamaké ayeuna dipaké.
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."
}
Ngajalankeun skrip ieu sapertos kieu:
Set-Autologon -Password "PlaintextPassword"
Kumaha carana nganggo
Ayeuna hayu urang nempo kumaha pangarang sorangan migunakeun sakabéh ieu. Kumaha leres nyebarkeun server Minecraft umum dina Windows. Hayu urang mimitian ti mimiti pisan.
1. Jieun pamaké
$pass = Get-Credential
New-LocalUser -Name "MinecraftServer" -Password $pass.Password -AccountNeverExpires -PasswordNeverExpires -UserMayNotChangePassword
2. Ngadaptarkeun tugas pikeun ngajalankeun naskah
Anjeun tiasa ngadaptar nganggo modul sapertos kieu:
Register-Minecraft -Type Forge -LogFile "C:minecraftstdout.txt" -MinecraftPath "C:minecraft" -User "MInecraftServer" -TaskName "MinecraftStarter"
Atawa nganggo alat standar:
$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. Aktipkeun login otomatis tur reboot mesin
Set-Autologon -Username "MinecraftServer" -Password "Qw3"
parantosan
Panulis ngadamel naskah, kalebet nyalira, janten anjeunna bakal resep ngadangukeun saran anjeun pikeun ningkatkeun naskah. Panulis ngaharepkeun yén sadaya kode ieu sahenteuna sahenteuna mangpaat pikeun anjeun, sareng tulisan éta pikaresepeun.
sumber: www.habr.com