α’ααααα·αααααααα‘αΆααα αααααααααααΆααααΆαα α αΎααααα½αααΆααααααΆααααΊααΆα’αααααααααααααααααΆαααΈαααααΌα
αα½α "αααααΆαααα·αααααααα·αα»αααααΆα"α ααΌα
ααααααΆαααα»αα
ααααα’ααααααααααα
α·ααα α’αααΈαααΆααα’αααα
ααΎαααΆαααΈαααααααΌαααΆααααααα α αΎααααααΆαα±ααααΆαα’αααα·αααΆα α αΎαααΆαααααα ααΆααα αααααΆαα’ααααα·αααα Powershell ααΉαα
αααΆααααΆαααΈααΆααα αΆααα
ααΆαααααΌαααααααΆαα ααΆααααΆααααααα
α
α·ααααααααΎα "ααααααΈαααα’αααα»αααΎααααΈααΎαααααΎαααΆα Minecraft 2020" ααααααΈαααΌα
ααααΆααΆααααααΎααΆααΌαααααΆααααααΆααααααΌαα
αααα»α
ααΆααααααααΆαααααΎαααααΌαααΆα
ααΆαααΆααααΎαααα½α
αααααα½α αααααΆααααΈααα‘αΎα mods ααΈαααΈααα αααα»αααΆαααααΎαααΆ ααΆααααααα server αααα»αααΆααααααα·ααααααΆααααααααΆαα αααΆαααΈααααα·αααΆααααααααα α»ααα αααα»α latest.log α¬αα αααα»αααΆαααααΆααααα α»ααα α αΎααα»αααΌααααααΆαααααΉααααΈαα½ααααααααααα α»ααααα αΎαααΆαααααααααααΌαααΆααα·αα
ααααα·αααΎααΆαααα·αα ααααααα ααΆαααα·αα αΆαααΆα αααα ααΎαααΆα Powershell ααΆαα½α cmdlet Tee-ααααα»αααααααααα»αα½α α αΎααααα ααααΆαα α―αααΆα αα·ααα αα»αααΌααααα»αααααααα½αα
.handler.ps1 | Tee-Object .StandardOutput.txt -Append
αα·ααΈααα Powershell ααΉααα StandardOutput α αΎααααααααΆαα αααα»αα―αααΆαα αα»αααααΆααΆαααααΎ ααααΎαααΆαα αΆααααααΎααααααΆαααααΆααΉααααα‘αα System.ComponentModel.Component α αΎααα·ααααααΆ StandardOutput α αΎα -RedirectStandardOutput ααΉαααααΎα±ααααΆαα·αα’αΆα α αΌααα αααα»ααα»αααΌαααΆααα αααααΆα’αααΈαααααΎαα αααααααΆαα
α αΆααααααΎαα’αΆαα»ααααα
αααααΆααααΈααα‘αΎα mods ααΌα ααααΆααα α’ααααα·ααααααΆαααααααααΆααααΎαααΆ server αααα·αααΆα RAM αααααααααΆαααααα α αΎαααααααααΌαα±ααααΆαααΆαααααΆααααααΌαα’αΆαα»αααααα αΆααααααΎαα αααα½αα±ααααΆαααααΆααααααΌααα½αααΆααΆααααααα αααα»α start.bat αααααα»ααααααααααααΆααααΎ ααααΆααααααααΎααααααΈααααα
αααααΆα Tee-Object α’αΆααα StandardOutput αα ααααααα’αΆα ααααα·ααααα·ααΆαααααΌαααΆαααα α ααΆ "Just Like This" α’αααααΉαααααΌααααααΎαααααααΈααα½αααααααααα ααααααΈααααααΉαααααΌαα αΆααααααΎαααα Minecraft αααα½αα―αα α αΌαα αΆααααααΎαααΆαα½αα’αΆαα»αααααα
ααΎααααΈααα½αααααΆααααα·ααααα»αααΆαααα’ααΆαα ααααααΈαααααΌααααααααΌαα’αΆαα»αααααα αΆααααααΎαααααΆααα ααΎααααΈααααΎααΌα αααααΌαα αΆααααααΎαααααααααααααααα α»αααααααααα»αα forge.
$forge = ((Get-ChildItem | Where-Object Name -Like "forge*").Name | Sort-Object -Descending) | Select-Object -last 1
αααααααΎ sort-object ααΎαααΉαααααααα»αααααΆαα ααα½αα αααΎαααΆαααααΆαα·α αα αα·αααΆα’αααααΆααα ααα½αααα»ααααΆααααααα ααΆααααα·αα ααα’αΌααααα»αα
α₯α‘αΌαα’αααααααΌααααααα’αααα αα αΆααα αααΆαααΈαααα ααΎααααΈααααΎααΌα αααααααα·ααΆαααα’αααα αα αΆαααααααααα αΎααααααα ααα½αααααααΆαα αααα»αααααα’ααααα
$ram = ((Get-CimInstance Win32_PhysicalMemory | Measure-Object -Property capacity -Sum).sum /1gb)
$xmx = "-Xms" + $ram + "G"
αααααααΌαααΆαα αΆααααααΎαα‘αΎααα·ααααααααααααααααα·
α’ααααα·ααααααΆαααΎαα―αααΆα .bat ααΈα’αααααα ααα»αααααα½ααααα·αααΆααα·αααΈααΌαα ααα»ααααααΆαααΈαααααααΌαααΆααααααααααααα αααααΊααΆααΆααα’αΆαααα’α½αααΎααααΎααΌα
ααααα
ααααα·αααΎα’αααααααΆααααααααΌαααΆαααααΆααααααΌαα―αααΆα mod α¬αα»αα’αααΈαα½α?
α₯α‘αΌαααα α
αΌαααΎαα
αΆααααααΎαα‘αΎααα·αα±ααααΆαααααΉαααααΌαα α’ααααα·ααααααΈαα»αααΆαααααααΆααααααααΈαα
ααααααααα
αΆααααααΎααααΆαααΈαααα‘αΎααα·αααααα·ααα·αααΈααΌαα ααα»ααααααΆαααΈααααα·αα ααΎαααΉαααααΎαααααΌαα
ααα Java ααααΎ 0 ααΆαααααα ααΌα
ααααααΎαααΉαααΆαααΈααΈαααα
ααΆααααΌα ααΎααααααΎααα»αααΆααααααΉαα αΆααααααΎααααΆαααΈαααα‘αΎααα·αααααα·αααΎααΆαααΆαααα
function Get-MinecraftExitCode {
do {
if ($global:Process.ExitCode -ne 0) {
Write-Log
Restart-Minecraft
}
else {
Write-Log
}
} until ($global:Process.ExitCode -eq 0)
}
ααααααΈαααΉααα ααααΆααα αααα»αααααα·ααα»ααα αΌαααααααΆαααΈααααα·αααΆααααααΆααΈαα»αααΌαααααΆαααααα½αααααααΆαααααααΎααΆααααααααΆ /stop α
ααααα·αααΎααΎααααααα α α·αααααααΎα’αααΈαααααααααΆααααααααααααααααα· αααααΆααΆααΆαααα’αααα»αααΆααααααΌαααΆαααα·α ααααα αΆααααααΎα ααΆαααα·α αααααααα αα αα·αα ααα»αααααααΆααααΆααααα αααααααα
ααΎααααΈααααΎααΌα αααααΎαααααααααααααα Start-Process αα ααΆα’αααα αα αααα»αααααααΈαααΆααΎααα ααΌα ααα:
$global:Process = Start-Process -FilePath "C:Program Files (x86)common filesOracleJavajavapath_target_*java.exe" -ArgumentList "$xmx -server -jar $forge nogui" -Wait -NoNewWindow -PassThru
α αΎααααααΆααααααΎαααααααααααααα α―αααΆαα αααβααΊβααΆβα’αααΈβαααβααααΌαβααΆαβαααα‘ααβααβααΎαβαααα»αβα’αααβ:
$global:Process.StartTime
$global:Process.ExitCode
$global:Process.ExitTime
ααΆααα’αααααα’αΆα ααααΌαααΆααααααααα α―αααΆααααααααΎααααααααΆαα·ααΆα αααααΆααα·αααΆααααα·α ααΎαααα½αααΆαααααααΈαααα α αΎαα α ααΆααΆ 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
α₯α‘αΌαβαααβααΎαβαααααΎαβααααααΈαβαααβααΎαβααααΎαααΆαβα’αααβαααααααΆαα
ααΆαα αΆααααααΎαααααΉαααααΌαα
α’ααααα·ααααα ααααααΎαααΆααααααααααααααΆαα Minecraft ααΈααααΌαααΆαα½ααα αααα»ααααΌαα»ααα½α α αΎαααα’αΆα αααααΆαα»ααααααα ααα»αα αααα»αααααΆααααΆαααα½αα
αααα αΆααΊααΆααααΎαααΆαααααΌαααααααΌαααΆαα αΆααααααΎααααα’αααααααΎααααΆαααααααααΌαααΆαα αΌααα αααα»αααααααααα αααα’αΆα ααααΌαααΆαααααΎααΆαααααα»αααααΌαααααΎαα» α¬ WinRm α ααααα·αααΎα’αααααααΎαααΆααααΆαααΈαααααΆα’αααααααΎααααΆαααααααααα α¬ααΌααααΈααα’αααααααααααα ααα»αααααα·αααΆαα αΌαααααα Server.jar ααΉααα·αα’αΆα α’αΆα eula.txt αα·αα αΆααααααΎαααΆαααα
ααΎαα’αΆα ααΎαααΆαα αΌααααααααααααααααα·αααααααααααΆαα»ααΈαα αααααΈαααααα
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
ααΆαα·αααΆααα»ααααα·ααΆαααα ααΆαα αΌα αα·αααΆααααααααΆααααααΌαααΆαα ααα’α»ααααα αΆααα ααΈααααααα»αα’αααααααααααΆ ααΌα ααααααΎααααΈα αΆααααααΎααααΆαααΈααα α’αααααααΌααααααΎαα’αααααααΎααααΆααααΆα ααααα‘αααααααΆααα·αααα·α αΌαααααΎαα ααααα·αα’αααααααΎααααΆαα α¬αααα»ααααα»αααΌα α ααα’ααα ααΆαα·αααααΌαααΆαααααΆααααΆαααΉαααΉαα±ααααααΎα’αααααααααααααααααααΆααααααΆααααΏααααααα
ααΎαααΆαααααααα ααααΆαα αΌααααααααααααααααα·α α₯α‘αΌαα’αααααααΌαα α»ααααααααΆααα·α αα ααααΈαααααΆαααααΆαααΈαααα ααΎαααΉαααααΎαααΆαααΆααααααααΆααΈ Powershell ααΌα ααααααΆααΉαααΎααα ααΌα αααα
$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
ααΆααααααΌααααα»ααααΌαα»α
α₯α‘αΌαβααΎαβααΆααβα’αααΈβαααααβαααΆαβαα βαααα»αβαααΌαα»αβαααβα’αΆα βααααΎβαααβαααααα ααΌαααΆααα’αααααααΆααααααααΈααααααααααα½α ααΆααααα ααΊαα ααΈααα ααΆαα αΌα αα·αααααΎααααΆααα
α’αααα’αΆα ααααΎα’αααΈααααααααΆααααααΆααα·αααααΆααΆαααΎααΆα ααααα‘αα ααααα·αααΎα’ααααα·αα ααααααΆαααΆαα½ααααΌαα»αα
α αΆααααααΎα - Minecraft
ααααΌα ααΎααααααΎααααΌαα»ααααααΉαααααΎα’αααΈαααα ααΈααααΎαααΆαααααααΈααααααΉαααααΆαα αα·ααααααααΆαααααααααααααΆαα
αα αααα»ααααα»ααααΆαααΆαααααα ααΆαααα½αααΈααααΆαααααααΌαααΎαααααΎαααΆα Minecraft αα·ααααααααααααααΌαααΆαααααααα ααα»α
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
α αΎαα’αααααΉαααααΌαααΎαααααΎαααΆα Minecraft ααΌα αααα
Start-Minecraft -Type Forge -LogFile "C:minecraftstdout.txt" -MinecraftPath "C:minecraft"
α₯α‘αΌαααα ααΌααααααα ααΆαα Handler.ps1 αααααααααα½α ααΆααααα ααΎααααΈααααΎ
ααΎααααΈα±ααααααααΈαααααααΎαααα½ααααααΆαααΆαααααααα αααα α ααΎαααααααΌααααααΆαααααα»ααααΆαααΆαααααααααααα ααΌαα αααΆα ααΆααααΎαααΆα Oracle Java ααααα·αααΎα’ααααααα»αααααΎααΆαα ααα αΆαααααα α’αααααΉαααααΌαααααΆααααααΌαααααΌααα ααΆααα―αααΆααααα’αΆα ααααα·ααααα·ααΆαα
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
α α»αααααα - Minecraft
ααααααΈαααΊα’αα»ααααααΌα ααααΆααΉα Start-Minecraft ααα ααΎααααααααΆα α»αααααααα·α αα ααΆαααααΈααα»αααααα ααα½αααα’αααα’αααΆαααΌα ααααΆα αααααβα’αααβααααΎ ααΎβαα·αβααΆαβαααααΆααβαα ααβαααααβαα αα α»ααααααα
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
α α»αααααα - Autologon
αα αααα»ααααα»ααααΆαααΆαααααα ααααααΈαααα½ααααααΆαααΆαααααααααααα’αααααααΎ αα·αααΆααααααααΆααα ααααα·αααΎβαααααβα’αααβααααΎβαα·αβααααΌαβααΆαβαααααΆααβαα αααααβα’αααβααααΎβαα αα α»ααααααβααααΌαβααΆαβααααΎα
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."
}
ααΆαααααΎαααΆαααααααΈααααααΎααα ααΌα αααα
Set-Autologon -Password "PlaintextPassword"
ααααααααΎ
α₯α‘αΌααααααΌαααΎαααΈαααααααα’ααααα·αααααααα½αα―αααααΎααΆααα’αααααα ααααααΆαααααααΆααααΆαααΈααα Minecraft ααΆααΆααααα ααΎ Windows α±ααααΆαααααΉαααααΌαα α αΌαα αΆααααααΎαααΈααααΌαα
1. αααααΎαα’αααααααΎααααΆαα
$pass = Get-Credential
New-LocalUser -Name "MinecraftServer" -Password $pass.Password -AccountNeverExpires -PasswordNeverExpires -UserMayNotChangePassword
2. α α»αααααααα·α αα ααΆαααΎααααΈααααΎαααΆαααααααΈα
α’αααα’αΆα α α»αααααααααααααΎαααΌαα»αααΌα αααα
Register-Minecraft -Type Forge -LogFile "C:minecraftstdout.txt" -MinecraftPath "C:minecraft" -User "MInecraftServer" -TaskName "MinecraftStarter"
α¬ααααΎα§ααααααααααααΆαα
$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. ααΎαααΆαα αΌααααααααααααααααα· α αΎαα αΆααααααΎααααΆαααΈαα‘αΎααα·α
Set-Autologon -Username "MinecraftServer" -Password "Qw3"
ααΆααααα αα
α’ααααα·ααααααΆααααααΎαααααααΈα αα½αααΆαααααααΆαααααα½αααΆααααααα ααΌα ααααααΆααααΉαααΈαααΆααααα»αααΆαααααΆααααΆαααααααααααααααα’ααααααααΆααααΆααααααα’ααααααΈαα α’αααβαα·ααααβαααααΉαβααΆβααΌαβααΆααβα’ααβαααβαααΆαβα αα βααΆααβααΆαβααααααααβαα·α βαα½α βαααααΆααβα’ααα α αΎαβααΆβα’αααααβαα½αβα±ααβα αΆααβα’αΆααααααα
ααααα: www.habr.com