[Console]::OutputEncoding = [Text.Encoding]::UTF8 $ErrorActionPreference = "Stop" Set-ExecutionPolicy -Scope Process Bypass -Force Import-Module Posh-SSH $sec = ConvertTo-SecureString "0" -AsPlainText -Force $cred = New-Object PSCredential("tonycao", $sec) $s = New-SSHSession -ComputerName 192.168.58.7 -Credential $cred -AcceptKey -ConnectionTimeout 15 if (-not $s) { throw "SSH connect failed" } $files = @( @("C:\Users\tonycao\work\light\enet-validator\src\tests.rs", "~/enet-validator/src/tests.rs"), @("C:\Users\tonycao\work\light\enet-validator\src\aech.rs", "~/enet-validator/src/aech.rs"), @("C:\Users\tonycao\work\light\enet-validator\src\main.rs", "~/enet-validator/src/main.rs"), @("C:\Users\tonycao\work\light\enet-validator\src\dmxhash.rs", "~/enet-validator/src/dmxhash.rs") ) foreach ($f in $files) { $src = $f[0]; $dst = $f[1] $b64 = [Convert]::ToBase64String([IO.File]::ReadAllBytes($src)) $chunkSize = 6000 $chunks = [Math]::Ceiling($b64.Length / $chunkSize) $r = Invoke-SSHCommand -SSHSession $s -Command "rm -f /tmp/up.b64 && touch /tmp/up.b64" for ($i = 0; $i -lt $chunks; $i++) { $part = $b64.Substring($i * $chunkSize, [Math]::Min($chunkSize, $b64.Length - $i * $chunkSize)) $r = Invoke-SSHCommand -SSHSession $s -Command "echo '$part' >> /tmp/up.b64" } $r = Invoke-SSHCommand -SSHSession $s -Command "base64 -d /tmp/up.b64 > $dst && md5sum $dst" $localMd5 = (Get-FileHash $src -Algorithm MD5).Hash.ToLower() $remoteMd5 = ($r.Output -join "").Split(" ")[0] Write-Host ("{0}: {1}" -f (Split-Path $src -Leaf), $(if ($localMd5 -eq $remoteMd5) { "OK" } else { "MISMATCH!" })) } Write-Host "--- build on .7 ---" $r = Invoke-SSHCommand -SSHSession $s -Command "cd ~/enet-validator && ~/.cargo/bin/cargo build --release 2>&1 | tail -2" -TimeOut 300 Write-Host ($r.Output -join "`n") Write-Host "--- restart butler (NO relay - local G) ---" $r = Invoke-SSHCommand -SSHSession $s -Command "pkill -f 'enet-validator device'; sleep 1; cd ~/enet-validator && nohup ./target/release/enet-validator device 192.168.58.7 00161cf12e88 86400 > ~/butler.log 2>&1 & sleep 2; pgrep -af 'enet-validator device' | head -1" Write-Host ($r.Output -join "`n") Remove-SSHSession $s | Out-Null