No Powershell, estou enumerando os bancos de dados SQL da seguinte forma:
$SqlServers = @("SQL1", "SQL2") # SQL servers
foreach ($SqlServer in $SqlServers) {
$SqlBasePath = "SQLSERVER:\SQL\$SqlServer\"
foreach ($SqlInstanceName in (Get-ChildItem -Path $SqlBasePath -Name)) {
Write-Host "Processing $SqlInstanceName"
foreach ($SqlDatabase in (Get-ChildItem -Path $($SqlBasePath + $SqlInstanceName + "\Databases"))) {
Isso funciona muito bem a partir da linha de comando, como a conta de serviço que precisa executar esse script.
No entanto, ao executar a partir da tarefa agendada, acabo com erros de "acesso negado", fazendo com que a enumeração falhe.
(Exception from HRESULT: 0x80070005 (E_ACCESSDENIED))
WARNING: Could not obtain SQL Server Service information. An attempt to connect
to WMI on 'SQL1' failed with the following error: Access is denied.
A tarefa agendada é configurada para ser executada como a conta de serviço e "com os privilégios mais altos" para o valor dela.
O que poderia fazer com que acessar o WMI de uma tarefa agendada falhe ao contrário de executar diretamente com a mesma conta a partir da linha de comando e como corrigir isso?