Estou experimentando com a origem controlando meus trabalhos e agendas do SQL Agent como .json
arquivos e implantando-os com o conjunto de comandos dbatools SQL Agent .
Dado $sa = Get-Credential
e foo.config
da forma abaixo...
{
"Schedule": "Foo",
"Disabled": false,
"FrequencyType": "Weekly",
"FrequencyInterval": "EveryDay",
"FrequencySubdayType": "Time",
"FrequencySubdayInterval": 0,
"FrequencyRelativeInterval": "Unused",
"FrequencyRecurrenceFactor": 1,
"StartDate": "20180823",
"EndDate": "20181023",
"StartTime": "070000",
"EndTime": "235959"
}
A tentativa de usar foo.config
em uma solução falha na análise básica com a seguinte mensagem :
~> $foo = Get-Content foo.config | ConvertFrom-Json
~> New-DbaAgentSchedule @foo -ServerInstance "." -SqlCredential $sa
AVISO: [15:50:04][New-DbaAgentSchedule] Um agendamento não foi fornecido! Forneça um nome de programação.
Bem, isso é uma merda... Especialmente porque o seguinte funciona bem...
$bar = @{
Schedule= "Foo"
Disabled= $false
FrequencyType= "Weekly"
FrequencyInterval= "EveryDay"
FrequencySubdayType= "Time"
FrequencySubdayInterval= 0
FrequencyRelativeInterval= "Unused"
FrequencyRecurrenceFactor= 1
StartDate= "20180823"
EndDate= "20181023"
StartTime= "070000"
EndTime= "235959"
}
New-DbaAgentSchedule @bar -ServerInstance "." -SqlCredential $sa
Eu realmente não quero me incomodar digitando cada indivíduo ... -Param1 $foo.Param1 -Param2 $foo.Param2 ...
porque sou preguiçoso . Eu realmente prefiro espalhar meus arquivos de configuração nos vários comandos. Por que isso não funciona!!?!1!
Bem, há 4 horas atrás... se você tivesse se dado ao trabalho de inspecionar os tipos de
$foo
e$bar
, talvez não tivesse desperdiçado uma tarde inteira xingando alto na planta do seu escritório aberto enquanto rolava inutilmente pela documentação...Existe até uma solução conveniente e generalizada nesta mesma rede de perguntas e respostas para converter um
PSCustomObject
arquivoHashTable
.Fácil demais.
Então jogue fora, seu grande louco. E quando você terminar de se sentir estúpido, talvez compartilhe a solução on-line, caso ajude outra pessoa. E se você estiver se sentindo super proativo, talvez considere reservar algum tempo para contribuir com o módulo .
Uma coisa que você pode fazer é que há uma opção quando você converte de json para realmente convertê-lo em um hastable para você ... para que ele possa salvar algumas linhas de código.
Não tenho nenhum servidor acessível para confirmar, mas a saída do segundo comando mostra que é o formato de nome/valor:
Sendo que o acima só pode funcionar no PowerShell Core 6.1 (geralmente disponível agora), você precisará usar o módulo WindowsCompatibility para utilizar dbatools no PS Core. Você pode fazer isso usando o seguinte código no PS Core:
O segundo comando utiliza o WinRm para dar suporte à comunicação remota implícita. O acima significa que você instalou o PowerShell Core em uma máquina Windows. A documentação mostra como fazer isso para uma máquina remota, se necessário.
A partir daí, você pode executar os comandos dbatools como desejar: