Question Activer/Desactiver Sql Server Jobs

Plus d'informations
il y a 5 mois 1 semaine - il y a 5 mois 1 semaine #34370 par Rambler
Bonjour tout le monde,

J'ai ecris ce script qui a pour role d'activer, desactiver et lancer des jobs Sql Server
Param (
 
    # Nom du job
    [Parameter(Position = 0)]
    [string[]]
    $JobName,
    # Action a faire
    [Parameter(Position = 1)]
    [ValidateSet('activate', 'disable', 'start')]
    [string]
    $Action
)
Set-ExecutionPolicy RemoteSigned -Scope CurrentUser
$MachineName = $env:COMPUTERNAME
$instanceName = (Get-Service -ComputerName $MachineName -Exclude "MSSQLFDLauncher*" `
    | Where-Object { ($_.Status -eq "Running") -and (($_.Name -eq 'MSSQLSERVER') -or ($_.Name -like '*MSSQL$*')) } `
    | Select-Object @{Name = "ComputerName"     ; Expression = { $_.MachineName.ToUpper() } },
    @{Name = "InstanceName" ; Expression = { $_.ServiceName -replace "MSSQL\$" } },
    @{Name = "ServerName"   ; Expression = { If ($_.ServiceName -eq 'MSSQLSERVER') { $_.MachineName.ToUpper() }
            Else { $($_.MachineName.ToUpper() + '\' + $_.ServiceName -replace "MSSQL\$") } }
    }).ServerName

function activateJob($JobName, $instanceName) {
    [System.Reflection.Assembly]::LoadWithPartialName("Microsoft.SqlServer.SMO") | Out-Null
    $server = New-Object -TypeName Microsoft.SqlServer.Management.Smo.Server($instanceName)
    Write-Host -ForegroundColor Green "Paramaters : Instance name is :$instanceName, Job name is: $JobName"
    $sqljob = $server.JobServer.Jobs[$JobName]
    if ($sqljob.IsEnabled) {
        $actualStatus = "active"
    }
    else {
        $actualStatus = "disable"
    }
    Write-Host -ForegroundColor Green "The job name $JobName is $actualStatus"
    if ($sqljob) {
        $sqljob.IsEnabled = $true
        $sqljob.Alter()
    }
}
function disableJob($JobName, $instanceName) {
    [System.Reflection.Assembly]::LoadWithPartialName("Microsoft.SqlServer.SMO") | Out-Null
    $server = New-Object -TypeName Microsoft.SqlServer.Management.Smo.Server($instanceName)
    Write-Host -ForegroundColor Green "Paramaters : Instance name is :$instanceName, Job name is: $JobName"
    $sqljob = $server.JobServer.Jobs[$JobName]
    if ($sqljob.IsEnabled) {
        $actualStatus = "active"
    }
    else {
        $actualStatus = "disable"
    }
    Write-Host -ForegroundColor Green "The job name $JobName is $actualStatus"
    if ($sqljob) {
        $sqljob | select *
        $sqljob.IsEnabled = $False
        $sqljob.Alter()
    }
}
function startJob($JobName, $instanceName) {
    [System.Reflection.Assembly]::LoadWithPartialName("Microsoft.SqlServer.SMO") | Out-Null
    $server = New-Object -TypeName Microsoft.SqlServer.Management.Smo.Server($instanceName)
    Write-Host -ForegroundColor Green "Paramaters : Instance name is :$instanceName, Job name is: $JobName"
    $sqljob = $server.JobServer.Jobs[$JobName]
    if ($sqljob) {
        $sqljob.start()
    }
}



if ($Action -eq 'activate') {
    TRY {
        Write-Host  "Trying to activate the SQL Server job: $JobName"
        activateJob -JobName $JobName -instanceName $instanceName
        Write-Host -ForegroundColor Green "The job $job was activated"
    }
    catch {
        Throw Write-Host -ForegroundColor Red "Activating the job $JobName was failed" -Exception $_.exception -PassThru
        break
    }
}
elseif ($Action -eq 'disable') {
    TRY {
         
        Write-Host  "Trying to disable the SQL Server job: $JobName"
        disableJob -JobName $JobName -instanceName $instanceName
        Write-Host -ForegroundColor Green "The job $job was disabled"
    }
    catch {
        Throw Write-Host -ForegroundColor Red "Disabling the job $JobName was failed" -Exception $_.exception -PassThru
        break
    }
}
elseif ($Action -eq 'start') {
    TRY {
        Write-Host  "Trying to start the SQL Server job: $JobName"
        startJob -JobName $JobName -instanceName $instanceName
        Write-Host -ForegroundColor Green "The job $job was started"
    }
    catch {
        Throw Write-Host -ForegroundColor Red "Starting the job $job was failed" -Exception $_.exception -PassThru
        break
    }
}
else {
    Write-Host -ForegroundColor Red "Invalid action parameter. Valid values are 'activate', 'disable', 'start'"
}

lorsque je voulais l'executer je tombe sur cette erreur
PS D:\Scripts> .\manageSqlServerJob.ps1 'IndexOptimize - USER_DATABASES' disable Trying to disable the SQL Server job: IndexOptimize - USER_DATABASES Paramaters : Instance name is :CPEMOSERV, Job name is: IndexOptimize - USER_DATABASES The job name IndexOptimize - USER_DATABASES is active Disabling the job IndexOptimize - USER_DATABASES was failed -Exception System.Management.Automation.RuntimeException: La propriété « IsEn abled » est introuvable dans cet objet. Vérifiez qu’elle existe et qu’elle peut être définie.    à System.Management.Automation.ExceptionHandlingOps.CheckActionPreference(FunctionContext funcContext, Exception exception)    à System.Management.Automation.Interpreter.ActionCallInstruction`2.Run(InterpretedFrame frame)    à System.Management.Automation.Interpreter.EnterTryCatchFinallyInstruction.Run(InterpretedFrame frame)    à System.Management.Automation.Interpreter.EnterTryCatchFinallyInstruction.Run(InterpretedFrame frame) -PassThru ScriptHalted Au caractère D:\Scripts\manageSqlServerJob.ps1:93 : 9 +         Throw Write-Host -ForegroundColor Red "Disabling the job $Job ... +         ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~     + CategoryInfo          : OperationStopped: ( , RuntimeException     + FullyQualifiedErrorId : ScriptHalted

Qui indique que la proprieté 'IsEnabled'  est introuvable dans l'objet
par contre dans ce code
if($sqljob.IsEnabled){         $actualStatus = "active"     } else {         $actualStatus = "disable"     }
j'ai pu la recuperer et l'afficher dans le console

The job name IndexOptimize - USER_DATABASES is active

mais lorsque je voulais la mettre en $true ou $false ca marche pas
de l'aide SVP
Dernière édition: il y a 5 mois 1 semaine par Rambler.

Connexion ou Créer un compte pour participer à la conversation.

Plus d'informations
il y a 5 mois 1 semaine #34380 par Arnaud Petitjean
Bonjour Rambler,

La propriété « IsEn abled » est introuvable dans cet objet.

Je constate un espace dans le nom de la propriété mais ton script semble correct, donc je pense que l'espace ici provient du copier/coller du message d'erreur...

As-tu essayé de mettre un point d'arrêt dans ta fonction et de regarder si la propriété est bien présente ?

Par ailleurs en lisant la doc : learn.microsoft.com/en-us/dotnet/api/mic...led?view=sql-smo-160 j'ai vu qu'il existait les méthodes Start et Stop. Peut-être que tu devrais les essayer à la place d'essayer de modifier la propriété isEnabled ?

Arnaud
PS : Merci de te présenter dans le forum adhoc. ;-)

MVP PowerShell et créateur de ce magnifique forum :-)
Auteur de 6 livres PowerShell aux éditions ENI
Fondateur de la société Start-Scripting
Besoin d'une formation PowerShell ?

Connexion ou Créer un compte pour participer à la conversation.

Temps de génération de la page : 0.100 secondes
Propulsé par Kunena