Tha gaol mòr aig an ùghdar air a’ gheama, agus tha e fhèin na rianadair air frithealaiche beag “dìreach airson caraidean.” Mar as àbhaist am measg neo-dhreuchdail, tha a h-uile càil air an fhrithealaiche air a mhodhadh, agus tha seo a 'ciallachadh neo-sheasmhachd agus, mar thoradh air sin, tubaistean. Leis gu bheil fios aig ùghdar Powershell nas fheàrr na far a bheil na stòran air an t-sràid aige, chuir e roimhe "An sgriobt as fheàrr airson Minecraft a chuir air bhog 2020" Bha an aon sgriobt mar bhunait airson an teamplaid ann an
Na h-òrdughan a tha a dhìth oirnn
Clàradh eile
Aon latha, às deidh dhomh modan no dhà a bharrachd a chuir a-steach, fhuair mi a-mach gu robh am frithealaiche, a rèir coltais, a ’bualadh gun a bhith ag ainmeachadh cogadh. Cha do sgrìobh am frithealaiche mearachdan ann an latest.log no ann an deasbaid, agus chaidh an consol, a bu chòir a bhith air a’ mhearachd seo a sgrìobhadh agus a stad, a dhùnadh.
Mura h-eil e airson sgrìobhadh, chan fheum e. Tha Powershell againn le cmdlet Tee-Rud, a bheir nì agus a bheir a-mach e gu faidhle agus chun consol aig an aon àm.
.handler.ps1 | Tee-Object .StandardOutput.txt -Append
San dòigh seo, togaidh Powershell an StandardOutput agus sgrìobhaidh e gu faidhle e. Na feuch ri cleachdadh Tòiseachadh - Pròiseasoir tillidh e System.ComponentModel.Component agus chan e StandardOutput, agus -RedirectStandardOutput nì e do-dhèanta a dhol a-steach don consol, agus is e sin a tha sinn airson a sheachnadh.
Cuir air bhog argamaidean
Às deidh dha an aon phaidhir mhodan sin a chuir a-steach, mhothaich an t-ùghdar nach robh RAM gu leòr aig an fhrithealaiche cuideachd. Agus feumaidh seo na h-argamaidean tòiseachaidh atharrachadh. An àite a bhith gan atharrachadh a h-uile turas ann an start.bat, a bhios a h-uile duine a 'cleachdadh, dìreach cleachd an sgriobt seo.
Leis nach leugh Tee-Object StandardOutput ach nuair a chanar “Just Like This” ris an so-ghnìomhaiche, feumaidh tu sgriobt eile a dhèanamh. Thèid an sgriobt seo a chuir air bhog le Minecraft fhèin. Feuch an tòisich sinn leis na h-argamaidean.
Gus a dhol an sàs ann an leisg mu dheireadh san àm ri teachd, feumaidh an sgriobt argamaidean tòiseachaidh a chruinneachadh air an itealan. Gus seo a dhèanamh, leig leinn tòiseachadh le bhith a 'lorg an tionndadh as ùire A 'giùlan.
$forge = ((Get-ChildItem | Where-Object Name -Like "forge*").Name | Sort-Object -Descending) | Select-Object -last 1
A’ cleachdadh seòrsa-rud, gabhaidh sinn an-còmhnaidh an nì leis an àireamh as motha, ge bith cia mheud dhiubh a chuir thu ann. Leisg mu dheireadh.
A-nis feumaidh tu cuimhne a shònrachadh don fhrithealaiche. Gus seo a dhèanamh, gabh an àireamh de chuimhne siostam agus sgrìobh an àireamh ann an sreang.
$ram = ((Get-CimInstance Win32_PhysicalMemory | Measure-Object -Property capacity -Sum).sum /1gb)
$xmx = "-Xms" + $ram + "G"
Ath-thòiseachadh fèin-ghluasadach ceart
Tha an t-ùghdar air faidhlichean .bat fhaicinn bho dhaoine eile, ach cha tug iad aire don adhbhar a chaidh stad a chuir air an fhrithealaiche. Tha seo mì-ghoireasach, dè ma dh'fheumas tu dìreach am faidhle mod atharrachadh no rudeigin a sguabadh às?
A-nis leig leinn ath-thòiseachadh ceart a dhèanamh. Thàinig an t-ùghdar thairis air sgriobtaichean neònach roimhe a thòisich air an fhrithealaiche a-rithist ge bith carson a dhùin am frithealaiche. Cleachdaidh sinn còd fàgail. Bidh Java a’ cleachdadh 0 mar shoirbheachas, agus mar sin dannsaidh sinn às an seo.
An toiseach, cruthaichidh sinn gnìomh a nì ath-thòiseachadh air an fhrithealaiche ma dh'fhàilligeas e.
function Get-MinecraftExitCode {
do {
if ($global:Process.ExitCode -ne 0) {
Write-Log
Restart-Minecraft
}
else {
Write-Log
}
} until ($global:Process.ExitCode -eq 0)
}
Fuirichidh an sgriobt anns an lùb gus an dùin am frithealaiche sìos gu h-àbhaisteach bhon chonsail aige fhèin a’ cleachdadh an àithne / stad.
Ma cho-dhùnas sinn a h-uile càil a dhèanamh fèin-ghluasadach, bhiodh e math an ceann-latha tòiseachaidh, an ceann-latha crìochnachaidh, agus cuideachd an adhbhar airson a chrìochnachadh a chruinneachadh.
Gus seo a dhèanamh, bidh sinn a’ sgrìobhadh toradh Start-Process gu caochladair. Anns an sgriobt tha e coltach mar seo:
$global:Process = Start-Process -FilePath "C:Program Files (x86)common filesOracleJavajavapath_target_*java.exe" -ArgumentList "$xmx -server -jar $forge nogui" -Wait -NoNewWindow -PassThru
Agus an uairsin bidh sinn a 'sgrìobhadh nan toraidhean gu faidhle. Seo na tha air a thilleadh thugainn anns a’ chaochladair:
$global:Process.StartTime
$global:Process.ExitCode
$global:Process.ExitTime
Faodar seo uile a chur ri faidhle a’ cleachdadh Add-Content. Às deidh dhuinn a chìreadh beagan, gheibh sinn an sgriobt seo, agus canaidh sinn 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
A-nis cruthaichidh sinn sgriobt a chuireas air bhog inneal-làimhseachaidh.
Toiseach tòiseachaidh ceart
Tha an t-ùghdar ag iarraidh a bhith a 'ruith diofar dhreachan de Minecraft bho shlighe sam bith ann an aon mhodal, agus cuideachd a bhith comasach air logaichean a stòradh ann am pasgan sònraichte.
Is e an duilgheadas a th 'ann gum feum am pròiseas a bhith air a thòiseachadh le neach-cleachdaidh a tha air logadh a-steach don t-siostam. Faodar seo a dhèanamh tron desktop no WinRm. Ma ruitheas tu am frithealaiche mar neach-cleachdaidh siostam no eadhon rianadair, ach nach log thu a-steach, cha bhith Server.jar eadhon comasach air eula.txt a leughadh agus tòiseachadh.
Is urrainn dhuinn logadh a-steach fèin-ghluasadach a chomasachadh le bhith a’ cur trì inntrigidhean ris a’ chlà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 SilentlyContinue
Chan eil e sàbhailte. Tha an logadh a-steach agus am facal-faire air an comharrachadh an seo ann an teacsa shìmplidh, mar sin gus am frithealaiche a thòiseachadh feumaidh tu neach-cleachdaidh fa leth a chruthachadh aig a bheil cothrom aig ìre an neach-cleachdaidh, no ann am buidheann eadhon nas cumhainge. Chan eilear a’ moladh rianadair àbhaisteach a chleachdadh airson seo.
Rinn sinn rèiteachadh air an logadh a-steach fèin-ghluasadach. A-nis feumaidh tu gnìomh ùr a chlàradh airson an fhrithealaiche. Ruithidh sinn an àithne bho Powershell, agus mar sin seallaidh e 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 Highest
A 'cruinneachadh a' mhodail
A-nis leig dhuinn a h-uile càil a chuir ann am modalan a ghabhas cleachdadh nas fhaide air adhart. Tha an còd gu lèir airson sgriobtaichean deiseil an seo, cuir a-steach agus cleachd.
Faodaidh tu a h-uile dad a tha air a mhìneachadh gu h-àrd a chleachdadh air leth mura h-eil thu airson dragh a chuir air modalan.
Tòisich minecraft
An toiseach, cruthaichidh sinn modal nach dèan dad a bharrachd air a bhith a’ ruith sgriobt a dh’èisteas ri agus a chlàras toradh àbhaisteach.
Anns a 'bhloc paramadairean, tha e a' faighneachd dè am pasgan airson Minecraft a chuir air bhog agus càite an cuir thu an 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
Agus feumaidh tu Minecraft mar seo a chuir air bhog:
Start-Minecraft -Type Forge -LogFile "C:minecraftstdout.txt" -MinecraftPath "C:minecraft"
A-nis gluaisidh sinn air adhart chun an Handler.ps1 deiseil airson a chleachdadh
Gus an gabh an sgriobt againn ri paramadairean nuair a thèid an gairm, feumaidh sinn cuideachd bloc paramadair a shònrachadh. Thoir an aire, tha e a’ ruith Oracle Java, ma tha thu a’ cleachdadh cuairteachadh eadar-dhealaichte feumaidh tu an t-slighe atharrachadh chun fhaidhle so-ghnìomhaichte.
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àradh minecraft
Tha an sgriobt cha mhòr an aon rud ri Start-Minecraft, ach a-mhàin gu bheil e a’ clàradh gnìomh ùr. Gabh ris na h-aon argamaidean. Bidh an t-ainm-cleachdaiche, mura h-eil e air a shònrachadh, a’ gabhail an tè làithreach.
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
Clàr-Autologon
Anns a ’bhloc paramadairean, tha an sgriobt a’ gabhail ris na paramadairean Ainm-cleachdaidh agus Facal-faire. Mura deach an t-ainm-cleachdaiche a shònrachadh, thèid ainm a' chleachdaiche làithreach a chleachdadh.
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."
}
Tha ruith an sgriobt seo a’ coimhead mar seo:
Set-Autologon -Password "PlaintextPassword"
Mar a chleachdar tu
A-nis leig dhuinn sùil a thoirt air mar a tha an t-ùghdar fhèin a 'cleachdadh seo uile. Mar a chleachdas tu frithealaiche poblach Minecraft gu ceart air Windows. Feuch an tòisich sinn bhon fhìor thoiseach.
1. Cruthaich neach-cleachdaidh
$pass = Get-Credential
New-LocalUser -Name "MinecraftServer" -Password $pass.Password -AccountNeverExpires -PasswordNeverExpires -UserMayNotChangePassword
2. Clàraich an obair gus an sgriobt a ruith
Faodaidh tu clàradh a’ cleachdadh modal mar seo:
Register-Minecraft -Type Forge -LogFile "C:minecraftstdout.txt" -MinecraftPath "C:minecraft" -User "MInecraftServer" -TaskName "MinecraftStarter"
No cleachd innealan àbhaisteach:
$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. Dèan comas fèin-logadh a-steach agus ath-thòisich an inneal
Set-Autologon -Username "MinecraftServer" -Password "Qw3"
Crìochnachadh
Rinn an t-ùghdar an sgriobt, a 'gabhail a-steach dha fhèin, mar sin, bidh e toilichte èisteachd ris na molaidhean agad airson an sgriobt a leasachadh. Tha an t-ùghdar an dòchas gun robh a h-uile còd seo co-dhiù cho feumail dhut, agus gu robh an artaigil inntinneach.
Source: www.habr.com