No momento, estou construindo um processo no Powershell
qual podemos copiar SQL Server Agent
trabalhos de um servidor para outro apenas inserindo os nomes dos servidores. O script usa a biblioteca SMO para obter acesso a ambos os servidores de trabalho, faz o script dos trabalhos que não existem no "outro" servidor e, em seguida, executa esses scripts (sob um SqlConnection e SqlCommand). A questão é como verificar se existe um trabalho em ServerOne
comparação com ServerTwo
.
Eu tentei quatro abordagens diferentes: construir uma matriz com as tarefas do ServerTwo (o servidor de comparação) e ver se essa matriz contains
é uma tarefa do ServerOne; Também tentei o operador like com a mesma lógica; e, usando arrays, usei Compare-Object
depois de carregar dois arrays com nomes de jobs de ambos os servidores e medir quais jobs não existem no outro (produz tudo também). Finalmente, percorri cada trabalho no ServerTwo e percorri cada trabalho no ServerOne para ver se eles são iguais (que é o código abaixo). Isso produzirá tudo porque cada trabalho não é igual a cada trabalho:
$ServerName = "S1\I"
$ComServer = "S2\I"
[System.Reflection.Assembly]::LoadWithPartialName("Microsoft.SqlServer.Smo") | Out-Null
$srv = New-Object "Microsoft.SqlServer.Management.Smo.Server" $ServerName
$com = New-Object "Microsoft.SqlServer.Management.Smo.Server" $ComServer
foreach ($a in $com.JobServer.Jobs)
{
$a = $a.Name.ToString()
foreach ($j in $srv.JobServer.Jobs)
{
$j = $j.Name.ToString()
if ($a -like $j)
{
Write-Host $j
}
}
}
Existe outra abordagem para isso onde eu possa verificar se existe um trabalho em um servidor versus outro (como uma observação, eu já sei como fazer o script do trabalho, executá-lo e assim por diante; a parte de garantir que o trabalho não já existe é o problema aqui)?