ืกืงืจื™ืคื˜ ื”ืืชื—ื•ืœ ื”ืื™ื“ื™ืืœื™ ืฉืœ ืฉืจืช Minecraft

ืกืงืจื™ืคื˜ ื”ืืชื—ื•ืœ ื”ืื™ื“ื™ืืœื™ ืฉืœ ืฉืจืช Minecraft

ื”ืžื—ื‘ืจ ืžืื•ื“ ืื•ื”ื‘ ืืช ื”ืžืฉื—ืง, ื•ื”ื•ื ืขืฆืžื• ืžื ื”ืœ ืฉืจืช ืงื˜ืŸ "ืจืง ืœื—ื‘ืจื™ื". ื›ืžืงื•ื‘ืœ ื‘ืงืจื‘ ื—ื•ื‘ื‘ื™ื, ื”ื›ืœ ื‘ืฉืจืช ืžื•ื“ื“ื™ื, ื•ื–ื” ื’ื•ืจืจ ืื™ ื™ืฆื™ื‘ื•ืช ื•ื›ืชื•ืฆืื” ืžื›ืš ืงืจื™ืกื•ืช. ืžื›ื™ื•ื•ืŸ ืฉื”ืžื—ื‘ืจ ืฉืœ Powershell ื™ื•ื“ืข ื˜ื•ื‘ ื™ื•ืชืจ ืžื”ืžื™ืงื•ื ืฉืœ ื”ื—ื ื•ื™ื•ืช ื‘ืจื—ื•ื‘ ืฉืœื•, ื”ื•ื ื”ื—ืœื™ื˜ ืœืขืฉื•ืช "ื”ืชืกืจื™ื˜ ื”ื˜ื•ื‘ ื‘ื™ื•ืชืจ ืœื”ืฉื™ืง ืืช Minecraft 2020" ืื•ืชื• ืกืงืจื™ืคื˜ ืฉื™ืžืฉ ื›ื‘ืกื™ืก ืœืชื‘ื ื™ืช ื‘ Ruvds marketplace. ืื‘ืœ ื›ืœ ื”ืžืงื•ืจื•ืช ื›ื‘ืจ ื ืžืฆืื™ื ื‘ื›ืชื‘ื”. ืขื›ืฉื™ื•, ืœืคื™ ื”ืกื“ืจ, ืื™ืš ื”ื›ืœ ื ืขืฉื”.

ื”ืคืงื•ื“ื•ืช ืฉืื ื—ื ื• ืฆืจื™ื›ื™ื

ืจื™ืฉื•ื ื—ืœื•ืคื™

ื™ื•ื ืื—ื“, ืœืื—ืจ ื”ืชืงื ืช ืขื•ื“ ื›ืžื” ืื•ืคื ื™ื, ื’ื™ืœื™ืชื™ ืฉื”ืฉืจืช, ื›ื›ืœ ื”ื ืจืื”, ืงื•ืจืก ืžื‘ืœื™ ืœื”ื›ืจื™ื– ืžืœื—ืžื”. ื”ืฉืจืช ืœื ื›ืชื‘ ืฉื’ื™ืื•ืช ื‘- latest.log ืื• ื‘-debug, ื•ื”ืงื•ื ืกื•ืœื”, ืฉื‘ืชื™ืื•ืจื™ื” ื”ื™ื™ืชื” ืฆืจื™ื›ื” ืœื›ืชื•ื‘ ืืช ื”ืฉื’ื™ืื” ื”ื–ื• ื•ืœื”ืคืกื™ืง, ื ืกื’ืจื”.

ืื ื”ื•ื ืœื ืจื•ืฆื” ืœื›ืชื•ื‘, ื”ื•ื ืœื ืฆืจื™ืš. ื™ืฉ ืœื ื• Powershell ืขื cmdlet ื˜ื™-ืื•ื‘ื™ื™ืงื˜, ืฉืœื•ืงื— ืื•ื‘ื™ื™ืงื˜ ื•ืžื•ืฆื™ื ืื•ืชื• ืœืงื•ื‘ืฅ ื•ืœืงื•ื ืกื•ืœื” ื‘ื• ื–ืžื ื™ืช.

.handler.ps1 | Tee-Object .StandardOutput.txt -Append

ื‘ื“ืจืš ื–ื•, Powershell ืชืืกื•ืฃ ืืช StandardOutput ื•ืชื›ืชื•ื‘ ืื•ืชื• ืœืงื•ื‘ืฅ. ืืœ ืชื ืกื” ืœื”ืฉืชืžืฉ ื”ืชื—ืœ-ืชื”ืœื™ืšื›ื™ ื–ื” ื™ื—ื–ื™ืจ ืืช System.ComponentModel.Component ื•ืœื StandardOutput, ื•-RedirectStandardOutput ืœื ื™ืืคืฉืจ ืœื”ื™ื›ื ืก ืœืงื•ื ืกื•ืœื”, ื•ื–ื” ืžื” ืฉืื ื—ื ื• ืจื•ืฆื™ื ืœื”ื™ืžื ืข.

ื”ืคืขืœ ื˜ื™ืขื•ื ื™ื

ืœืื—ืจ ื”ืชืงื ืช ืื•ืชื• ื–ื•ื’ ืื•ืคื ื™ื, ื”ืžื—ื‘ืจ ืฉื ืœื‘ ืฉื’ื ืœืฉืจืช ืื™ืŸ ืžืกืคื™ืง ื–ื™ื›ืจื•ืŸ RAM. ื•ื–ื” ืžื—ื™ื™ื‘ ืœืฉื ื•ืช ืืช ื˜ื™ืขื•ื ื™ ื”ื”ืฉืงื”. ื‘ืžืงื•ื ืœืฉื ื•ืช ืื•ืชื ื‘ื›ืœ ืคืขื ื‘-start.bat, ืฉื›ื•ืœื ืžืฉืชืžืฉื™ื ื‘ื•, ืคืฉื•ื˜ ื”ืฉืชืžืฉ ื‘ืกืงืจื™ืคื˜ ื”ื–ื”.

ืžื›ื™ื•ื•ืŸ ืฉ-Tee-Object ืงื•ืจื StandardOutput ืจืง ื›ืืฉืจ ืงื•ื‘ืฅ ื”ื”ืคืขืœื” ื ืงืจื "Just Like This", ืชืฆื˜ืจืš ืœื™ืฆื•ืจ ืกืงืจื™ืคื˜ ืื—ืจ. ืกืงืจื™ืคื˜ ื–ื” ื™ื•ืฉืง ืขืœ ื™ื“ื™ Minecraft ืขืฆืžื”. ื ืชื—ื™ืœ ืขื ื”ื˜ื™ืขื•ื ื™ื.

ื›ื“ื™ ืœื”ืชืžื›ืจ ืœืขืฆืœื ื•ืช ืื•ืœื˜ื™ืžื˜ื™ื‘ื™ืช ื‘ืขืชื™ื“, ืขืœ ื”ืชืกืจื™ื˜ ืœืืกื•ืฃ ื˜ื™ืขื•ื ื™ ื”ืฉืงื” ืชื•ืš ื›ื“ื™ ืชื ื•ืขื”. ืœืฉื ื›ืš, ื ืชื—ื™ืœ ื‘ื—ื™ืคื•ืฉ ืื—ืจ ื”ื’ืจืกื” ื”ืขื“ื›ื ื™ืช ื‘ื™ื•ืชืจ ืœื—ืฉืœ.

$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 ืžืื ืฉื™ื ืื—ืจื™ื, ืืš ื”ื ืœื ืœืงื—ื• ื‘ื—ืฉื‘ื•ืŸ ืืช ื”ืกื™ื‘ื” ืฉื‘ื’ืœืœื” ื”ืฉืจืช ื”ื•ืคืกืง. ื–ื” ืœื ื ื•ื—, ืžื” ืื ืืชื” ืจืง ืฆืจื™ืš ืœืฉื ื•ืช ืืช ืงื•ื‘ืฅ ื”ืžื•ื“ ืื• ืœืžื—ื•ืง ืžืฉื”ื•?
ืขื›ืฉื™ื• ื‘ื•ืื• ื ืขืฉื” ื”ืคืขืœื” ืžื—ื“ืฉ ื›ืžื• ืฉืฆืจื™ืš. ื”ืžื—ื‘ืจ ื ืชืงืœ ื‘ืขื‘ืจ ื‘ืกืงืจื™ืคื˜ื™ื ืžื•ื–ืจื™ื ืฉื”ืคืขื™ืœื• ืžื—ื“ืฉ ืืช ื”ืฉืจืช ืœืœื ืงืฉืจ ืœืžื” ื”ืฉืจืช ื ื›ื‘ื”. ื ืฉืชืžืฉ ื‘ืงื•ื“ ื™ืฆื™ืื”. 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

ืืช ื›ืœ ื–ื” ื ื™ืชืŸ ืœื”ื•ืกื™ืฃ ืœืงื•ื‘ืฅ ื‘ืืžืฆืขื•ืช Add-Content. ืœืื—ืจ ืฉืกืจื ื• ืื•ืชื• ืžืขื˜, ืื ื• ืžืงื‘ืœื™ื ืืช ื”ืชืกืจื™ื˜ ื”ื–ื”, ื•ื‘ื•ืื• ื ืงืจื ืœื• 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

ื”ืจืฉืžื”-ืื•ื˜ื•ืœื•ื’ื•ืŸ

ื‘ื‘ืœื•ืง ื”ืคืจืžื˜ืจื™ื, ื”ืกืงืจื™ืคื˜ ืžืงื‘ืœ ืืช ื”ืคืจืžื˜ืจื™ื ืฉื ืžืฉืชืžืฉ ื•ืกื™ืกืžื”. ืื ืœื ืฆื•ื™ืŸ ืฉื ืžืฉืชืžืฉ, ื ืขืฉื” ืฉื™ืžื•ืฉ ื‘ืฉื ื”ืžืฉืชืžืฉ ื”ื ื•ื›ื—ื™.

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"

ื”ืฉืœืžื”

ื”ืžื—ื‘ืจ ื”ื›ื™ืŸ ืืช ื”ืชืกืจื™ื˜, ื›ื•ืœืœ ืœืขืฆืžื•, ืœื›ืŸ ื”ื•ื ื™ืฉืžื— ืœื”ืงืฉื™ื‘ ืœื”ืฆืขื•ืช ืฉืœื›ื ืœืฉื™ืคื•ืจ ื”ืชืกืจื™ื˜. ื”ืžื—ื‘ืจ ืžืงื•ื•ื” ืฉื›ืœ ื”ืงื•ื“ ื”ื–ื” ื”ื™ื” ืžื•ืขื™ืœ ืœืš ืœืคื—ื•ืช ื‘ืื•ืคืŸ ืžื™ื ื™ืžืœื™, ื•ืฉื”ืžืืžืจ ื”ื™ื” ืžืขื ื™ื™ืŸ.

ืกืงืจื™ืคื˜ ื”ืืชื—ื•ืœ ื”ืื™ื“ื™ืืœื™ ืฉืœ ืฉืจืช Minecraft

ืžืงื•ืจ: www.habr.com

ื”ื•ืกืคืช ืชื’ื•ื‘ื”