Initial SFERA platform baseline
This commit is contained in:
@@ -0,0 +1,82 @@
|
||||
param(
|
||||
[Parameter(Mandatory = $true)]
|
||||
[string]$ServerUrl,
|
||||
|
||||
[string]$ApiUrl = "",
|
||||
|
||||
[Parameter(Mandatory = $true)]
|
||||
[string]$AgentId,
|
||||
|
||||
[string]$TaskName = "SferaWindowsAgent",
|
||||
|
||||
[string]$ServiceName = "SferaWindowsAgent",
|
||||
|
||||
[string]$InstallDir = "C:\ProgramData\SFERA\WindowsAgent",
|
||||
|
||||
[string[]]$NetworkRoot = @()
|
||||
)
|
||||
|
||||
$ErrorActionPreference = "Stop"
|
||||
|
||||
if (-not ([Security.Principal.WindowsPrincipal] [Security.Principal.WindowsIdentity]::GetCurrent()).IsInRole([Security.Principal.WindowsBuiltInRole]::Administrator)) {
|
||||
throw "Run this installer in PowerShell as Administrator."
|
||||
}
|
||||
|
||||
$sourceScript = Join-Path $PSScriptRoot "sfera-windows-agent.ps1"
|
||||
if (!(Test-Path -LiteralPath $sourceScript -PathType Leaf)) {
|
||||
throw "Agent script not found: $sourceScript"
|
||||
}
|
||||
|
||||
New-Item -ItemType Directory -Force -Path $InstallDir | Out-Null
|
||||
$targetScript = Join-Path $InstallDir "sfera-windows-agent.ps1"
|
||||
$configPath = Join-Path $InstallDir "agent-config.json"
|
||||
Copy-Item -LiteralPath $sourceScript -Destination $targetScript -Force
|
||||
$config = [ordered]@{
|
||||
server_url = $ServerUrl.TrimEnd("/")
|
||||
api_url = $ApiUrl.TrimEnd("/")
|
||||
agent_id = $AgentId
|
||||
poll_seconds = 5
|
||||
network_roots = @($NetworkRoot)
|
||||
}
|
||||
$config | ConvertTo-Json -Depth 8 | Set-Content -LiteralPath $configPath -Encoding UTF8
|
||||
|
||||
$existingTask = Get-ScheduledTask -TaskName $TaskName -ErrorAction SilentlyContinue
|
||||
if ($existingTask) {
|
||||
Stop-ScheduledTask -TaskName $TaskName -ErrorAction SilentlyContinue
|
||||
Unregister-ScheduledTask -TaskName $TaskName -Confirm:$false
|
||||
}
|
||||
|
||||
$arguments = @(
|
||||
"-STA",
|
||||
"-NoProfile",
|
||||
"-WindowStyle", "Hidden",
|
||||
"-ExecutionPolicy", "Bypass",
|
||||
"-File", "`"$targetScript`"",
|
||||
"-ConfigPath", "`"$configPath`""
|
||||
)
|
||||
|
||||
$existing = Get-Service -Name $ServiceName -ErrorAction SilentlyContinue
|
||||
if ($existing) {
|
||||
sc.exe stop $ServiceName | Out-Null
|
||||
sc.exe delete $ServiceName | Out-Null
|
||||
Start-Sleep -Seconds 2
|
||||
}
|
||||
|
||||
$powerShellPath = Join-Path $env:SystemRoot "System32\WindowsPowerShell\v1.0\powershell.exe"
|
||||
if (!(Test-Path -LiteralPath $powerShellPath -PathType Leaf)) {
|
||||
$powerShellPath = Join-Path $PSHOME "powershell.exe"
|
||||
}
|
||||
$action = New-ScheduledTaskAction -Execute $powerShellPath -Argument ($arguments -join " ")
|
||||
$trigger = New-ScheduledTaskTrigger -AtLogOn -User "$env:USERDOMAIN\$env:USERNAME"
|
||||
$settings = New-ScheduledTaskSettingsSet -AllowStartIfOnBatteries -DontStopIfGoingOnBatteries -ExecutionTimeLimit ([TimeSpan]::Zero) -RestartCount 3 -RestartInterval (New-TimeSpan -Minutes 1)
|
||||
$principal = New-ScheduledTaskPrincipal -UserId "$env:USERDOMAIN\$env:USERNAME" -LogonType Interactive -RunLevel Highest
|
||||
Register-ScheduledTask -TaskName $TaskName -Action $action -Trigger $trigger -Settings $settings -Principal $principal -Description "SFERA bridge between local 1C/EDT/network folders and SFERA server." -Force | Out-Null
|
||||
Start-ScheduledTask -TaskName $TaskName
|
||||
|
||||
Write-Host "Installed and started scheduled task $TaskName."
|
||||
Write-Host "ServerUrl=$ServerUrl"
|
||||
Write-Host "AgentId=$AgentId"
|
||||
Write-Host "Config=$configPath"
|
||||
if ($NetworkRoot.Count -gt 0) {
|
||||
Write-Host "NetworkRoot=$($NetworkRoot -join ', ')"
|
||||
}
|
||||
File diff suppressed because it is too large
Load Diff
Reference in New Issue
Block a user