ಪರಿಪೂರ್ಣ Minecraft ಸರ್ವರ್ ಆರಂಭಿಕ ಸ್ಕ್ರಿಪ್ಟ್

ಪರಿಪೂರ್ಣ Minecraft ಸರ್ವರ್ ಆರಂಭಿಕ ಸ್ಕ್ರಿಪ್ಟ್

ಲೇಖಕನು ಆಟವನ್ನು ತುಂಬಾ ಪ್ರೀತಿಸುತ್ತಾನೆ, ಮತ್ತು ಅವನು ಸ್ವತಃ "ಸಂಪೂರ್ಣವಾಗಿ ಸ್ನೇಹಿತರಿಗಾಗಿ" ಸಣ್ಣ ಸರ್ವರ್‌ನ ನಿರ್ವಾಹಕನಾಗಿದ್ದಾನೆ. ಹವ್ಯಾಸಿಗಳಲ್ಲಿ ಎಂದಿನಂತೆ, ಸರ್ವರ್‌ನಲ್ಲಿರುವ ಎಲ್ಲವನ್ನೂ ಮಾಡ್ ಮಾಡಲಾಗಿದೆ, ಮತ್ತು ಇದು ಅಸ್ಥಿರತೆಯನ್ನು ಉಂಟುಮಾಡುತ್ತದೆ ಮತ್ತು ಪರಿಣಾಮವಾಗಿ, ಕ್ರ್ಯಾಶ್ ಆಗುತ್ತದೆ. ಪವರ್‌ಶೆಲ್‌ನ ಲೇಖಕರು ತಮ್ಮ ಬೀದಿಯಲ್ಲಿರುವ ಅಂಗಡಿಗಳ ಸ್ಥಳಕ್ಕಿಂತ ಉತ್ತಮವಾಗಿ ತಿಳಿದಿರುವ ಕಾರಣ, ಅವರು ಮಾಡಲು ನಿರ್ಧರಿಸಿದರು "Minecraft 2020 ಅನ್ನು ಪ್ರಾರಂಭಿಸಲು ಅತ್ಯುತ್ತಮ ಸ್ಕ್ರಿಪ್ಟ್" ಟೆಂಪ್ಲೇಟ್‌ಗೆ ಅದೇ ಸ್ಕ್ರಿಪ್ಟ್ ಆಧಾರವಾಗಿ ಕಾರ್ಯನಿರ್ವಹಿಸುತ್ತದೆ ರುವ್ಡ್ಸ್ ಮಾರುಕಟ್ಟೆ. ಆದರೆ ಎಲ್ಲಾ ಮೂಲಗಳು ಈಗಾಗಲೇ ಲೇಖನದಲ್ಲಿವೆ. ಈಗ, ಕ್ರಮದಲ್ಲಿ, ಎಲ್ಲವನ್ನೂ ಹೇಗೆ ಮಾಡಲಾಯಿತು.

ನಮಗೆ ಅಗತ್ಯವಿರುವ ಆಜ್ಞೆಗಳು

ಪರ್ಯಾಯ ಲಾಗಿಂಗ್

ಒಂದು ದಿನ, ಒಂದೆರಡು ಮೋಡ್‌ಗಳನ್ನು ಸ್ಥಾಪಿಸಿದ ನಂತರ, ಸರ್ವರ್ ಯುದ್ಧವನ್ನು ಘೋಷಿಸದೆ ಕ್ರ್ಯಾಶ್ ಆಗುತ್ತಿದೆ ಎಂದು ನಾನು ಕಂಡುಹಿಡಿದಿದ್ದೇನೆ. ಸರ್ವರ್ latest.log ಅಥವಾ ಡೀಬಗ್‌ನಲ್ಲಿ ದೋಷಗಳನ್ನು ಬರೆಯಲಿಲ್ಲ ಮತ್ತು ಸಿದ್ಧಾಂತದಲ್ಲಿ ಈ ದೋಷವನ್ನು ಬರೆದು ನಿಲ್ಲಿಸಬೇಕಾದ ಕನ್ಸೋಲ್ ಅನ್ನು ಮುಚ್ಚಲಾಗಿದೆ.

ಅವನು ಬರೆಯಲು ಬಯಸದಿದ್ದರೆ, ಅವನಿಗೆ ಅಗತ್ಯವಿಲ್ಲ. ನಾವು ಪವರ್‌ಶೆಲ್ ಅನ್ನು cmdlet ನೊಂದಿಗೆ ಹೊಂದಿದ್ದೇವೆ ಟೀ-ಆಬ್ಜೆಕ್ಟ್, ಇದು ವಸ್ತುವನ್ನು ತೆಗೆದುಕೊಂಡು ಅದನ್ನು ಫೈಲ್‌ಗೆ ಮತ್ತು ಕನ್ಸೋಲ್‌ಗೆ ಅದೇ ಸಮಯದಲ್ಲಿ ಔಟ್‌ಪುಟ್ ಮಾಡುತ್ತದೆ.

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

ಈ ರೀತಿಯಲ್ಲಿ, ಪವರ್‌ಶೆಲ್ ಸ್ಟ್ಯಾಂಡರ್ಡ್ ಔಟ್‌ಪುಟ್ ಅನ್ನು ಎತ್ತಿಕೊಂಡು ಅದನ್ನು ಫೈಲ್‌ಗೆ ಬರೆಯುತ್ತದೆ. ಬಳಸಲು ಪ್ರಯತ್ನಿಸಬೇಡಿ ಪ್ರಾರಂಭ-ಪ್ರಕ್ರಿಯೆಏಕೆಂದರೆ ಇದು System.ComponentModel.Component ಅನ್ನು ಹಿಂತಿರುಗಿಸುತ್ತದೆ ಮತ್ತು ಸ್ಟ್ಯಾಂಡರ್ಡ್ ಔಟ್‌ಪುಟ್ ಅಲ್ಲ, ಮತ್ತು -RedirectStandardOutput ಕನ್ಸೋಲ್‌ಗೆ ಪ್ರವೇಶಿಸಲು ಅಸಾಧ್ಯವಾಗಿಸುತ್ತದೆ, ಇದನ್ನು ನಾವು ತಪ್ಪಿಸಲು ಬಯಸುತ್ತೇವೆ.

ವಾದಗಳನ್ನು ಪ್ರಾರಂಭಿಸಿ

ಅದೇ ಜೋಡಿ ಮೋಡ್‌ಗಳನ್ನು ಸ್ಥಾಪಿಸಿದ ನಂತರ, ಸರ್ವರ್‌ನಲ್ಲಿ ಸಾಕಷ್ಟು RAM ಇಲ್ಲ ಎಂದು ಲೇಖಕರು ಗಮನಿಸಿದರು. ಮತ್ತು ಇದಕ್ಕೆ ಲಾಂಚ್ ಆರ್ಗ್ಯುಮೆಂಟ್‌ಗಳನ್ನು ಬದಲಾಯಿಸುವ ಅಗತ್ಯವಿದೆ. ಎಲ್ಲರೂ ಬಳಸುವ start.bat ನಲ್ಲಿ ಪ್ರತಿ ಬಾರಿಯೂ ಅವುಗಳನ್ನು ಬದಲಾಯಿಸುವ ಬದಲು ಈ ಸ್ಕ್ರಿಪ್ಟ್ ಬಳಸಿ.

ಟೀ-ಆಬ್ಜೆಕ್ಟ್ ಕೇವಲ ಸ್ಟ್ಯಾಂಡರ್ಡ್ ಔಟ್‌ಪುಟ್ ಅನ್ನು ಓದುವುದರಿಂದ ಕಾರ್ಯಗತಗೊಳಿಸಬಹುದಾದ "ಈ ರೀತಿ" ಎಂದು ಕರೆಯಲ್ಪಟ್ಟಾಗ, ನೀವು ಇನ್ನೊಂದು ಸ್ಕ್ರಿಪ್ಟ್ ಅನ್ನು ರಚಿಸಬೇಕಾಗುತ್ತದೆ. ಈ ಸ್ಕ್ರಿಪ್ಟ್ ಅನ್ನು Minecraft ಮೂಲಕ ಪ್ರಾರಂಭಿಸಲಾಗುವುದು. ವಾದಗಳೊಂದಿಗೆ ಪ್ರಾರಂಭಿಸೋಣ.

ಭವಿಷ್ಯದಲ್ಲಿ ಅಂತಿಮ ಸೋಮಾರಿತನದಲ್ಲಿ ಪಾಲ್ಗೊಳ್ಳಲು, ಸ್ಕ್ರಿಪ್ಟ್ ಹಾರಾಡುತ್ತ ಲಾಂಚ್ ಆರ್ಗ್ಯುಮೆಂಟ್ಗಳನ್ನು ಸಂಗ್ರಹಿಸಬೇಕು. ಇದನ್ನು ಮಾಡಲು, ಇತ್ತೀಚಿನ ಆವೃತ್ತಿಯನ್ನು ಹುಡುಕುವ ಮೂಲಕ ಪ್ರಾರಂಭಿಸೋಣ ಫೋರ್ಜ್.

$forge = ((Get-ChildItem | Where-Object Name -Like "forge*").Name | Sort-Object -Descending) | Select-Object -last 1

ವಿಂಗಡಣೆ-ವಸ್ತುವನ್ನು ಬಳಸಿ, ನಾವು ಯಾವಾಗಲೂ ಹೆಚ್ಚಿನ ಸಂಖ್ಯೆಯ ವಸ್ತುವನ್ನು ತೆಗೆದುಕೊಳ್ಳುತ್ತೇವೆ, ಅವುಗಳಲ್ಲಿ ನೀವು ಎಷ್ಟು ಇರಿಸಿದರೂ ಪರವಾಗಿಲ್ಲ. ಅಂತಿಮ ಸೋಮಾರಿತನ.

ಈಗ ನೀವು ಸರ್ವರ್‌ಗೆ ಮೆಮೊರಿಯನ್ನು ನಿಯೋಜಿಸಬೇಕಾಗಿದೆ. ಇದನ್ನು ಮಾಡಲು, ಸಿಸ್ಟಮ್ ಮೆಮೊರಿಯ ಪ್ರಮಾಣವನ್ನು ತೆಗೆದುಕೊಳ್ಳಿ ಮತ್ತು ಅದರ ಪ್ರಮಾಣವನ್ನು ಸ್ಟ್ರಿಂಗ್ನಲ್ಲಿ ಬರೆಯಿರಿ.

$ram = ((Get-CimInstance Win32_PhysicalMemory | Measure-Object -Property capacity -Sum).sum /1gb)
$xmx = "-Xms" + $ram + "G"

ಸ್ವಯಂಚಾಲಿತ ಮರುಪ್ರಾರಂಭವನ್ನು ಸರಿಪಡಿಸಿ

ಲೇಖಕರು ಇತರ ಜನರಿಂದ .bat ಫೈಲ್‌ಗಳನ್ನು ನೋಡಿದ್ದಾರೆ, ಆದರೆ ಸರ್ವರ್ ಅನ್ನು ನಿಲ್ಲಿಸಿದ ಕಾರಣವನ್ನು ಅವರು ಗಣನೆಗೆ ತೆಗೆದುಕೊಂಡಿಲ್ಲ. ಇದು ಅನಾನುಕೂಲವಾಗಿದೆ, ನೀವು ಮಾಡ್ ಫೈಲ್ ಅನ್ನು ಬದಲಾಯಿಸಬೇಕಾದರೆ ಅಥವಾ ಏನನ್ನಾದರೂ ಅಳಿಸಬೇಕಾದರೆ ಏನು ಮಾಡಬೇಕು?
ಈಗ ಸರಿಯಾದ ಪುನರಾರಂಭವನ್ನು ಮಾಡೋಣ. ಲೇಖಕರು ಈ ಹಿಂದೆ ವಿಚಿತ್ರ ಸ್ಕ್ರಿಪ್ಟ್‌ಗಳನ್ನು ನೋಡಿದ್ದಾರೆ, ಅದು ಸರ್ವರ್ ಅನ್ನು ಏಕೆ ಸ್ಥಗಿತಗೊಳಿಸಿದೆ ಎಂಬುದನ್ನು ಲೆಕ್ಕಿಸದೆ ಸರ್ವರ್ ಅನ್ನು ಮರುಪ್ರಾರಂಭಿಸಿತು. ನಾವು ಎಕ್ಸಿಟ್ಕೋಡ್ ಅನ್ನು ಬಳಸುತ್ತೇವೆ. ಜಾವಾ 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 ಆಜ್ಞೆಯನ್ನು ಬಳಸಿಕೊಂಡು ಮುಚ್ಚುವವರೆಗೆ ಸ್ಕ್ರಿಪ್ಟ್ ಲೂಪ್‌ನಲ್ಲಿ ಉಳಿಯುತ್ತದೆ.

ನಾವು ಎಲ್ಲವನ್ನೂ ಸ್ವಯಂಚಾಲಿತಗೊಳಿಸಲು ನಿರ್ಧರಿಸಿದರೆ, ಪ್ರಾರಂಭ ದಿನಾಂಕ, ಪೂರ್ಣಗೊಂಡ ದಿನಾಂಕ ಮತ್ತು ಪೂರ್ಣಗೊಂಡ ಕಾರಣವನ್ನು ಸಂಗ್ರಹಿಸುವುದು ಒಳ್ಳೆಯದು.

ಇದನ್ನು ಮಾಡಲು, ನಾವು ಪ್ರಾರಂಭ-ಪ್ರಕ್ರಿಯೆಯ ಫಲಿತಾಂಶವನ್ನು ವೇರಿಯೇಬಲ್ ಆಗಿ ಬರೆಯುತ್ತೇವೆ. ಲಿಪಿಯಲ್ಲಿ ಇದು ಈ ರೀತಿ ಕಾಣುತ್ತದೆ:

$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

ಆಡ್-ಕಂಟೆಂಟ್ ಬಳಸಿ ಇದೆಲ್ಲವನ್ನೂ ಫೈಲ್‌ಗೆ ಸೇರಿಸಬಹುದು. ಅದನ್ನು ಸ್ವಲ್ಪ ಬಾಚಿಕೊಂಡ ನಂತರ, ನಾವು ಈ ಸ್ಕ್ರಿಪ್ಟ್ ಅನ್ನು ಪಡೆಯುತ್ತೇವೆ ಮತ್ತು ಅದನ್ನು ಹ್ಯಾಂಡ್ಲರ್.ಪಿಎಸ್ 1 ಎಂದು ಕರೆಯೋಣ.

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

ಇದು ಸುರಕ್ಷಿತವಲ್ಲ. ಲಾಗಿನ್ ಮತ್ತು ಪಾಸ್‌ವರ್ಡ್ ಅನ್ನು ಇಲ್ಲಿ ಸರಳ ಪಠ್ಯದಲ್ಲಿ ಸೂಚಿಸಲಾಗುತ್ತದೆ, ಆದ್ದರಿಂದ ಸರ್ವರ್ ಅನ್ನು ಪ್ರಾರಂಭಿಸಲು ನೀವು ಬಳಕೆದಾರರ ಮಟ್ಟದಲ್ಲಿ ಅಥವಾ ಇನ್ನೂ ಕಿರಿದಾದ ಗುಂಪಿನಲ್ಲಿ ಪ್ರವೇಶವನ್ನು ಹೊಂದಿರುವ ಪ್ರತ್ಯೇಕ ಬಳಕೆದಾರರನ್ನು ರಚಿಸಬೇಕಾಗಿದೆ. ಇದಕ್ಕಾಗಿ ಪ್ರಮಾಣಿತ ನಿರ್ವಾಹಕರನ್ನು ಬಳಸಲು ಕಟ್ಟುನಿಟ್ಟಾಗಿ ಶಿಫಾರಸು ಮಾಡುವುದಿಲ್ಲ.

ನಾವು ಸ್ವಯಂ ಲಾಗಿನ್ ಅನ್ನು ವಿಂಗಡಿಸಿದ್ದೇವೆ. ಈಗ ನೀವು ಸರ್ವರ್‌ಗಾಗಿ ಹೊಸ ಕಾರ್ಯವನ್ನು ನೋಂದಾಯಿಸಿಕೊಳ್ಳಬೇಕು. ನಾವು ಪವರ್‌ಶೆಲ್‌ನಿಂದ ಆಜ್ಞೆಯನ್ನು ಚಲಾಯಿಸುತ್ತೇವೆ, ಆದ್ದರಿಂದ ಅದು ಈ ರೀತಿ ಕಾಣುತ್ತದೆ:

$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 ಅನ್ನು ಪ್ರಾರಂಭಿಸಲು ಯಾವ ಫೋಲ್ಡರ್ನಿಂದ ಮತ್ತು ಲಾಗ್ ಅನ್ನು ಎಲ್ಲಿ ಹಾಕಬೇಕೆಂದು ಅವನು ಕೇಳುತ್ತಾನೆ.

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 ಗೆ ಹೋಗೋಣ

ಕರೆ ಮಾಡಿದಾಗ ನಮ್ಮ ಸ್ಕ್ರಿಪ್ಟ್ ಪ್ಯಾರಾಮೀಟರ್‌ಗಳನ್ನು ಸ್ವೀಕರಿಸಲು, ನಾವು ಪ್ಯಾರಾಮೀಟರ್ ಬ್ಲಾಕ್ ಅನ್ನು ಸಹ ನಿರ್ದಿಷ್ಟಪಡಿಸಬೇಕಾಗಿದೆ. ದಯವಿಟ್ಟು ಗಮನಿಸಿ, ಇದು ಒರಾಕಲ್ ಜಾವಾವನ್ನು ರನ್ ಮಾಡುತ್ತದೆ, ನೀವು ಬೇರೆ ವಿತರಣೆಯನ್ನು ಬಳಸುತ್ತಿದ್ದರೆ ನೀವು ಕಾರ್ಯಗತಗೊಳಿಸಬಹುದಾದ ಫೈಲ್‌ಗೆ ಮಾರ್ಗವನ್ನು ಬದಲಾಯಿಸಬೇಕಾಗುತ್ತದೆ.

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

ರಿಜಿಸ್ಟರ್-ಮಿನೆಕ್ರಾಫ್ಟ್

ಸ್ಕ್ರಿಪ್ಟ್ ಪ್ರಾಯೋಗಿಕವಾಗಿ 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 ಸರ್ವರ್ ಅನ್ನು ಸರಿಯಾಗಿ ನಿಯೋಜಿಸುವುದು ಹೇಗೆ. ಮೊದಲಿನಿಂದಲೂ ಪ್ರಾರಂಭಿಸೋಣ.

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

ಕಾಮೆಂಟ್ ಅನ್ನು ಸೇರಿಸಿ