Umbhali uwuthanda kakhulu umdlalo, kwaye yena ngokwakhe ungumlawuli weseva encinci "enzelwe abahlobo kuphela." Njengesiqhelo phakathi kwama-amateurs, yonke into ekumncedisi imodliwe, kwaye oku kubandakanya ukungazinzi kwaye, ngenxa yoko, ukungqubana. Kuba umbhali wePowershell wazi ngcono kunendawo yeevenkile kwisitrato sakhe, wagqiba kwelokuba enze "Esona sibhalo sibalaseleyo sokuQalisa iMinecraft ngo-2020" Iskripthi esifanayo sisebenze njengesiseko sethemplethi kwi
Imiyalelo esiyifunayo
Ukugawulwa kwemithi okungenye
Ngenye imini, emva kokufaka ezinye iimodyuli ezimbalwa, ndafumanisa ukuba umncedisi, ngokucacileyo, wayeqhekeka ngaphandle kokubhengeza imfazwe. Umncedisi akazange abhale iimpazamo kwi latest.log okanye kwi-debug, kwaye i-console, enokuthi ngethiyori ibhale le mpazamo kwaye iyeke, yavalwa.
Ukuba akafuni ukubhala, akafuni. Sine-Powershell ene-cmdlet I-Tee-Object, ethatha into kwaye iyikhuphe kwifayile nakwi console ngexesha elinye.
.handler.ps1 | Tee-Object .StandardOutput.txt -Append
Ngale ndlela, i-Powershell iya kuthatha i-StandardOutput kwaye ibhale kwifayile. Musa ukuzama ukusebenzisa Qala-Inkqubokuba iya kubuyisela i-System.ComponentModel.Component kwaye hayi i-StandardOutput, kwaye -RedirectStandardOutput iya kwenza ukuba kungenzeki ukungena kwi-console, into esifuna ukuyiphepha.
Qalisa iingxoxo
Emva kokufaka iimodyuli ezifanayo, umbhali waqaphela ukuba iseva nayo ayinayo i-RAM eyaneleyo. Kwaye oku kufuna ukutshintsha iingxoxo zokuqaliswa. Endaweni yokuzitshintsha ngalo lonke ixesha kwi-start.bat, esetyenziswa ngumntu wonke, sebenzisa nje esi script.
Ekubeni i-Tee-Object ifunda kuphela i-StandardOutput xa ephunyeziweyo ibizwa ngokuba "Kanye Nje Le", kuya kufuneka wenze esinye iskripthi. Esi script siya kusungulwa yiMinecraft ngokwayo. Masiqale ngeengxabano.
Ukuze uzibandakanye kubuvila bokugqibela kwixesha elizayo, iskripthi kufuneka siqokelele iingxoxo zokuqalisa ngempukane. Ukwenza oku, masiqale ngokukhangela inguqulelo yamva nje qulunqa.
$forge = ((Get-ChildItem | Where-Object Name -Like "forge*").Name | Sort-Object -Descending) | Select-Object -last 1
Usebenzisa uhlobo-into, siyakuhlala sithatha into enelona nani likhulu, nokuba zingaphi na ozibeke apho. Ubuvila obugqibeleleyo.
Ngoku kufuneka unikeze imemori kwiseva. Ukwenza oku, thabatha inani lememori yenkqubo kwaye ubhale inani layo kumtya.
$ram = ((Get-CimInstance Win32_PhysicalMemory | Measure-Object -Property capacity -Sum).sum /1gb)
$xmx = "-Xms" + $ram + "G"
Lungisa ukuqalisa kwakhona okuzenzekelayo
Umbhali uye wabona iifayile ze-bat ezivela kwabanye abantu, kodwa abazange bathathele ingqalelo isizathu sokuba umncedisi wayeka. Oku akulunganga, kuthekani ukuba ufuna ukutshintsha ifayile yemod okanye ucime into?
Ngoku makhe siqale ngokutsha ngokufanelekileyo. Umbhali ngaphambili ufumene izikripthi ezingaqhelekanga eziqale ngokutsha iseva nokuba kutheni umncedisi evaliwe. Siza kusebenzisa ikhowudi yokuphuma. IJava isebenzisa u-0 njengempumelelo, ngoko ke siza kudanisa ukusuka apha.
Okokuqala, masenze umsebenzi oza kuqalisa kwakhona umncedisi ukuba awuphumelelanga.
function Get-MinecraftExitCode {
do {
if ($global:Process.ExitCode -ne 0) {
Write-Log
Restart-Minecraft
}
else {
Write-Log
}
} until ($global:Process.ExitCode -eq 0)
}
Iscript siya kuhlala kwilophu de umncedisi avale ngokuqhelekileyo kwiconsole yakhe esebenzisa i/stop command.
Ukuba sithatha isigqibo sokwenza yonke into ngokuzenzekelayo, ngoko kuya kuba kuhle ukuqokelela umhla wokuqala, umhla wokugqiba, kunye nesizathu sokugqitywa.
Ukwenza oku, sibhala umphumo we-Start-Process ibe yinto eguquguqukayo. Kwiskripthi ibonakala ngolu hlobo:
$global:Process = Start-Process -FilePath "C:Program Files (x86)common filesOracleJavajavapath_target_*java.exe" -ArgumentList "$xmx -server -jar $forge nogui" -Wait -NoNewWindow -PassThru
Kwaye ke sibhala iziphumo kwifayile. Oku koko kubuyiselwe kuthi kuguquguquko:
$global:Process.StartTime
$global:Process.ExitCode
$global:Process.ExitTime
Konke oku kunokongezwa kwifayile usebenzisa i-Add-Content. Emva kokuyikama kancinci, sifumana esi script, kwaye masiyibize ngokuba yi-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
Ngoku masenze iskripthi esivula isibambi.
Ukuqalisa okuchanekileyo
Umbhali ufuna ukuqhuba iinguqulelo ezahlukeneyo zeMinecraft ukusuka kuyo nayiphi na indlela kwimodyuli enye, kwaye ukwazi ukugcina izingodo kwifolda ethile.
Ingxaki kukuba inkqubo kufuneka iqalwe ngumsebenzisi ongene kwinkqubo. Oku kunokwenziwa nge desktop okanye WinRm. Ukuba usebenzisa umncedisi njengomsebenzisi wenkqubo okanye njengomlawuli, kodwa ungangeni, ngoko i-Server.jar ayizukwazi nokufunda eula.txt kwaye iqale.
Sinokwenza ukuba ungene ngokuzenzekelayo ngokongeza amangeniso amathathu kwirejista.
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
Ayikhuselekanga. Igama lokungena kunye negama lokugqitha ziboniswe apha kumbhalo ongenanto, ngoko ke ukuqalisa umncedisi kufuneka wenze umsebenzisi owahlukileyo onofikelelo kwinqanaba lomsebenzisi, okanye kwiqela elimxinwa ngakumbi. Akukhuthazwa ngokungqongqo ukusebenzisa umlawuli osemgangathweni kule nto.
Silungise i-auto-login. Ngoku kufuneka ubhalise umsebenzi omtsha kwiseva. Siza kuqhuba umyalelo ovela kwi-Powershell, ngoko iya kujongeka ngolu hlobo:
$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
Ukudibanisa imodyuli
Ngoku makhe sibeke yonke into kwiimodyuli ezinokuthi zisetyenziswe kamva. Yonke ikhowudi yemibhalo esele yenziwe ilapha, ngenisa kwaye usebenzise.
Ungasebenzisa yonke into echazwe apha ngasentla ngokwahlukileyo ukuba awufuni ukuzikhathaza ngeemodyuli.
Qala-Minecraft
Okokuqala, masenze imodyuli engayi kwenza nto ngaphandle kokuqhuba iskripthi esiya kumamela kwaye sirekhode imveliso esemgangathweni.
Kwibhloko yeeparamitha, ubuza ukuba yeyiphi ifolda yokuqalisa iMinecraft kunye nendawo yokubeka ilogi.
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
Kwaye kuya kufuneka uqalise iMinecraft ngolu hlobo:
Start-Minecraft -Type Forge -LogFile "C:minecraftstdout.txt" -MinecraftPath "C:minecraft"
Ngoku masiqhubele phambili kwi-Handler.ps1 esele ilungile
Ukuze iskripthi sethu samkele iparameters xa sibizwa, kufuneka sikhankanye ibhloko yepharamitha. Nceda uqaphele, iqhuba i-Oracle Java, ukuba usebenzisa unikezelo olwahlukileyo kuya kufuneka utshintshe umendo kwifayile ephunyeziweyo.
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
Bhalisa-Minecraft
Iskripthi siyafana ne-Start-Minecraft, ngaphandle kokuba sibhalisa kuphela umsebenzi omtsha. Yamkela iingxoxo ezifanayo. Igama lomsebenzisi, ukuba alichazwanga, lithatha elikhoyo.
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
Bhalisa-Autogon
Kwibhloko yeeparamitha, iskripthi samkela i-Username kunye nePassword parameters. Ukuba igama lomsebenzisi alichazwanga, igama lomsebenzisi wangoku liyasetyenziswa.
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."
}
Ukuqhuba esi script kubonakala ngolu hlobo:
Set-Autologon -Password "PlaintextPassword"
Uyisebenzisa njani
Ngoku makhe sijonge indlela umbhali ngokwakhe ayisebenzisa ngayo yonke le nto. Uyithumela njani ngokufanelekileyo iseva yeMinecraft kawonkewonke kwiWindows. Masiqale kwasekuqaleni.
1. Yenza umsebenzisi
$pass = Get-Credential
New-LocalUser -Name "MinecraftServer" -Password $pass.Password -AccountNeverExpires -PasswordNeverExpires -UserMayNotChangePassword
2. Bhalisa umsebenzi wokuqhuba iskripthi
Unokubhalisa usebenzisa imodyuli efana nale:
Register-Minecraft -Type Forge -LogFile "C:minecraftstdout.txt" -MinecraftPath "C:minecraft" -User "MInecraftServer" -TaskName "MinecraftStarter"
Okanye sebenzisa izixhobo eziqhelekileyo:
$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. Vumela ukungena ngokuzenzekelayo kwaye uqalise kwakhona umatshini
Set-Autologon -Username "MinecraftServer" -Password "Qw3"
Ukugqiba
Umbhali wenze iskripthi, kubandakanywa naye, ngoko ke, uya kukuvuyela ukuphulaphula iziphakamiso zakho zokuphucula iskripthi. Umbhali unethemba lokuba yonke le khowudi ibiluncedo kancinci kuwe, kwaye inqaku belinomdla.
umthombo: www.habr.com