Is breá leis an údar an cluiche go mór, agus tá sé féin ina riarthóir ar fhreastalaí beag "do chairde amháin." Mar is gnách i measc amaitéarach, tá gach rud ar an bhfreastalaí modded, agus bíonn éagobhsaíocht i gceist leis seo agus, mar thoradh air sin, tuairteanna. Ós rud é go bhfuil a fhios ag údar Powershell níos fearr ná suíomh na siopaí ar a shráid, chinn sé "Script is Fearr le Seoladh Minecraft 2020" Bhí an script chéanna mar bhunús don teimpléad i . Ach tá na foinsí go léir san alt cheana féin. Anois, in ord, conas a rinneadh é go léir.
Na horduithe a theastaíonn uainn
Logánú malartach
Lá amháin, tar éis cúpla mods níos mó a shuiteáil, fuair mé amach go raibh an freastalaí, is cosúil, ag tuairteáil gan cogadh a dhearbhú. Níor scríobh an freastalaí earráidí in latest.log nó in debug, agus dúnadh an consól, ar cheart dó an earráid seo a scríobh agus a stopadh.
Mura bhfuil sé ag iarraidh scríobh, ní gá dó. Tá Powershell againn le cmdlet Tee-Réad, a thógann rud agus a aschuireann sé chuig comhad agus chuig an consól ag an am céanna.
.handler.ps1 | Tee-Object .StandardOutput.txt -AppendAr an mbealach seo, roghnóidh Powershell an StandardOutput agus scríobhfaidh sé chuig comhad é. Ná déan iarracht úsáid a bhaint as Tosaigh-Próiseastoisc go dtabharfaidh sé ar ais System.ComponentModel.Component agus ní StandardOutput, agus -RedirectStandardOutput beidh sé dodhéanta dul isteach sa chonsól, agus is é sin cad ba mhaith linn a sheachaint.
Seol argóintí
Tar éis an péire céanna mods sin a shuiteáil, thug an t-údar faoi deara nach raibh go leor RAM ag an bhfreastalaí freisin. Agus éilíonn sé seo na hargóintí seolta a athrú. In ionad iad a athrú gach uair i start.bat, a úsáideann gach duine, ní gá ach an script seo a úsáid.
Ós rud é nach léann Tee-Object an StandardOutput ach nuair a thugtar "Díreach mar seo" ar an inrite, beidh ort script eile a dhéanamh. Is é Minecraft féin a sheolfaidh an script seo. Cuirimis tús leis na hargóintí.
D'fhonn a bheith sásta leis an leisce deiridh sa todhchaí, ní mór don script argóintí seolta a bhailiú ar an eitilt. Chun seo a dhéanamh, cuirimis tús le cuardach a dhéanamh ar an leagan is déanaí bhrionnú.
$forge = ((Get-ChildItem | Where-Object Name -Like "forge*").Name | Sort-Object -Descending) | Select-Object -last 1Ag baint úsáide as sort-object, tógfaimid an réad leis an líon is mó i gcónaí, is cuma cé mhéad acu a chuir tú ann. Leisce deiridh.
Anois ní mór duit cuimhne a shannadh don fhreastalaí. Chun seo a dhéanamh, tóg méid cuimhne an chórais agus scríobh a mhéid i teaghrán.
$ram = ((Get-CimInstance Win32_PhysicalMemory | Measure-Object -Property capacity -Sum).sum /1gb)
$xmx = "-Xms" + $ram + "G"Atosú uathoibríoch ceart
Tá comhaid .bat ó dhaoine eile feicthe ag an údar, ach níor chuir siad san áireamh an fáth ar cuireadh stop leis an bhfreastalaí. Tá sé seo deacair, cad más gá duit ach an comhad mod a athrú nó rud éigin a scriosadh?
Anois déanaimis atosú ceart. Tháinig an t-údar ar scripteanna aisteacha roimhe seo a d'atosaigh an freastalaí is cuma cén fáth ar stop an freastalaí. Bainfimid úsáid as cód imeachta. Úsáideann Java 0 mar rath, mar sin beidh muid ag damhsa as seo.
Ar dtús, cruthaímid feidhm a atosóidh an freastalaí má theipeann air.
function Get-MinecraftExitCode {
do {
if ($global:Process.ExitCode -ne 0) {
Write-Log
Restart-Minecraft
}
else {
Write-Log
}
} until ($global:Process.ExitCode -eq 0)
}
Fanfaidh an script sa lúb go dtí go stopann an freastalaí síos de ghnáth óna chonsól féin ag baint úsáide as an ordú / stop.
Má shocraíonn muid gach rud a uathoibriú, ansin bheadh sé deas an dáta tosaigh, an dáta críochnaithe, agus an chúis le críochnú a bhailiú.
Chun seo a dhéanamh, scríobhaimid toradh an Phróisis Tosaigh isteach in athróg. Sa script breathnaíonn sé mar seo:
$global:Process = Start-Process -FilePath "C:Program Files (x86)common filesOracleJavajavapath_target_*java.exe" -ArgumentList "$xmx -server -jar $forge nogui" -Wait -NoNewWindow -PassThruAgus ansin scríobhaimid na torthaí chuig comhad. Seo é a chuirtear ar ais chugainn san athróg:
$global:Process.StartTime
$global:Process.ExitCode
$global:Process.ExitTimeIs féidir é seo go léir a chur le comhad ag baint úsáide as an mBreiseán. Tar éis dúinn é a chíoradh beagán, faighimid an script seo, agus tugaimid handler.ps1 air.
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
Anois, déanaimis script a chruthú a sheolann láimhseálaí.
Tosaithe ceart
Ba mhaith leis an údar a reáchtáil leaganacha éagsúla de Minecraft ó aon cosán i modúl amháin, agus freisin a bheith in ann a stóráil logs i bhfillteán ar leith.
Is í an fhadhb atá ann ná go gcaithfidh úsáideoir atá logáilte isteach sa chóras an próiseas a thosú. Is féidir é seo a dhéanamh tríd an deasc nó WinRm. Má ritheann tú an freastalaí mar úsáideoir córais nó fiú riarthóir, ach nach logáil isteach, ansin ní bheidh Server.jar in ann fiú a léamh eula.txt agus tús.
Is féidir linn logáil isteach uathoibríoch a chumasú trí thrí iontráil a chur leis an gclár.
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 SilentlyContinueNíl sé sábháilte. Tá an logáil isteach agus an pasfhocal léirithe anseo i ngnáththéacs, mar sin chun an freastalaí a thosú ní mór duit úsáideoir ar leith a chruthú a bhfuil rochtain aige ar leibhéal an úsáideora, nó i ngrúpa níos cúinge fós. Ní mholtar go docht riarthóir caighdeánach a úsáid chuige seo.
Rinneamar an t-uath-logáil isteach a réiteach. Anois ní mór duit tasc nua a chlárú don fhreastalaí. Reáchtálfaimid an t-ordú ó Powershell, mar sin beidh sé cuma mar seo:
$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 HighestAn modúl a chur le chéile
Anois cuirimis gach rud isteach i modúil is féidir a úsáid níos déanaí. Tá an cód ar fad do scripteanna réamhdhéanta anseo, iompórtáil agus úsáid.
Is féidir leat gach rud a thuairiscítear thuas a úsáid ar leithligh mura bhfuil tú ag iarraidh bac a chur le modúil.
Tosaigh minecraft
Ar dtús, cruthaimis modúl nach ndéanfaidh aon rud níos mó ná script a rith a éistfidh le haschur caighdeánach agus a thaifeadfaidh.
Sa bhloc paraiméadair, iarrann sé cén fillteán le Minecraft a sheoladh agus cén áit ar cheart an logáil a chur.
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-MinecraftAgus beidh ort Minecraft mar seo a sheoladh:
Start-Minecraft -Type Forge -LogFile "C:minecraftstdout.txt" -MinecraftPath "C:minecraft"Anois, bogaimis ar aghaidh go dtí an Handler.ps1 atá réidh le húsáid
Chun go nglacfaidh ár script paraiméadair nuair a ghlaoitear air, ní mór dúinn bloc paraiméadar a shonrú freisin. Tabhair faoi deara le do thoil, ritheann sé Oracle Java, má tá dáileadh difriúil á úsáid agat beidh ort an cosán a athrú go dtí an comhad inrite.
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
Clárú minecraft
Tá an script beagnach mar an gcéanna le Start-Minecraft, ach amháin nach gcláraíonn sé ach tasc nua. Glacann na hargóintí céanna. Tógann an t-ainm úsáideora, mura bhfuil sé sonraithe, an ceann reatha.
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-MinecraftClár-Autologon
Sa bhloc paraiméadair, glacann an script na paraiméadair Ainm Úsáideora agus Pasfhocal. Murar sonraíodh Ainm Úsáideora, úsáidtear ainm an úsáideora reatha.
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."
}
Tá cuma mar seo ar rith an script seo:
Set-Autologon -Password "PlaintextPassword"Conas a úsáid
Anois, déanaimis féachaint ar conas a úsáideann an t-údar féin é seo go léir. Conas freastalaí poiblí Minecraft a imscaradh i gceart ar Windows. Tosaímid ón tús.
1. Cruthaigh úsáideoir
$pass = Get-Credential
New-LocalUser -Name "MinecraftServer" -Password $pass.Password -AccountNeverExpires -PasswordNeverExpires -UserMayNotChangePassword2. Cláraigh an tasc chun an script a rith
Is féidir leat clárú le modúl mar seo:
Register-Minecraft -Type Forge -LogFile "C:minecraftstdout.txt" -MinecraftPath "C:minecraft" -User "MInecraftServer" -TaskName "MinecraftStarter"Nó bain úsáid as uirlisí caighdeánacha:
$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 Highest3. Cumasaigh uathoibríoch-logáil isteach agus atosaigh an meaisín
Set-Autologon -Username "MinecraftServer" -Password "Qw3"Críochnú
Rinne an t-údar an script, lena n-áirítear dó féin, mar sin, beidh sé sásta éisteacht le do mholtaí chun an script a fheabhsú. Tá súil ag an údar go raibh an cód seo go léir ar a laghad úsáideach duit, agus go raibh an t-alt suimiúil.
Foinse: will.com
