рдореИрдВрдиреЗ рд╢реБрджреНрдз PowerShell рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ Minecraft рднреБрдЧрддрд╛рди рд╕реНрд╡реАрдХреГрддрд┐ рдкреНрд░рдгрд╛рд▓реА рдХреИрд╕реЗ рдмрдирд╛рдИ


рдЗрд╕ рд▓реЗрдЦ рдореЗрдВ, рд╣рдо рдкреЙрд╡рд░рд╢реЗрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП Minecraft рд╡реИрдирд┐рд▓рд╛ рд╕рд░реНрд╡рд░ рдкрд░ рдИрд╢реНрд╡рд░рд╡рд┐рд╣реАрди рдбреЛрдирдЯ рдХреЛ рд╕реНрдХреНрд░реВ рдХрд░реЗрдВрдЧреЗред рд╡рд┐рдзрд┐ рдХрд╛ рд▓рд╛рдн рдпрд╣ рд╣реИ рдХрд┐ minecraft рдХрдВрд╕реЛрд▓ рдХрдорд╛рдВрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рднреБрдЧрддрд╛рди рдХреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХрд╛ рдПрдХ рд╡рд┐рд╢реЗрд╖ рдорд╛рдорд▓рд╛ рд╣реИред рд╣рдо рд╕рд┐рд░реНрдл рдпрд╣ рд╕реБрдирддреЗ рд╣реИрдВ рдХрд┐ рднреБрдЧрддрд╛рди рдкреНрд░рдгрд╛рд▓реА рд╣рдореЗрдВ рдХреНрдпрд╛ рднреЗрдЬрддреА рд╣реИ рдФрд░ рдПрдХ рдЯреАрдо рдореЗрдВ рд▓рдкреЗрдЯрддреА рд╣реИред рдФрд░ рд╕рдмрд╕реЗ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдмрд╛рдд - рдХреЛрдИ рдкреНрд▓рдЧрдЗрдиреНрд╕ рдирд╣реАрдВред
рдФрд░ рд╣рдо рдкреЗрдкреИрд▓ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рднреБрдЧрддрд╛рди рд╕реНрд╡реАрдХрд╛рд░ рдХрд░реЗрдВрдЧреЗред рд╕рдмрд╕реЗ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдмрд╛рдд, рднреБрдЧрддрд╛рди рд╕реНрд╡реАрдХрд╛рд░ рдХрд░рдирд╛ рд╢реБрд░реВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрдкрдХреЛ рдХреЛрдб рдмрджрд▓рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ, рдкреЗрдкрд╛рд▓ рд╣рдореЗрдВ рдЖрдкрдХреА рдЬрд░реВрд░рдд рдХреА рд╣рд░ рдЪреАрдЬ рднреЗрдЬ рджреЗрдЧрд╛ред рд╣рдо рд╕рд╛рдЗрдЯ рдкрд░ рдмрдЯрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВрдЧреЗ, рддрд╛рдХрд┐ рд╕рд╛рдЗрдЯ рд╢реБрджреНрдз рдПрдЪрдЯреАрдПрдордПрд▓ рдХреЗ рд╕рд╛рде рдХрд░ рд╕рдХреЗред рд╣рдо рднреБрдЧрддрд╛рди рдкреНрд░рдгрд╛рд▓реА рдХреА рдкреЗрдЪреАрджрдЧрд┐рдпреЛрдВ рд╕реЗ рдЦреБрдж рдХреЛ рдЕрд▓рдЧ рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рдХреЛрдб рдореЗрдВ рдХреЗрд╡рд▓ рдореБрдЦреНрдп рдмрд┐рдВрджреБрдУрдВ рдкрд░ рдзреНрдпрд╛рди рдХреЗрдВрджреНрд░рд┐рдд рдХрд░рддреЗ рд╣реИрдВред

рд╡реИрд╕реЗ, рд▓реЗрдЦрдХ рдмрд╣реБрдд рдЦреБрд╢ рд╣реЛрдЧрд╛ рдпрджрд┐ рдЖрдк рдЙрд╕рдХреЗ рд╕рднреА рдореЙрдбреНрдпреВрд▓ рдХреЛ рджреЗрдЦрддреЗ рд╣реИрдВ рдФрд░ рдЙрдирдореЗрдВ рдмрдЪреНрдЪреЛрдВ рдХреА рддреНрд░реБрдЯрд┐рдпрд╛рдВ рдкрд╛рддреЗ рд╣реИрдВ рдЬреЛ рдЖрдк рдЗрдВрдЧрд┐рдд рдХрд░рддреЗ рд╣реИрдВ рдпрд╛ рд╕рд╣реА рдХрд░рддреЗ рд╣реИрдВред рдпрд╣рд╛рдБ github рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХрд╛ рд▓рд┐рдВрдХ рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ ред

IPN рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреБрдЫ рд╢рдмреНрдж


IPN


рд╣рдо рдмрдЯрди рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рднреБрдЧрддрд╛рди рд╕реНрд╡реАрдХрд╛рд░ рдХрд░реЗрдВрдЧреЗред рдмрдЯрдиреЛрдВ рдХреЛ рдЖрдкрд╕реЗ рдХрд┐рд╕реА рднреА рдмреИрдХрдПрдВрдб рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ, рд╡реЗ рд╢реБрджреНрдз HTML рдореЗрдВ рдХрд╛рдо рдХрд░рддреЗ рд╣реИрдВ, рдФрд░ рдЙрдирдХреЗ рдкрд╛рд╕ рдЕрдкрдиреЗ рдХреНрд╖реЗрддреНрд░ рднреА рд╣реИрдВред

рдмрдЯрди IPN - рдЗрдВрд╕реНрдЯреЗрдВрдЯ рдкреЗрдореЗрдВрдЯ рдиреЛрдЯрд┐рдлрд┐рдХреЗрд╢рди рдХреЛ рдЯреНрд░рд┐рдЧрд░ рдХрд░рддреЗ рд╣реИрдВ, рдЬрд┐рд╕рдореЗрдВ рдбреЗрдЯрд╛ рд╣рдорд╛рд░реЗ рд╡реЗрдмрд▓рд┐рд╕реНрдЯ рдХреЛ рднреЗрдЬрд╛ рдЬрд╛рддрд╛ рд╣реИред рд╣рдо рдиреАрдЪреЗ IPN рд╕рдВрд░рдЪрдирд╛ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВрдЧреЗред

рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдЬрд┐рд╕ рдХрд┐рд╕реА рдХреЗ рдкрд╛рд╕ рднреА PayPal рдЦрд╛рддрд╛ рд╣реИ, рд╡рд╣ рдЕрдкрдирд╛ рдЦреБрдж рдХрд╛ рдмрдЯрди рдмрдирд╛ рд╕рдХрддрд╛ рд╣реИред
IPN рдХреЗ рдкрд╛рд╕ рдкреВрд░рд╛ PayPal REST API рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рдЗрд╕ рдкрд░ рдмреБрдирд┐рдпрд╛рджреА рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рд▓рд╛рдЧреВ рдХреА рдЬрд╛ рд╕рдХрддреА рд╣реИред рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдЬрд┐рд╕ IPN рдкрд░ рд╣рдо рд╡рд┐рдЪрд╛рд░ рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рд╡рд╣ рд╢рдмреНрдж рдХреЗ рдкреВрд░реНрдг рдЕрд░реНрдереЛрдВ рдореЗрдВ REST API рдирд╣реАрдВ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ PayPal рдЦреБрдж рдХреЛрдб 200 рдХреЛ рдЫреЛрдбрд╝рдХрд░ рд╣рдорд╕реЗ рдХреБрдЫ рднреА рдЙрдореНрдореАрдж рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред

WebListener рдЙрдард╛рдПрдБ


рдкреЗрдкрд╛рд▓, рд╕реБрд░рдХреНрд╖рд╛ рдХрд╛рд░рдгреЛрдВ рд╕реЗ, HTTP рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЕрдиреБрд░реЛрдз рдирд╣реАрдВ рднреЗрдЬрддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рд╣рдореЗрдВ рдЖрд░рдВрдн рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдкреНрд░рдорд╛рдг рдкрддреНрд░ рдЬрд╛рд░реА рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред 

рд▓реЗрдЦрдХ рдиреЗ WinAcme рдХрд╛ рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд┐рдпрд╛ ред рдЖрдк рдХрд┐рд╕реА рднреА рдбреЛрдореЗрди рдХреЗ рд▓рд┐рдП рдПрдХ рдкреНрд░рдорд╛рдг рдкрддреНрд░ рдЬрд╛рд░реА рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдФрд░ рдЖрдкрдХреЛ рдкреНрд░рдорд╛рдг рдкрддреНрд░ рдХреЛ рд╕реНрдерд╛рдиреАрдп рдкреНрд░рдорд╛рдгрдкрддреНрд░ рд╕реНрдЯреЛрд░ рдореЗрдВ рд░рдЦрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рд╡реИрд╕реЗ, WinAcme рдЫрд╡рд┐ рдореЗрдВ рдбрд┐рд╕реНрдХ рдХреА рдЬрдбрд╝ рдореЗрдВ рд╕реНрдерд┐рдд рд╣реИред

#     
Get-ChildItem -Path Cert:\LocalMachine\My 
 
#      443 .
netsh http add sslcert ipport=0.0.0.0:443 certhash=D106F5676534794B6767D1FB75B58D5E33906710 "appid={00112233-4455-6677-8899-AABBCCDDEEFF}"

Powershell .net рд╕реЗ рдХрдХреНрд╖рд╛рдУрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддрд╛ рд╣реИ, рдЬреЛ рдЗрд╕реЗ .net рдХреЗ рд▓рдЧрднрдЧ рдмрд░рд╛рдмрд░ рдмрдирд╛рддрд╛ рд╣реИред рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, HttpListener рд╡рд░реНрдЧ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ, рд╡реЗрдм рд╕рд░реНрд╡рд░ рдмрдврд╝рд╛рдПрдБред

#   .net
$http = [System.Net.HttpListener]::new() 
 
#   
$http.Prefixes.Add("http://donate.to/")
$http.Prefixes.Add("https://donate.to/")
 
# 
$http.Start()

рдпрд╣ рд╕рддреНрдпрд╛рдкрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐ рд╕рдм рдХреБрдЫ рдареАрдХ рд╣реЛ рдЧрдпрд╛ рд╣реИ, netstat рдЪрд▓рд╛рдПрдВред



рдпрджрд┐ рд╣рдорд╛рд░реА рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдиреЗ рд╕реВрдЪреА рдореЗрдВ рдкреЛрд░реНрдЯ 443 рдХреЛ рд╕реБрдирдирд╛ рд╢реБрд░реВ рдХрд░ рджрд┐рдпрд╛ рд╣реИ, рддреЛ рдЗрд╕рдХрд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ рдЖрдкрдиреЗ рд╕рдм рдХреБрдЫ рд╕рд╣реА рдврдВрдЧ рд╕реЗ рдХрд┐рдпрд╛ рд╣реИ, рдФрд░ рд╣рдо рдЕрдиреБрд░реЛрдз рдкреНрд░рд╕рдВрд╕реНрдХрд░рдг рдХреЛ рд╕реНрд╡реАрдХрд╛рд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрдЧреЗ рдмрдврд╝ рд╕рдХрддреЗ рд╣реИрдВред рдмрд╕ рдлрд╝рд╛рдпрд░рд╡реЙрд▓ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдордд рднреВрд▓рдирд╛ред

рдЕрдиреБрд░реЛрдз рд╕реНрд╡реАрдХрд╛рд░ рдХрд░реЗрдВ


IPN рд╕рд┐рдореНрдпреБрд▓реЗрдЯрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ , рд╣рдо рдпрд╣ рджреЗрдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдкрдиреЗ рдЖрдк рдХреЛ рдПрдХ рдкрд░реАрдХреНрд╖рдг POST рдЕрдиреБрд░реЛрдз рднреЗрдЬ рд╕рдХрддреЗ рд╣реИрдВред рд▓реЗрдХрд┐рди рдЖрдк рдЗрд╕рдореЗрдВ рдЕрдкрдиреЗ рд╕реНрд╡рдпрдВ рдХреЗ рдлрд╝реАрд▓реНрдб рд╢рд╛рдорд┐рд▓ рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗ, рдЗрд╕рд▓рд┐рдП рд▓реЗрдЦрдХ рдПрдХ рдмрдЯрди рдмрдирд╛рдиреЗ рдФрд░ рддреБрд░рдВрдд рдЦреБрдж рд╕реЗ рдХреБрдЫ рдЦрд░реАрджрдиреЗ рдХреА рд╕рд▓рд╛рд╣ рджреЗрддрд╛ рд╣реИред IPN History рдЖрдкрдХреЗ рджреНрд╡рд╛рд░рд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЬрд╛рдиреЗ рд╡рд╛рд▓реЗ рдмрдЯрди рд╕реЗ рдПрдХ рд╕рд╛рдорд╛рдиреНрдп рдЕрдиреБрд░реЛрдз рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░реЗрдЧрд╛ред рд▓реЗрдЦрдХ рдиреЗ рд╕рд┐рд░реНрдл рдПрдХ рд░реВрдмрд▓ рдХреЗ рд▓рд┐рдП рдПрдХ рдХреЛрдпрд▓рд╛ рдЦрд░реАрджрдХрд░ рдРрд╕рд╛ рдХрд┐рдпрд╛ред

рд╣рдо рд▓реВрдк рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП рд╕реНрд╡реАрдХрд╛рд░ рдХрд░реЗрдВрдЧреЗред рдЬрдмрдХрд┐ рд╡реЗрдм рд╕рд░реНрд╡рд░ рдЪрд▓ рд░рд╣рд╛ рд╣реИ, рд╣рдо рдЖрдиреЗ рд╡рд╛рд▓реА рдбреЗрдЯрд╛ рд╕реНрдЯреНрд░реАрдо рдкрдврд╝ рд╕рдХрддреЗ рд╣реИрдВред

while ($http.IsListening) {
 
  $context = $http.GetContext()
 
  if ($context.Request.HttpMethod -eq 'POST' -and $context.Request.RawUrl -eq '/') {
 
    #  POST 
    $Reader = [System.IO.StreamReader]::new($context.Request.InputStream).ReadToEnd()
    
    #  .
    $DecodedContent = [System.Web.HttpUtility]::UrlDecode($Reader)
 
    #   .
    $Payment | Format-Table
 
    #  200 OK   .
    $context.Response.Headers.Add("Content-Type", "text/plain")
    $context.Response.StatusCode = 200
    $ResponseBuffer = [System.Text.Encoding]::UTF8.GetBytes("")
    $context.Response.ContentLength64 = $ResponseBuffer.Length
    $context.Response.OutputStream.Write($ResponseBuffer, 0, $ResponseBuffer.Length)
    $context.Response.Close()
  }
}

рдпрджрд┐ рдЖрдкрдХреЛ рдЗрд╕ рддрд░рд╣ рд╕реЗ рдПрдХ рд╕рд┐рдВрджреВрд░ рдорд┐рд▓рддрд╛ рд╣реИ, рддреЛ рдЖрд╡реЗрджрди рдХрд░реЗрдВ:

$Payment = $DecodedContent -split "&" | ConvertFrom-StringData



рдЙрд╕рдХреЗ рдмрд╛рдж, рдЖрдк рдЕрдВрддрддрдГ рдПрдХ рд╕рд╛рдорд╛рдиреНрдп рд╡рд╕реНрддреБ рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВрдЧреЗ, рдЬрд╣рд╛рдВ рд╕рднреА рдореВрд▓реНрдп рд╕реНрдЯреНрд░рд┐рдВрдЧ рд╣реИред рдпрджрд┐ рдЖрдк рдХреЛрдб рдореЗрдВ рдЧрд╣рд░рд╛рдИ рд╕реЗ рдирд╣реАрдВ рдЬрд╛рдирд╛ рдЪрд╛рд╣рддреЗ



рд╣реИрдВ, рддреЛ рдЖрдк рдпрд╣реАрдВ рдкрдврд╝рдирд╛ рдЫреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдХрд┐рд╕реА рдХреЗ рдПрдкреАрдЖрдИ рдХреЗ рдЕрдиреБрд░реЛрдзреЛрдВ рдХреЛ рд╕реНрд╡реАрдХрд╛рд░ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВред

рдпрд╣рд╛рдБ рд╡рд╣ рдХреЛрдб рд╣реИ рдЬреЛ рдмреЙрдХреНрд╕ рдХреЗ рдареАрдХ рдмрд╛рд╣рд░ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, рдХреЙрдкреА рдФрд░ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ:

# 
$http = [System.Net.HttpListener]::new() 
 
# ,   
$http.Prefixes.Add("http://localhost/")
$http.Prefixes.Add("https://localhost/")
 
$http.Start()
 
while ($http.IsListening) {
 
  $context = $http.GetContext()
 
  if ($context.Request.HttpMethod -eq 'POST' -and $context.Request.RawUrl -eq '/') {
 
    #  POST 
    $Reader = [System.IO.StreamReader]::new($context.Request.InputStream).ReadToEnd()
    
    #  .
    $DecodedContent = [System.Web.HttpUtility]::UrlDecode($Reader)
          
    #  IPN   
    $Payment = $DecodedContent -split "&" | ConvertFrom-StringData
 
    #   .
    $Payment | Format-Table
 
    #  200 OK   .
    $context.Response.Headers.Add("Content-Type", "text/plain")
    $context.Response.StatusCode = 200
    $ResponseBuffer = [System.Text.Encoding]::UTF8.GetBytes("")
    $context.Response.ContentLength64 = $ResponseBuffer.Length
    $context.Response.OutputStream.Write($ResponseBuffer, 0, $ResponseBuffer.Length)
    $context.Response.Close()
  }
}

Minecraft Nuances


рдЗрд╕рд▓рд┐рдП рд╣рдореЗрдВ рдкрддрд╛ рдЪрд▓рд╛ рдХрд┐ рд╣рдо рднреБрдЧрддрд╛рди рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЕрд▓рд░реНрдЯ рдХреИрд╕реЗ рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдЕрдм рд╣рдо рдЙрдиреНрд╣реЗрдВ рдХреНрд░реЗрдбрд┐рдЯ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рд▓реЗрдХрд┐рди рдпрд╣рд╛рдБ рднреА, рдЗрддрдирд╛ рдЖрд╕рд╛рди рдирд╣реАрдВ рд╣реИред рд╕рдорд╕реНрдпрд╛ рдпрд╣ рд╣реИ рдХрд┐ рдЦреЗрд▓ рдЖрдЗрдЯрдо рдирд╣реАрдВ рджреЗрддрд╛ рд╣реИ рдпрд╛ рдЙрди рдЦрд┐рд▓рд╛рдбрд╝рд┐рдпреЛрдВ рдХреА рд╕реНрдерд┐рддрд┐ рдХреЛ рдмрджрд▓рддрд╛ рд╣реИ рдЬреЛ рд╕рд░реНрд╡рд░ рдкрд░ рдирд╣реАрдВ рд╣реИрдВред рдпрд╣реА рд╣реИ, рд╣рдореЗрдВ рддрдм рддрдХ рдЗрдВрддрдЬрд╛рд░ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ рдЬрдм рддрдХ рдХреЛрдИ рд╡реНрдпрдХреНрддрд┐ рд╕рд░реНрд╡рд░ рдореЗрдВ рдкреНрд░рд╡реЗрд╢ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрд╕реЗ рджреЗрдиреЗ рдХреЗ рд▓рд┐рдП рдЬреЛ рдЙрд╕рдиреЗ рднреБрдЧрддрд╛рди рдХрд┐рдпрд╛ рд╣реЛред

рдЗрд╕рд▓рд┐рдП, рднреБрдЧрддрд╛рди рдЬрдорд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрдкрдХрд╛ рдзреНрдпрд╛рди рдзреВрдореНрд░рдкрд╛рди рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдХреА рд╕рд╛рдорд╛рдиреНрдп рдЕрд╡рдзрд╛рд░рдгрд╛ рдкрд░ рдкреНрд░рд╕реНрддреБрдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред



рднреБрдЧрддрд╛рди рдКрдкрд░ рд╢реНрд░реЛрддрд╛ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдкреНрд░рд╛рдкреНрдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдСрдмреНрдЬреЗрдХреНрдЯ рд▓рд┐рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдЗрд╕рдореЗрдВ рдХреЗрд╡рд▓ рдПрдХ рдкрдВрдХреНрддрд┐ рдЬреЛрдбрд╝реА рдЧрдИ рдереАред рдкреВрд░реНрдг-рднреБрдЧрддрд╛рди (рдкреНрд░реЛрд╕реЗрд╕рд░) рдЙрдкрдирд╛рдо рдХреЛ рджреЗрдЦрддрд╛ рд╣реИ рдФрд░ рдЗрд╕реЗ рдлрд╝рд╛рдЗрд▓ рдирд╛рдо рдХреЗ рд╕рд╛рде рдореЗрд▓ рдЦрд╛рддрд╛ рд╣реИред рдпрджрд┐ рдпрд╣ рдПрдХ рдлрд╝рд╛рдЗрд▓ рдкрд╛рддрд╛ рд╣реИ, рддреЛ rcon рдХреЗ рд▓рд┐рдП рдПрдХ рдХрдорд╛рдВрдб рд╕рдВрдХрд▓рд┐рдд рдХрд░рддрд╛ рд╣реИ рдФрд░ рдЗрд╕реЗ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рддрд╛ рд╣реИред

рд╕реНрдЯрд╛рд░реНрдЯ-MinecraftрдЬрд┐рд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд▓реЗрдЦрдХ рдиреЗ рдкрд┐рдЫрд▓реЗ рд▓реЗрдЦ рдореЗрдВ рдереЛрдбрд╝рд╛ рд╕рдВрд╢реЛрдзрд┐рдд рдХрд┐рдпрд╛ рдерд╛ред рдЕрдм рд╡рд╣ рдирд┐рд╖реНрдХрд░реНрд╖ рд╕реБрдирддрд╛ рд╣реИ, рдЦрд┐рд▓рд╛рдбрд╝рд┐рдпреЛрдВ рдХреЗ рдЙрдкрдирд╛рдореЛрдВ рдХреЛ рджреЗрдЦрддрд╛ рд╣реИ рдФрд░ рдЙрдиреНрд╣реЗрдВ рднреБрдЧрддрд╛рди рдкреНрд░реЛрд╕реЗрд╕рд░ рдореЗрдВ рднреЗрдЬрддрд╛ рд╣реИред

рдЕрд╕рд▓реА рдХреЙрд▓рдмреИрдХ рдмрдирд╛рдирд╛


рдкреНрд▓рдЧрдЗрдиреНрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдмрд┐рдирд╛, рд╣рдо рд╕рд╣реА рдХреЙрд▓рдмреИрдХ рдХрд░реЗрдВрдЧреЗред рдЗрд╕рдХреЗ рд▓рд┐рдП Start-Minecraft рдХреЛ рд╕рдВрд╢реЛрдзрд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рдЕрдм рд╡рд╣ рди рдХреЗрд╡рд▓ рдПрдХ рдлрд╛рдЗрд▓ рдореЗрдВ StdOut рдЬреЛрдбрд╝рдирд╛ рдЬрд╛рдирддрд╛ рд╣реИ, рдмрд▓реНрдХрд┐ рдПрдХ рдирд┐рдпрдорд┐рдд рдХрд╛рд░реНрдпрдХреНрд░рдо рдХреЗ рд╕рд╛рде рдкреНрд░рддреНрдпреЗрдХ рдкрдВрдХреНрддрд┐ рдореЗрдВ рдЪрд▓рддрд╛ рд╣реИред рдЬрдм рдЦрд┐рд▓рд╛рдбрд╝реА рдХрд┐рд╕реА рд╕рд░реНрд╡рд░ рдореЗрдВ рдкреНрд░рд╡реЗрд╢ рдХрд░рддрд╛ рд╣реИ рддреЛ рд╕реМрднрд╛рдЧреНрдп рд╕реЗ, рдорд┐рдиреАрдХреНрд░рд╛рдлреНрдЯ рдПрдХ рдмрд╣реБрдд рд╣реА рд╡рд┐рд╢рд┐рд╖реНрдЯ рд╕рдВрджреЗрд╢ рдЫреЛрдбрд╝рддрд╛ рд╣реИред

[04:20:00 INFO]: UUID of player XXPROHUNTERXX is 23e93d2e-r34d-7h15 -5h17-a9192cd70b48

рдЗрд╕ рд▓рд╛рдЗрди рд╕реЗ рдЙрдкрдирд╛рдо рдЪреБрдирдирд╛ рдмрд╣реБрдд рдЖрд╕рд╛рди рд╣реИред рдпрд╣рд╛рдБ рд╕рднреА рдХреЛрдб рд╣реИ рдЬреЛ рд╣рдореЗрдВ Stdout рд╕реНрдЯреНрд░рд┐рдВрдЧреНрд╕ рд╕реЗ рдбреЗрдЯрд╛ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред

$Regex = [Regex]::new("of player ([^ ]+)")
 
powershell.exe -file ".\Start-MinecraftHandler.ps1" -type $type -MinecraftPath $MinecraftPath | Tee-Object $LogFile -Append | ForEach-Object {
 
     Write-host $_
        
    $Player = $Regex.Matches($_).value -replace "of player "
        
    if ($true -eq $Regex.Matches($_).Success) {
        #   
    }
}


рдПрдХ рдирдИ рд▓рд╛рдЗрди $ _ рдкрд╛рдЗрдкрд▓рд╛рдЗрди рдореЗрдВ рдлреАрдб рдХреА рдЧрдИ рд╣реИ, рд╣рдо рдЗрд╕реЗ рдХрдВрд╕реЛрд▓ рд╡рд┐рдВрдбреЛ рдореЗрдВ рд▓рд┐рдЦрддреЗ рд╣реИрдВ рдФрд░ рдирд┐рдпрдорд┐рдд рд░реВрдк рд╕реЗ рдЗрд╕рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЬрд╛рддреЗ рд╣реИрдВред рдирд┐рдпрдорд┐рдд рдЦреБрдж рд╣реА рд╣рдореЗрдВ рд╕реВрдЪрд┐рдд рдХрд░рддрд╛ рд╣реИ рдЬрдм рдпрд╣ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, рдЬреЛ рдмрд╣реБрдд рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рд╣реИред

рдпрд╣рд╛рдБ рд╕реЗ рд╣рдо рдХрд┐рд╕реА рднреА рдХреЛрдб рдХреЛ рдХреЙрд▓ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЙрд╕реА RCON рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП, рд╣рдо рдкреАрдПрдо рдореЗрдВ рдЦрд┐рд▓рд╛рдбрд╝реА рдХрд╛ рдЕрднрд┐рд╡рд╛рджрди рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдмреЙрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЗрд╕ рдмрд╛рдд рдХреА рд╕реВрдЪрдирд╛ рджреЗрдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐ рдХрд┐рд╕реА рдиреЗ рд╕рд░реНрд╡рд░ рдкрд░ рд▓реЙрдЧ рдЗрди рдХрд┐рдпрд╛ рд╣реИ, рдЪреЗрдХрдореЗрдЯ рдкрд░ рдкреНрд░рддрд┐рдмрдВрдз рд▓рдЧрд╛рдпрд╛ рд╣реИ, рдФрд░ рдЗрд╕реА рддрд░рд╣ред

рднреБрдЧрддрд╛рди рдХрд░рдирд╛


рдЪреВрдВрдХрд┐ рд╣рдордиреЗ рднреБрдЧрддрд╛рдиреЛрдВ рдХреЛ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд░рдирд╛ рд╢реБрд░реВ рдХрд░ рджрд┐рдпрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рд╣рдо рдСрдкрд░реЗрд╢рди рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдФрд░ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд┐рдП рдЧрдП рд╕рдВрдЪрд╛рд▓рди рдХреЗ рдЗрддрд┐рд╣рд╛рд╕ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХрдо рд╕реЗ рдХрдо рдкреВрд░рд╛ рдбреЗрдЯрд╛ рд░рдЦрдирд╛ рдЪрд╛рд╣реЗрдВрдЧреЗ, рдХреНрдпреЛрдВрдХрд┐ рд╣рдо рджреЛ рд╢реВрдиреНрдп рдХреЗ рд╕рд╛рде рд╕рдВрдЦреНрдпрд╛рдУрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рдмреЛрд▓рдиреЗ рдХреЗ рд▓рд┐рдПред

рд▓реЗрдЦрдХ рд╕рдм рдХреБрдЫ рдмрд╣реБрдд рд╕рд░рд▓ рдЫреЛрдбрд╝рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реИ рдФрд░ рдЕрднреА рддрдХ рдЖрдзрд╛рд░ рдХрд╛ рдЕрдиреБрдХрд░рдг рдирд╣реАрдВ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реИред рдЖрдЗрдП NoSQL рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХреЛ рджреЗрдЦреЗрдВред рдЖрдЗрдП рдЕрдкрдирд╛ рд╕реНрд╡рдпрдВ рдХрд╛ рд╡рд░реНрдЧ рдмрдирд╛рдПрдВ, рдЬреЛ рд╕рднреА рд╕реНрд╡реАрдХреГрдд рднреБрдЧрддрд╛рдиреЛрдВ рдХреЛ / рднреБрдЧрддрд╛рди / рдлрд╝реЛрд▓реНрдбрд░ рдореЗрдВ Json рдлрд╝рд╛рдЗрд▓реЛрдВ рдореЗрдВ рдЖрдпрд╛рдд рдХрд░реЗрдЧрд╛ред

    class Payment {
        #  .
        [datetime]$Date = [datetime]::ParseExact($i.payment_date, "HH:mm:ss MMM dd, yyyy PDT", [System.Globalization.CultureInfo]::InvariantCulture)
        # 
        [string]$Item = $i.item_name
        # 
        [UInt16]$Quantity = $i.Quantity
        #    
        [UInt16]$AmountPaid = $AmountPaid -as [UInt16]
        #     
        [string]$Currency = $i.mc_currency
        # ,   
        [string]$Player = $i.option_selection1
    
        [bool]$Completed = $false
        [UInt16]$ItemId = $i.item_number
    }
/source>

    , , ,          .

 ,    <b>option_selection1</b> тАУ   .      input,   ,     .
     <b>option_selection1</b>,<b>option_selection2</b>   .

      ,     ,      .

<source lang="powershell"> #     Payment,        .
    $Payment = [Payment]::new()
    $Payment | Format-Table
    #  ,   ----
    $FileName = $Payment.Player + "-" + $Payment.date.Hour + "-" + $Payment.date.Minute + "-" + $Payment.date.Day + "-" + $Payment.date.Month + "-" + $Payment.date.Year + ".json"
 
# ,      
    $JsonPath = Join-Path $MinecraftPath \payments\Pending $FileName
    
    #   
    $Payment | ConvertTo-Json | Out-File $JsonPath

рдпрд╣ рд╕рдм рд╣рдорд╛рд░реЗ рд╢реНрд░реЛрддрд╛ рд╕реЗ рдЖрд╡рд╢реНрдпрдХ рдерд╛ред рдкреЗрдкрд╛рд▓ рд╕реЗ рдбреЗрдЯрд╛ рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВ рдФрд░ рдПрдХ рдлрд╛рдЗрд▓ рдкрд░ рд▓рд┐рдЦреЗрдВред

рд╣рдо рднреБрдЧрддрд╛рди рдкреНрд░рд╕рдВрд╕реНрдХрд░рдг рдХрд░рддреЗ рд╣реИрдВ


рд╣реИрдВрдбрд▓рд░ рдЙрд╕ рдирд┐рдпрдорд┐рдд рдХреЛ рдХрд╣рд╛ рдЬрд╛рдПрдЧрд╛ рдЬреЛ рдкрд╣рд▓реЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд▓рд┐рдЦрд╛ рдЧрдпрд╛ рдерд╛ред рд╣рдо рдЦрд┐рд▓рд╛рдбрд╝реА рдХреЗ рдЙрдкрдирд╛рдо рдХреЛ рдореЙрдбреНрдпреВрд▓ рдФрд░ рдЙрд╕ рдкрд░ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░рддреЗ рд╣реИрдВред рдЕрдЧрд▓рд╛, рдПрдХ рдирдИ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рд▓реЙрдиреНрдЪ рдХреА рдЧрдИ рд╣реИ, рдЬреЛ рдлрд╝рд╛рдЗрд▓ рдХреА рдЦреЛрдЬ рдХрд░рддреА рд╣реИ, рдФрд░ рдпрджрд┐ рдХреЛрдИ рдлрд╝рд╛рдЗрд▓ рд╣реИ, рддреЛ рдпрд╣ рдкреНрд▓реЗрдпрд░ рдХреЛ рдЙрд╕ рдЖрдЗрдЯрдо рдХреЛ рджреЗрддреА рд╣реИ рдЬреЛ рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рд▓рд┐рдЦрд╛ рдЧрдпрд╛ рд╣реИред

powershell.exe -file "C:\mc.fern\Start-MinecraftHandler.ps1" -type $type -MinecraftPath $MinecraftPath | Tee-Object $LogFile -Append | ForEach-Object {
       
        #     ,      .
        Write-host $_   
 
        # Regex     
        if ($true -eq $Regex.Matches($_).Success) {
            
            #       
            $Player = $Regex.Matches($_).value -replace "of player "
            
            #  ,       
            Complete-Payment -Player $Player
        }
    }

рдЬрдм рдирд┐рдпрдорд┐рддрддрд╛ рд╢реБрд░реВ рд╣реЛ рдЬрд╛рддреА рд╣реИ, рддреЛ рдПрдХ рдореЙрдбреНрдпреВрд▓ рд▓реЙрдиреНрдЪ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдЬреЛ рднреБрдЧрддрд╛рди рдкреВрд░рд╛ рдХрд░рддрд╛ рд╣реИ, рдЕрд░реНрдерд╛рдд рдпрд╣ рдЦрд┐рд▓рд╛рдбрд╝реА рдХреЛ рдПрдХ рдЖрдЗрдЯрдо рджреЗрддрд╛ рд╣реИред рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, / рднреБрдЧрддрд╛рди / рд▓рдВрдмрд┐рдд / рдлрд╝реЛрд▓реНрдбрд░ рдореЗрдВ, рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдЙрд╕ рдЦрд┐рд▓рд╛рдбрд╝реА рдХреЗ рдЙрдкрдирд╛рдо рд╕реЗ рдпреБрдХреНрдд рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреА рдЦреЛрдЬ рдХрд░рддреА рд╣реИ, рдЬреЛ рдЦреЗрд▓ рдореЗрдВ рдкреНрд░рд╡реЗрд╢ рдХрд┐рдпрд╛ рд╣реИ рдФрд░ рдЗрд╕рдХреА рд╕рд╛рдордЧреНрд░реА рдХреЛ рдкрдврд╝рддрд╛ рд╣реИред

рдЕрдм рдЖрдкрдХреЛ рд╕рд░реНрд╡рд░ рдХреЗ рд▓рд┐рдП рдХрдорд╛рдВрдб рдЗрдХрдЯреНрдард╛ рдХрд░рдиреЗ рдФрд░ рд╡рд╣рд╛рдВ рднреЗрдЬрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдЗрд╕реЗ рдПрдХ рдлрд╛рдЗрд▓ рд╕реЗ рдПрдХрддреНрд░ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред рд╣рдо рдЦрд┐рд▓рд╛рдбрд╝реА рдХреЗ рдЙрдкрдирд╛рдо рдХреЛ рдЬрд╛рдирддреЗ рд╣реИрдВ, рдЖрдЗрдЯрдо рдХрд╛ рдирд╛рдо рдФрд░ рдЙрд╕рдХреА рдЖрдИрдбреА рджрд░реНрдЬ рдХреА рдЧрдИ рдереА, рдХрд┐рддрдиреЗ рдЯреБрдХрдбрд╝реЗ рднреА рджрд░реНрдЬ рдХрд┐рдП рдЧрдП рдереЗ, рдпрд╣ рдХреЗрд╡рд▓ рдЧреЗрдо рд╕рд░реНрд╡рд░ рдкрд░ рдХрдорд╛рдВрдб рднреЗрдЬрдиреЗ рдХреЗ рд▓рд┐рдП рдмрдирд╛ рд╣реБрдЖ рд╣реИред рдЗрд╕рдХреЗ рд▓рд┐рдП рд╣рдо mcrcon рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВрдЧреЗ ред

#    
    $JsonPath = Join-Path $MinecraftPath\payments\Pending -ChildPath $Player*
    $i = $JsonPath | Get-Item | Where-Object { !$_.PSIsContainer } | Get-Content | ConvertFrom-Json -ErrorVariable Errored
 
    #      
    if ($null -ne $i) {
 
        #  
        $Command = '"' + "give " + $i.Player + " " + $i.Item + " " + $i.Quantity + '"'
        Write-host $Command -ForegroundColor Green
    
        #   
        Start-Process -FilePath mcrcon.exe -ArgumentList "-H localhost -p 123 -w 5 $Command"
    
        # ,      
        $JsonPath = Join-Path $MinecraftPath\payments\Pending -ChildPath $FileName
        
        #   
        $i | ConvertTo-Json | Out-File $JsonPath
    
        #     
        Move-Item  -Path $JsonPath -Destination $MinecraftPath\payments\Completed
    }

рд╣рдо рдЗрд╕реЗ рдПрдХ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рдореЙрдбреНрдпреВрд▓ рдореЗрдВ рдмрдирд╛рддреЗ рд╣реИрдВ


Java рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдФрд░ WebListener рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЗ рд▓рд┐рдП рдЕрд▓рдЧ-рдЕрд▓рдЧ рдереНрд░реЗрдбреНрд╕ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ, рд▓реЗрдХрд┐рди рд▓реЗрдЦрдХ WebListener рдХреЛ рдЕрд▓рдЧ рд╕реЗ рдФрд░ рд╕рд░реНрд╡рд░ рдХреЛ рдЕрд▓рдЧ-рдЕрд▓рдЧ рдЪрд▓рд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╕реЗ рд╕рдВрддреБрд╖реНрдЯ рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИред рд▓реЗрдЦрдХ рдПрдХ рдЯреАрдо рдХреЗ рд╕рд╛рде рдПрдХ рдмрд╛рд░ рдореЗрдВ рд╕рдм рдХреБрдЫ рдЪрд╛рд╣рддрд╛ рд╣реИред

рдЗрд╕рд▓рд┐рдП, Powershell 7 рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП, рд╣рдо рдЗрд╕ рдФрд░ рдЙрд╕ рджреЛрдиреЛрдВ рдХреЛ рд▓реЙрдиреНрдЪ рдХрд░реЗрдВрдЧреЗред рдФрд░ рдпрд╣ рд╣рдорд╛рд░реА рдорджрдж рдХрд░реЗрдЧрд╛:

ForEach-Object -Parallel {}

Cmdlet рдЗрдирдкреБрдЯрдСрдмреНрдЬреЗрдХреНрдЯ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рд╣рдо рдЗрд╕реЗ рдПрдХ рд╕реАрдзреА рд╕рд░рдгреА рджреЗрддреЗ рд╣реИрдВ, рдФрд░ рдПрдХ рд╕реНрд╡рд┐рдЪ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╕реНрдЯреНрд░реАрдо рд╕рд╛рдЭрд╛ рдХрд░рддреЗ рд╣реИрдВред

"A", "B" | ForEach-Object -Parallel {
 
    Import-Module ".\Start-Minecraft.ps1"
 
    Import-Module ".\Start-WebListener.ps1"
 
    switch ($_) {
        "A" {
            Start-WebListener -Path "C:\mc\"
        }
        "B" {
            Start-Minecraft -Type Vanilla -LogFile ".\stdout.txt" -MinecraftPath "C:\mc\"
        }
        
    }
}

рддреЛ рдПрдХ рдмреИрд╕рд╛рдЦреА рдореЗрдВ, рд╣рдордиреЗ рдПрдХ рдЯрд░реНрдорд┐рдирд▓ рд╕реЗ рджреЛ рдЕрд▓рдЧ-рдЕрд▓рдЧ рдкреНрд░рдХреНрд░рд┐рдпрд╛рдПрдВ рд╢реБрд░реВ рдХреАрдВ рдФрд░ рдЗрдирдкреБрдЯ рднреА рдирд╣реАрдВ рдЦреЛрдПред рд▓реЗрдХрд┐рди рдПрдХ рдФрд░ рд╕рдорд╕реНрдпрд╛ рдереАред WebListener рдПрдХ рдирд┐рдпрдорд┐рдд рд╕рд░реНрд╡рд░ рдмрдВрдж рд╣реЛрдиреЗ рдХреЗ рдмрд╛рдж рдХрдВрд╕реЛрд▓ рдХреЛ рд▓реЙрдХ рдХрд░ рджреЗрддрд╛ рд╣реИ рдФрд░ рдХрд╣реАрдВ рднреА рдирд╣реАрдВ рдЬрд╛рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реИред

рд╣рд░ рдмрд╛рд░ рдЯрд░реНрдорд┐рдирд▓ рдХреЛ рдкреБрдирд░рд╛рд░рдВрдн рдирд╣реАрдВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдПрдХ рдпрд╛рджреГрдЪреНрдЫрд┐рдХ рдХреБрдВрдЬреА рд╕реНрдЯрд╛рд░реНрдЯ-рдорд╛рдЗрдирдХреНрд░рд╛рдлреНрдЯрд╣реИрдВрдбрд▓рд░.ps1 рдФрд░ рд╕реНрдЯрд╛рд░реНрдЯ-рд╡реЗрдмрд▓рд┐рд╕реНрдЯрдирд░.рдкреНрд╕ 1 рдореЗрдВ рдЬреЛрдбрд╝рд╛ рдЧрдпрд╛, рдЬреЛ рд╕рд░реНрд╡рд░ рдХреЛ рд╡реЗрдмрд▓рд┐рд╕реНрдЯ рдкрд░ POST рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд░реЛрдХ рджреЗрдЧрд╛ред

рдкреНрд░рд╛рд░рдВрдн-MinecraftHandler.ps1, рдЬрдм рдпрд╣ рдПрдХ рд╕рдлрд▓ рд╕рдорд╛рдкрди рд░рд┐рдХреЙрд░реНрдб рдХрд░рддрд╛ рд╣реИ, рддреЛ рдХрдорд╛рдВрдб рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рддрд╛ рд╣реИ:

Invoke-WebRequest -Method Post -Uri localhost -Body $StopToken | Out-Null

$ StopToken рдореЗрдВ рдПрдХ рдпрд╛рджреГрдЪреНрдЫрд┐рдХ рд╕рд╛рдВрдЦреНрдпрд┐рдХ рдорд╛рди рд╣реЛрддрд╛ рд╣реИ рдЬреЛ рд╢реНрд░реЛрддрд╛ рдФрд░ рд╣реИрдВрдбрд▓рд░ рджреЛрдиреЛрдВ рдХреЛ рд╕реНрдЯрд╛рд░реНрдЯрдЕрдк рд╕реНрдХреНрд░рд┐рдкреНрдЯ рджреНрд╡рд╛рд░рд╛ рдкреВрд░реНрд╡-рдкрд╛рд╕ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рд╢реНрд░реЛрддрд╛ рдпрд╣ рджреЗрдЦрддрд╛ рд╣реИ рдХрд┐ рдЙрд╕реЗ рдЕрдиреБрд░реЛрдз рдореЗрдВ рдХреНрдпрд╛ рдорд┐рд▓рд╛ рд╣реИ рдФрд░ рдпрджрд┐ рдЕрдиреБрд░реЛрдз рдмреЙрдбреА рд╕реНрдЯреЙрдкрдЯреЛрдХрди рд╕реЗ рдореЗрд▓ рдЦрд╛рддрд╛ рд╣реИ рддреЛ рдЙрд╕реЗ рдмрдВрдж рдХрд░ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред

if ($DecodedContent -eq $StopToken) {
        Write-Host "Stopping WebListener"
        $context.Response.Headers.Add("Content-Type", "text/plain")
        $context.Response.StatusCode = 200
        $ResponseBuffer = [System.Text.Encoding]::UTF8.GetBytes("")
        $context.Response.ContentLength64 = $ResponseBuffer.Length
        $context.Response.OutputStream.Write($ResponseBuffer, 0, $ResponseBuffer.Length)
        $context.Response.Close()
        $http.Close()
        break
      }

рдпрд╣ рдкрд░реНрдпрд╛рдкреНрдд рд╕реБрд░рдХреНрд╖рд┐рдд рд╣реИ, рдХреЗрд╡рд▓ рдЯреЛрдХрди рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╣реА рд░реИрдо рдЬрд╛рдирддрд╛ рд╣реИ рдФрд░ рдХреЛрдИ рдирд╣реАрдВред рд╕рднреА рдореЙрдбреНрдпреВрд▓ PowerShell 7 рдХреЗ рддрд╣рдд рд▓реЙрдиреНрдЪ рдХрд┐рдП рдЧрдП рд╣реИрдВ, рдФрд░ PowerShell 7 рдХреЗ рд▓рд┐рдП рдореЙрдбреНрдпреВрд▓ рдХрд╛ рдкрде рд╡рд┐рдВрдбреЛрдЬ рдкреЙрд╡рд░реНрд╕рд╢реЗрд▓ рдореЗрдВ рдкрде рд╕реЗ рдЕрд▓рдЧ рд╣реИред рдпрд╣рд╛рдВ рд╕рдм рдХреБрдЫ рдвреЗрд░ рд╣реЛ рдЧрдпрд╛ рдерд╛ред рдЕрдкрдирд╛ рд▓рд┐рдЦрддреЗ рд╕рдордп рдзреНрдпрд╛рди рд░рдЦреЗрдВред

C:\Program Files\PowerShell\7\Modules

рд╣рдо рдПрдХ рд╡рд┐рдиреНрдпрд╛рд╕ рдлрд╛рдЗрд▓ рдмрдирд╛рддреЗ рд╣реИрдВ


рддрд╛рдХрд┐ рдпрд╣ рд╕рдм рдЕрдкрдорд╛рди рдПрдХ рдЧрдВрднреАрд░ рд╕рд┐рд░рджрд░реНрдж рдХреЗ рдмрд┐рдирд╛ рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХреЗ, рдЖрдкрдХреЛ рдПрдХ рд╕рд╛рдорд╛рдиреНрдп рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдлрд╝рд╛рдЗрд▓ рдмрдирд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдЪрд░реЛрдВ рдФрд░ рдХреБрдЫ рдирд╣реАрдВ рд╣реЛрдЧрд╛ред рдорд╛рдирдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП рдХреЙрдиреНрдлрд┐рдЧрд░ рдХреНрд▓рд┐рдВрдЬрд┐рдВрдЧ:

Import-Module $MinecraftPath\config.ps1 -Force

рд╣рдореЗрдВ рд╕рдмрд╕реЗ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдмрд╛рдд рдмрддрд╛рдиреЗ рдХреА рдЬрд░реВрд░рдд рд╣реИред рдЬреЛ рдбреЛрдореЗрди рдЯреИрдк рдХрд┐рдпрд╛ рдЬрд╛ рд░рд╣рд╛ рд╣реИ рд╡рд╣ рдирд┐рдпрдорд┐рдд рд╣реИ рдЬреЛ рдЦрд┐рд▓рд╛рдбрд╝реА рдХреЗ рдЙрдкрдирд╛рдо рдХреА рддрд▓рд╛рд╢ рдореЗрдВ рд╣реИ, рдЖрдЙрдЯрдкреБрдЯ рдХреЗ рд▓рд┐рдП рд╕рдВрд╕реНрдХрд░рдг рд╕реЗ рд╕рдВрд╕реНрдХрд░рдг рдореЗрдВ рднрд┐рдиреНрди рд╣реЛ рд╕рдХрддрд╛ рд╣реИ, рдФрд░ рдкрд╛рд╕рд╡рд░реНрдб rcon рд╕реЗ рд╣реИред

рдпрд╣ рдЗрд╕ рддрд░рд╣ рджрд┐рдЦ рд░рд╣рд╛ рд╣реИ:

#,    
$DomainName = "localhost"
 
# ,      
# ,  
$RegExp = "of player ([^ ]+)"
#    ,   ,  .
$RegExpCut = "of player "
 
#  rcon,     server.properties
$rconPassword = "123"

рд╕рд░реНрд╡рд░ рдлрд╝реЛрд▓реНрдбрд░ рдореЗрдВ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдХреЛ рд░рдЦрдирд╛ рд╡рд╛рдВрдЫрдиреАрдп рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рд░реВрдЯ-рдорд╛рдЗрдирдХреНрд░рд╛рдлреНрдЯрдкрде рдореЗрдВ рдЗрд╕рдХреА рддрд▓рд╛рд╢ рдХрд░ рд░рд╣реА рд╣реИ

рдпрд╣ рд╕рдм рдХреИрд╕реЗ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ?


рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рдпреЗ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рд░реВрдб рдорд╛рд░реНрдХреЗрдЯрдкреНрд▓реЗрд╕ рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХреЗ рд▓рд┐рдП рд╕реНрдерд╛рдкрд┐рдд рдФрд░ рддреИрдпрд╛рд░ рд╣реИрдВ , рд▓реЗрдХрд┐рди рдЕрдЧрд░ рдЖрдкрдиреЗ рдЕрднреА рддрдХ рдХреНрд▓рд╛рдЗрдВрдЯ рдирд╣реАрдВ рдмрдирд╛рдпрд╛ рд╣реИ рдпрд╛ рдЫрд╡рд┐ рдХреА рдХреЛрд╢рд┐рд╢ рдирд╣реАрдВ рдХреА рд╣реИ, рддреЛ рдпрд╣рд╛рдВ рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рдореЗрдВ рд╕рднреА рдлрд╛рдЗрд▓реЛрдВ рдХрд╛ рд▓рд┐рдВрдХ рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ , рдЬреЛ рдХрд░рдиреЗ рдореЗрдВ рд╕рдВрдХреЛрдЪ рдирд╣реАрдВ рдХрд░рддреЗред 

  1. PowerShell 7 рдХреЛ рдбрд╛рдЙрдирд▓реЛрдб рдФрд░ рдЗрдВрд╕реНрдЯреЙрд▓ рдХрд░реЗрдВ
  2. рдбрд╛рдЙрдирд▓реЛрдб рдХрд░реЗрдВ рдФрд░ рдореЙрдбреНрдпреВрд▓ рд╕рдВрдЧреНрд░рд╣ рдХреЛ рдЕрдирдЬрд╝рд┐рдк рдХрд░реЗрдВ


рдЕрдм рд╕рднреА рдЖрд╡рд╢реНрдпрдХ рдореЙрдбреНрдпреВрд▓ рдФрд░ рдХрдорд╛рдВрдб рджрд┐рдЦрд╛рдИ рджрд┐рдП рд╣реИрдВред рд╡реЗ рдХреНрдпрд╛ рдХрд░ рд░рд╣реЗ рд╣реИрдВ?

рд╕реНрдЯрд╛рд░реНрдЯ-Minecraft


рд╡рд┐рдХрд▓реНрдк:

-рдЯрд╛рдЗрдк
рдлреЛрд░реНрдЬ рдпрд╛ рд╡реЗрдирд┐рд▓рд╛ред рдпрд╣ рд╕рд░реНрд╡рд░ рдпрд╛ рд╕рд░реНрд╡рд░ рд╕реЗ рд╢реБрд░реВ рд╣реЛрддрд╛ рд╣реИред рдЬрд╛рд░ рдпрд╛ рдлреЛрд░реНрдЬ, рдлрд╝реЛрд▓реНрдбрд░ рдореЗрдВ рдирд╡реАрдирддрдо рд╕рдВрд╕реНрдХрд░рдг рдХреЛ рдЪреБрдирдирд╛ред

-MinecraftPath
рдЙрд╕ рдлрд╝реЛрд▓реНрдбрд░ рдХреЛ рдЗрдВрдЧрд┐рдд рдХрд░рддрд╛ рд╣реИ рдЬрд╣рд╛рдВ рд╕реЗ рд╕рд░реНрд╡рд░ рд▓реЙрдиреНрдЪ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред

-LogFile
рд▓реЙрдЧреНрд╕ рдХреЛ рдЗрдХрдЯреНрдард╛ рдХрд░рдиреЗ рдХрд╛ рдПрдХ рд╡реИрдХрд▓реНрдкрд┐рдХ рддрд░реАрдХрд╛ред рдПрдХ рдлрд╝рд╛рдЗрд▓ рдХреЛ рдЗрдВрдЧрд┐рдд рдХрд░рддрд╛ рд╣реИ рдЬрд┐рд╕рдореЗрдВ рдХрдВрд╕реЛрд▓ рдореЗрдВ рджрд┐рдЦрд╛рдИ рджреЗрдиреЗ рд╡рд╛рд▓реА рд╕рдм рдХреБрдЫ рд▓рд┐рдЦрд╛ рдЬрд╛рдПрдЧрд╛ред

-StartPaymentListener
рд╕рд░реНрд╡рд░ рдХреЗ рд╕рд╛рде, рдпрд╣ рднреБрдЧрддрд╛рди рд╢реБрд░реВ рдХрд░рддрд╛ рд╣реИ рдФрд░ рд╕реНрд╡реАрдХрд╛рд░ рдХрд░рддрд╛ рд╣реИред рднреБрдЧрддрд╛рди рд╕реНрд╡реАрдХреГрддрд┐ рд╕реНрд╡рдпрдВ рдПрдХ рдЕрд▓рдЧ рдореЙрдбреНрдпреВрд▓ рдХреЗ рд░реВрдк рдореЗрдВ рдЙрдкрд▓рдмреНрдз рд╣реИред рд╕реНрдЯрд╛рд░реНрдЯ-рд╡реЗрдмрд▓рд┐рд╕реНрдЯ рдУрдкрдирд░ рдХреЛ рдмрджрд▓ рджреЗрддрд╛ рд╣реИ

рд╕реНрдЯрд╛рд░реНрдЯ-weblistener


рднреБрдЧрддрд╛рди рд╕реНрд╡реАрдХреГрддрд┐ рдореЙрдбреНрдпреВрд▓ рд╢реБрд░реВ рдХрд░рддрд╛ рд╣реИред

-MinecraftPath
рдХреЙрдиреНтАНрдлрд╝рд┐рдЧрд░ рдлрд╝рд╛рдЗрд▓ рд╡рд╛рд▓реЗ рдлрд╝реЛрд▓реНрдбрд░ рдХреЛ рдЗрдВрдЧрд┐рдд рдХрд░рддрд╛ рд╣реИред

-StopToken WebListener'a
рдХреЛ рд░реЛрдХрдиреЗ рдХреЗ рд▓рд┐рдП HTTP HTTP рдкреЛрд╕реНрдЯ рдЕрдиреБрд░реЛрдз рдХреЛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рддрд╛ рд╣реИред

рдирд┐рд╖реНрдХрд░реНрд╖:


рдЦреИрд░, рдЪрдорддреНрдХрд╛рд░ рд╣реЛрддрд╛ рд╣реИред


All Articles