Umbhali uwuthanda kakhulu umdlalo, futhi yena ngokwakhe ungumqondisi weseva encane “eyabangane kuphela.” Njengenjwayelo phakathi kwabasafufusa, yonke into ekuseva iyashintshwa, futhi lokhu kuhlanganisa ukungazinzi futhi, ngenxa yalokho, ukuphahlazeka. Njengoba umbhali we-Powershell azi kangcono kunendawo yezitolo emgwaqweni wakhe, unqume ukwenza "Iskripthi Esingcono Kakhulu Sokwethula i-Minecraft 2020" Iskripthi esifanayo sisebenze njengesisekelo sesifanekiso ku
Imiyalo esiyidingayo
Okunye ukugawula
Ngolunye usuku, ngemuva kokufaka amanye ama-mods ambalwa, ngathola ukuthi iseva, ngokusobala, yayiphahlazeka ngaphandle kokumemezela impi. Iseva ayizange ibhale amaphutha kokuthi latest.log noma ku-debug, futhi ikhonsoli, okufanele ibhale leli phutha ngokombono futhi ime, ivaliwe.
Uma engafuni ukubhala, akadingi. Sine-Powershell ene-cmdlet I-Tee-Object, ethatha into futhi iyikhiphele kufayela naku-console ngesikhathi esifanayo.
.handler.ps1 | Tee-Object .StandardOutput.txt -Append
Ngale ndlela, i-Powershell izothatha i-StandardOutput futhi iyibhale efayeleni. Ungazami ukusebenzisa Qala-Inqubongoba izobuyisela i-System.ComponentModel.Component hhayi i-StandardOutput, futhi -RedirectStandardOutput izokwenza kungenzeki ukungena kukhonsoli, okuyilokho esifuna ukukugwema.
Yethula izimpikiswano
Ngemva kokufaka leyo pair of mods, umbhali waqaphela ukuthi iseva nayo ayinayo i-RAM eyanele. Futhi lokhu kudinga ukushintsha izimpikiswano zokuqalisa. Esikhundleni sokuzishintsha njalo ku-start.bat, esetshenziswa wonke umuntu, vele usebenzise lesi script.
Njengoba i-Tee-Object ifunda kuphela i-StandardOutput lapho okusebenzisekayo kubizwa ngokuthi "Just Like This", kuzodingeka wenze esinye iskripthi. Lesi script sizokwethulwa yiMinecraft uqobo. Ake siqale ngezimpikiswano.
Ukuze uzitike ngobuvila bokugcina ngokuzayo, iskripthi kufanele siqoqe izimpikiswano zokuqalisa ngokuphazima kweso. Ukwenza lokhu, ake siqale ngokucinga inguqulo yakamuva yakha.
$forge = ((Get-ChildItem | Where-Object Name -Like "forge*").Name | Sort-Object -Descending) | Select-Object -last 1
Sisebenzisa i-sort-object, sizohlala sithatha into enenombolo enkulu kunazo zonke, kungakhathaliseki ukuthi zingaki ozibeke lapho. Ubuvila bokugcina.
Manje udinga ukunika iseva imemori. Ukuze wenze lokhu, thatha inani lememori yesistimu bese ubhala inani layo ngochungechunge.
$ram = ((Get-CimInstance Win32_PhysicalMemory | Measure-Object -Property capacity -Sum).sum /1gb)
$xmx = "-Xms" + $ram + "G"
Lungisa ukuqalisa kabusha okuzenzakalelayo
Umbhali ubone amafayela .bat esuka kwabanye abantu, kodwa abazange bacabangele isizathu sokuthi kungani iseva imisiwe. Lokhu akulungile, kuthiwani uma udinga nje ukushintsha ifayela le-mod noma ukususa okuthile?
Manje masenze ukuqala kabusha okufanele. Umbhali ngaphambilini uhlangane nemibhalo engajwayelekile eqale kabusha iseva ngokunganaki ukuthi kungani iseva ivaliwe. Sizosebenzisa i-exitcode. I-Java isebenzisa u-0 njengempumelelo, ngakho-ke sizodansa kusuka lapha.
Okokuqala, masidale umsebenzi ozoqala kabusha iseva uma yehluleka.
function Get-MinecraftExitCode {
do {
if ($global:Process.ExitCode -ne 0) {
Write-Log
Restart-Minecraft
}
else {
Write-Log
}
} until ($global:Process.ExitCode -eq 0)
}
Umbhalo uzohlala ku-loop kuze kube yilapho iseva ivala ngokujwayelekile kukhonsoli yayo isebenzisa umyalo othi/stop.
Uma sinquma ukwenza yonke into ngokuzenzakalelayo, khona-ke kungaba kuhle ukuqoqa idethi yokuqala, idethi yokuqeda, kanye nesizathu sokuqeda.
Ukuze senze lokhu, sibhala umphumela we-Start-Process ube oguquguqukayo. Kuskripthi kubonakala kanje:
$global:Process = Start-Process -FilePath "C:Program Files (x86)common filesOracleJavajavapath_target_*java.exe" -ArgumentList "$xmx -server -jar $forge nogui" -Wait -NoNewWindow -PassThru
Bese sibhala imiphumela efayeleni. Yilokhu okubuyiselwa kithi kokuguquguqukayo:
$global:Process.StartTime
$global:Process.ExitCode
$global:Process.ExitTime
Konke lokhu kungengezwa kufayela kusetshenziswa okuthi Engeza-Okuqukethwe. Ngemva kokuyikama kancane, sithola lesi sikripthi, futhi masiyibize nge-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
Manje ake sakhe iskripthi esivula isibambi.
Ukuqalisa okulungile
Umbhali ufuna ukusebenzisa izinguqulo ezahlukene ze-Minecraft kusuka kunoma iyiphi indlela kumojula eyodwa, futhi akwazi ukugcina izingodo kufolda ethile.
Inkinga ukuthi inqubo kumele iqalwe ngumsebenzisi ongene ohlelweni. Lokhu kungenziwa ngedeskithophu noma ngeWinRm. Uma usebenzisa iseva njengomsebenzisi wesistimu noma njengomlawuli, kodwa ungangeni, i-Server.jar ngeke ikwazi nokufunda i-eula.txt bese iqala.
Singavumela ukungena ngemvume okuzenzakalelayo ngokungeza okufakiwe okuthathu kurejista.
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
Akuphephile. Ukungena ngemvume nephasiwedi kukhonjiswe lapha embhalweni osobala, ngakho-ke ukuze uqale iseva udinga ukwakha umsebenzisi ohlukile onokufinyelela ezingeni lomsebenzisi, noma eqenjini elincane nakakhulu. Akunconywa neze ukusebenzisa umlawuli ojwayelekile kulokhu.
Silungise ukungena ngemvume okuzenzakalelayo. Manje udinga ukubhalisa umsebenzi omusha weseva. Sizosebenzisa umyalo ovela ku-Powershell, ngakho-ke uzobukeka kanje:
$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
Ukuhlanganisa imojula
Manje ake sifake yonke into kumamojula angasetshenziswa kamuva. Yonke ikhodi yemibhalo esenziwe ngomumo ilapha, ngenisa futhi uyisebenzise.
Ungasebenzisa yonke into echazwe ngenhla ngokwehlukana uma ungafuni ukuzihlupha ngamamojula.
Qala-Minecraft
Okokuqala, ake sakhe imojuli engeke yenze lutho ngaphezu kokusebenzisa iskripthi esizolalela futhi sirekhode okukhiphayo okujwayelekile.
Ebhulokhini lemingcele, ubuza ukuthi iyiphi ifolda ezokwethula i-Minecraft nokuthi uyibeke kuphi 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
Futhi uzodinga ukwethula i-Minecraft kanje:
Start-Minecraft -Type Forge -LogFile "C:minecraftstdout.txt" -MinecraftPath "C:minecraft"
Manje ake siqhubekele ku-Handler.ps1 elungele ukusetshenziswa
Ukuze iskripthi sethu samukele amapharamitha lapho sibizwa, sidinga futhi ukucacisa ibhulokhi yepharamitha. Sicela uqaphele, isebenzisa i-Oracle Java, uma usebenzisa ukusatshalaliswa okuhlukile uzodinga ukushintsha indlela eya efayeleni elisebenzisekayo.
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
Umbhalo ucishe ufane ne-Start-Minecraft, ngaphandle kokuthi ubhalisa kuphela umsebenzi omusha. Yamukela izimpikiswano ezifanayo. Igama lomsebenzisi, uma lingashiwongo, lithatha elamanje.
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
Kubhulokhi yemingcele, umbhalo wamukela igama lomsebenzisi nemingcele yephasiwedi. Uma igama lomsebenzisi lingashiwongo, igama lomsebenzisi wamanje liyasetshenziswa.
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."
}
Ukuqalisa lesi script kubonakala kanje:
Set-Autologon -Password "PlaintextPassword"
Ungayisebenzisa kanjani
Manje ake sibheke ukuthi umlobi ngokwakhe usebenzisa kanjani konke lokhu. Ungayifaka kanjani kahle iseva ye-Minecraft yomphakathi ku-Windows. Ake siqale kusukela ekuqaleni.
1. Dala umsebenzisi
$pass = Get-Credential
New-LocalUser -Name "MinecraftServer" -Password $pass.Password -AccountNeverExpires -PasswordNeverExpires -UserMayNotChangePassword
2. Bhalisa umsebenzi ukuze uqalise iskripthi
Ungabhalisa usebenzisa imojuli efana nale:
Register-Minecraft -Type Forge -LogFile "C:minecraftstdout.txt" -MinecraftPath "C:minecraft" -User "MInecraftServer" -TaskName "MinecraftStarter"
Noma sebenzisa amathuluzi ajwayelekile:
$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. Nika amandla ukungena ngokuzenzakalelayo bese uqalisa kabusha umshini
Set-Autologon -Username "MinecraftServer" -Password "Qw3"
Ukuqedela
Umbhali wenze iskripthi, kufaka phakathi yena, ngakho-ke, uzokujabulela ukulalela iziphakamiso zakho zokuthuthukisa iskripthi. Umbhali uthemba ukuthi yonke le khodi okungenani ibe usizo kancane kuwe, nokuthi isihloko besithakazelisa.
Source: www.habr.com