Aloha nui ka mea kākau i ka pāʻani, a ʻo ia iho ka luna hoʻomalu o kahi kikowaena liʻiliʻi "no nā hoaaloha." E like me ka mea maʻamau i waena o nā amateurs, ua hoʻololi ʻia nā mea āpau ma ke kikowaena, a ke komo nei kēia i ka instability a, ma muli o ka hopena, hāʻule. ʻOiai ʻoi aku ka ʻike o ka mea kākau o Powershell ma mua o ka wahi o nā hale kūʻai ma kona alanui, ua hoʻoholo ʻo ia e hana "ʻO ka ʻatikala maikaʻi loa e hoʻolauna iā Minecraft 2020" Ua lilo ka palapala like i kumu no ka template in
ʻO nā kauoha a mākou e pono ai
Ke kālai lāʻau ʻokoʻa
I kekahi lā, ma hope o ka hoʻokomo ʻana i ʻelua mau mods hou aʻe, ʻike wau ua hāʻule ka server, me ka ʻole o ka haʻi ʻana i ke kaua. ʻAʻole i kākau ke kikowaena i nā hewa ma latest.log a i ʻole i ka debug, a ua pani ʻia ka console, i ka manaʻo i kākau i kēia hewa a hoʻōki.
Inā ʻaʻole makemake ʻo ia e kākau, ʻaʻole pono ʻo ia. Loaʻa iā mākou Powershell me cmdlet Kahu-mea, ka mea e lawe i kahi mea a hoʻopuka iā ia i kahi faila a i ka console i ka manawa like.
.handler.ps1 | Tee-Object .StandardOutput.txt -Append
Ma kēia ala, e ʻohi ʻo Powershell i ka StandardOutput a kākau iā ia i kahi faila. Mai ho'āʻo e hoʻohana Hoʻomaka-Kaʻinano ka mea, e hoʻihoʻi ʻo System.ComponentModel.Component ma mua o StandardOutput, a -RedirectStandardOutput e hiki ʻole ke komo i loko o ka console, ʻo ia ka mea a mākou e makemake ai e pale aku.
E hoʻolele i nā manaʻo
Ma hope o ka hoʻokomo ʻana i kēlā mau mods like, ʻike ka mea kākau ʻaʻole lawa ka RAM o ka server. A pono kēia e hoʻololi i nā manaʻo hoʻomaka. Ma mua o ka hoʻololi ʻana iā lākou i kēlā me kēia manawa i ka start.bat, ka mea e hoʻohana ai nā mea a pau, e hoʻohana wale i kēia palapala.
No ka mea heluhelu wale ʻo Tee-Object i ka StandardOutput ke kapa ʻia ka mea hoʻokō "E like me kēia", pono ʻoe e hana i kahi palapala ʻē aʻe. E hoʻokuʻu ʻia kēia palapala e Minecraft ponoʻī. E hoʻomaka kākou me nā hoʻopaʻapaʻa.
I mea e ʻoluʻolu ai i ka palaualelo hope loa i ka wā e hiki mai ana, pono e hōʻiliʻili ka palapala i nā manaʻo hoʻomaka ma ka lele. No ka hana ʻana i kēia, e hoʻomaka kākou ma ka ʻimi ʻana i ka mana hou loa noi.
$forge = ((Get-ChildItem | Where-Object Name -Like "forge*").Name | Sort-Object -Descending) | Select-Object -last 1
Me ka hoʻohana ʻana i ka mea ʻano, e lawe mau mākou i ka mea me ka helu nui loa, ʻaʻole pili i ka nui o lākou āu e kau ai ma laila. Moloā hope loa.
I kēia manawa pono ʻoe e hāʻawi i ka hoʻomanaʻo i ke kikowaena. No ka hana ʻana i kēia, e lawe i ka nui o ka hoʻomanaʻo ʻōnaehana a kākau i kona nui ma ke kaula.
$ram = ((Get-CimInstance Win32_PhysicalMemory | Measure-Object -Property capacity -Sum).sum /1gb)
$xmx = "-Xms" + $ram + "G"
Hoʻomaka ʻakomi pololei
Ua ʻike ka mea kākau i nā faila .bat mai nā poʻe ʻē aʻe, akā ʻaʻole lākou i noʻonoʻo i ke kumu i hoʻōki ʻia ai ke kikowaena. He mea maʻalahi kēia, pehea inā pono ʻoe e hoʻololi i ka faila mod a i ʻole e holoi i kekahi mea?
I kēia manawa e hana i kahi hoʻomaka hou. Ua ʻike mua ka mea kākau i nā palapala ʻē aʻe i hoʻomaka hou i ke kikowaena me ke kumu o ka pani ʻana o ke kikowaena. E hoʻohana mākou i ka exitcode. Hoʻohana ʻo Java i ka 0 ma ke ʻano he holomua, no laila e hula mākou mai ʻaneʻi.
ʻO ka mea mua, e hana kākou i kahi hana e hoʻomaka hou ai i ke kikowaena inā hāʻule.
function Get-MinecraftExitCode {
do {
if ($global:Process.ExitCode -ne 0) {
Write-Log
Restart-Minecraft
}
else {
Write-Log
}
} until ($global:Process.ExitCode -eq 0)
}
E mau ana ka palapala ma ka loop a hiki i ka pau ana o ke kikowaena mai kona console iho me ke kauoha / stop.
Inā hoʻoholo mākou e hoʻokaʻawale i nā mea āpau, a laila maikaʻi e hōʻiliʻili i ka lā hoʻomaka, ka lā hoʻopau, a me ke kumu hoʻi o ka hoʻopau ʻana.
No ka hana ʻana i kēia, kākau mākou i ka hopena o ka Start-Process i kahi loli. Ma ka palapala, ua like ia me keia:
$global:Process = Start-Process -FilePath "C:Program Files (x86)common filesOracleJavajavapath_target_*java.exe" -ArgumentList "$xmx -server -jar $forge nogui" -Wait -NoNewWindow -PassThru
A laila kākau mākou i nā hopena i kahi faila. ʻO kēia ka mea i hoʻihoʻi ʻia mai iā mākou ma ka ʻano hoʻololi:
$global:Process.StartTime
$global:Process.ExitCode
$global:Process.ExitTime
Hiki ke hoʻohui ʻia kēia mau mea a pau i kahi faila me ka hoʻohana ʻana i Add-Content. Ma hope o ka hoʻopili liʻiliʻi ʻana, loaʻa iā mākou kēia palapala, a e kapa mākou iā ia 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
I kēia manawa, e hana kākou i kahi palapala e hoʻomaka ana i ka mea hoʻohana.
Hoʻomaka pololei
Makemake ka mea kākau e holo i nā ʻano like ʻole o Minecraft mai kēlā me kēia ala i hoʻokahi module, a hiki ke mālama i nā lāʻau i loko o kahi waihona kikoʻī.
ʻO ka pilikia, pono e hoʻomaka ke kaʻina hana e kahi mea hoʻohana i komo i ka ʻōnaehana. Hiki ke hana ʻia kēia ma o ka pākaukau a i ʻole WinRm. Inā holo ʻoe i ke kikowaena ma ke ʻano he mea hoʻohana ʻōnaehana a i ʻole he luna hoʻomalu, akā ʻaʻole ʻoe e komo, a laila ʻaʻole hiki iā Server.jar ke heluhelu eula.txt a hoʻomaka.
Hiki iā mākou ke hoʻohana i ka hoʻopaʻa inoa ma o ka hoʻohui ʻana i ʻekolu mau mea hoʻokomo i ka papa inoa.
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
ʻAʻole palekana. Hōʻike ʻia ka inoa inoa a me ka ʻōlelo huna ma ʻaneʻi ma ka plaintext, no laila e hoʻomaka i ka kikowaena pono ʻoe e hana i kahi mea hoʻohana kaʻawale i loaʻa i ka pae hoʻohana, a i ʻole ma kahi hui haiki. ʻAʻole ʻōlelo ʻia e hoʻohana i kahi luna maʻamau no kēia.
Hoʻokaʻawale mākou i ke komo ʻana. I kēia manawa pono ʻoe e hoʻopaʻa inoa i kahi hana hou no ke kikowaena. E holo mākou i ke kauoha mai Powershell, no laila e like me kēia:
$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
ʻO ka hui ʻana i ka module
I kēia manawa e hoʻokomo i nā mea a pau i loko o nā modula hiki ke hoʻohana ma hope. Aia nā code a pau no nā palapala i hoʻomākaukau ʻia, lawe mai a hoʻohana.
Hiki iā ʻoe ke hoʻohana i nā mea āpau i wehewehe ʻia ma luna nei inā ʻaʻole ʻoe makemake e hoʻopilikia i nā modula.
Hoʻomaka-Minecraft
ʻO ka mea mua, e hana mākou i kahi module e hana ʻole i kahi mea ʻē aʻe ma mua o ka holo ʻana i kahi palapala e hoʻolohe a hoʻopaʻa i ka standardoutput.
I loko o nā ʻāpana ʻāpana, nīnau ʻo ia mai kahi waihona e hoʻomaka ai i ka Minecraft a ma hea e waiho ai i ka lāʻau.
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
A pono ʻoe e hoʻomaka i ka Minecraft e like me kēia:
Start-Minecraft -Type Forge -LogFile "C:minecraftstdout.txt" -MinecraftPath "C:minecraft"
E neʻe kākou i ka Handler.ps1 mākaukau e hoʻohana
I mea e ʻae ai kā mākou palapala i nā ʻāpana ke kāhea ʻia, pono mākou e kuhikuhi i kahi poloka parameter. E ʻoluʻolu, e holo ana ʻo Oracle Java, inā ʻoe e hoʻohana ana i kahi mahele ʻokoʻa pono ʻoe e hoʻololi i ke ala i ka faila hoʻokō.
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
Kakau-Minecraft
Ua like ka palapala me Start-Minecraft, koe wale no ke kakau inoa i kahi hana hou. ʻAe i nā manaʻo like. ʻO ka inoa inoa, inā ʻaʻole i kuhikuhi ʻia, lawe i ka mea i kēia manawa.
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
Kakau-Autologon
I loko o ka ʻāpana ʻāpana, ʻae ka palapala i ka inoa mea hoʻohana a me ka ʻōlelo huna. Inā ʻaʻole i kuhikuhi ʻia ka inoa hoʻohana, hoʻohana ʻia ka inoa o ka mea hoʻohana i kēia manawa.
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."
}
Ke holo nei kēia ʻatikala penei:
Set-Autologon -Password "PlaintextPassword"
Pehea e hoʻohana ai
I kēia manawa, e nānā kākou i ka hoʻohana ʻana o ka mea kākau iā ia iho. Pehea e kau pono ai i kahi kikowaena Minecraft lehulehu ma Windows. E hoʻomaka kākou mai kinohi mai.
1. Hana i mea hoʻohana
$pass = Get-Credential
New-LocalUser -Name "MinecraftServer" -Password $pass.Password -AccountNeverExpires -PasswordNeverExpires -UserMayNotChangePassword
2. E hoʻopaʻa inoa i ka hana e holo i ka palapala
Hiki iā ʻoe ke hoʻopaʻa inoa me ka hoʻohana ʻana i kahi module e like me kēia:
Register-Minecraft -Type Forge -LogFile "C:minecraftstdout.txt" -MinecraftPath "C:minecraft" -User "MInecraftServer" -TaskName "MinecraftStarter"
A i ʻole e hoʻohana i nā mea hana maʻamau:
$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. E ho'ā i ke komo 'akomi a ho'omaka hou i ka mīkini
Set-Autologon -Username "MinecraftServer" -Password "Qw3"
Ka pauʻana
Ua hana ka mea kākau i ka palapala, a nona iho, no laila, e hauʻoli ʻo ia e hoʻolohe i kāu mau manaʻo no ka hoʻomaikaʻi ʻana i ka palapala. Manaʻo ka mea kākau he mea liʻiliʻi loa kēia code a pau iā ʻoe, a he hoihoi ka ʻatikala.
Source: www.habr.com