Public/Install-ZabbixAgent.ps1
function Install-ZabbixAgent { param( [Parameter( ValueFromPipeline = $true, ValueFromPipelineByPropertyName = $true, Position = 0 )] [Switch]$EnableRemoteCommands, [Parameter( Mandatory = $true, ValueFromPipeline = $true, ValueFromPipelineByPropertyName = $true, Position = 1 )] [String]$Server, [Parameter( Mandatory = $true, ValueFromPipeline = $true, ValueFromPipelineByPropertyName = $true, Position = 2 )] [String]$ServerActive, [Parameter( Mandatory = $true, ValueFromPipeline = $true, ValueFromPipelineByPropertyName = $true, Position = 3 )] [String]$ComputerName, [System.Management.Automation.PSCredential] $Credential = $(Get-Credential) ) # $ErrorActionPreference = "Stop" $params = New-Object -TypeName System.Collections.Generic.List[`String]; # ENABLEREMOTECOMMANDS if ($EnableRemoteCommands) { $params.Add("ENABLEREMOTECOMMANDS=1"); } # SERVER if ($Server) { $params.Add("SERVER=$Server"); } # SERVERACTIVE if ($ServerActive) { $params.Add("SERVERACTIVE=$ServerActive"); } $out = Invoke-Command -ComputerName $ComputerName -Credential $Credential -ScriptBlock { param( [string]$instArgs ) $downloadPath = "c:\temp" $url = "https://www.zabbix.com/downloads/5.0.2/zabbix_agent-5.0.2-windows-amd64-openssl.msi" # Create download folder if (!(Test-path $downloadPath)) { mkdir $downloadPath } $file = $(Join-Path $downloadPath "zabbixagent5.msi") # Download if not exists if (!(Test-Path $file)) { Write-Host "Downloading zabbix agent installer to $file" Invoke-WebRequest $url -OutFile $file } # Log file $DataStamp = get-date -Format yyyyMMddTHHmmss $logFile = '{0}-{1}.log' -f $file, $DataStamp # Arguments for MSI installer $MSIArguments = New-Object -TypeName System.Collections.Generic.List[`String]; $MSIArguments.Add("/i") # install $MSIArguments.Add('"{0}"' -f $file) # msi package to install $MSIArguments.Add("/qn") # quiet, no window $MSIArguments.Add("/norestart") # supress restart $MSIArguments.Add("/L*v") # Log verbose.. $MSIArguments.Add($logFile) #..to this file # Arguments for zabbix setup $instArgs.ForEach{ $MSIArguments.Add($_.Trim()) }; Write-Host "MSI args: $([string]::Join(" ", $MSIArguments))"; # Install $Out = Start-Process "msiexec.exe" -ArgumentList $MSIArguments -Wait -NoNewWindow Write-Host "Result: $Out" Write-Host "Installation completed" } -ArgumentList $([string]::Join(" ", $params)) Write-Host $out } # Install-ZabbixAgent -Server 192.168.15.101 -ServerActive 192.168.15.101 # $servers = Get-ADComputer -filter * -Properties operatingsystem | Where-Object { $_.operatingsystem -like "*server*" } #$servers.forEach{ # Write-Host "$($_.Name)" #} |