here is the bare script, with no function defined. I pass it a server FQDN and the -qa switch, which determines the management group the $serverfqdn gets its SCOM agent installed.
param(
[switch]$QA,
[parameter(mandatory=$true)][string]$ServerFQDN
)
if ($QA) {$mgmtservername=“sismgrq1”}
else {$mgmtservername=“sismgrp1”}
invoke-command -computername $MGMTservername -scriptblock {
import-module OperationsManager
$ManagementServer= Get-SCOMManagementServer | where {$_.Name -like “*$($args[1])”}
Install-SCOMAgent -PrimaryManagementServer $ManagementServer -DNSHostName $($args[0])
} -argumentlist $ServerFQDN,$mgmtservername
so running ".\script.ps1 -qa server.domain.com " installs a scom agent on server.domain.com, pointing at the QA SCOM server sismgrq1.
honestly this works fine for my purposes, but after attending, you know, certain teched 2014 sessions, I’m trying to learn to use functions and cmdletbinding and all that good stuff (step 2, after sheepishly removing a… ahem, handful of write-hosts from my scripts.)
so, wrapping this in a function, I came up with
param(
[switch]$QA,
[parameter(mandatory=$true)][string]$ServerFQDN
)
function install-scom-agent
{
[CmdletBinding()]
param(
[switch]$QA,
[parameter(mandatory=$true)][string]$ServerFQDN
)
if ($QA) {$mgmtservername=“sismgrq1”}
else {$mgmtservername=“sismgrp1”}
invoke-command -computername $MGMTserverName -scriptblock {
import-module OperationsManager
$ManagementServer= Get-SCOMManagementServer | where {$_.Name -like “*$($args[1])”}
Install-SCOMAgent -PrimaryManagementServer $ManagementServer -DNSHostName $($args[0])
} -argumentlist $ServerFQDN,$mgmtservername
}
if ($qa){install-scom-agent -QA $ServerFQDN}
else {install-scom-agent $ServerFQDN}
but that looks clunky even to me, especially with “if ($QA)” statements both inside the function and out…