Acesso ao SQL Server Agent negado no comando de registro remoto do Powershell

1

Estou tendo problemas para executar um script do Powershell durante uma etapa de trabalho do SQL Server Agent. Meus comandos do powershell basicamente se conectam a uma máquina remota (dentro do mesmo domínio) para gravar um único valor no registro. A partir da máquina SQL, eu posso executar manualmente o script Powershell localmente (a partir da interface Powershell ISE) com sucesso, então eu sei que funciona. O problema está em algum lugar nas permissões do Agente do SQL Server na caixa remota, mas não tenho a menor idéia nesta área.

Este comando do Powershell funcionará na minha etapa de trabalho do SQL Agent se eu usar a máquina raiz "."

# Access the DBQ registry setting for pausing
$HKLM = 2147483650 #HKEY_LOCAL_MACHINE
$reg = [wmiclass]'\.\root\default:StdRegprov'
$key = "SOFTWARE\MySoftwareApplication"
$name = "PauseModule"
$value = "1"
$reg.SetStringValue($HKLM, $key, $name, $value)

Meu problema é que recebo uma exceção quando especifico a máquina de destino remota da seguinte forma:

$reg = [wmiclass]'\XXX.XX.XXX.XXX\root\default:StdRegprov'

Aqui está a exceção:

Executed as user: DB-MAIN\SYSTEM. A job step received an error at line 4 in a PowerShell script. The corresponding line is '$reg = [wmiclass]'\XXX.XX.XXX.XXX\root\default:StdRegprov''. Correct the script and reschedule the job. The error information returned by PowerShell is: 'Cannot convert value "\XXX.XX.XXX.XXX\root\default:StdRegprov" to type "System.Management.ManagementClass". Error: "Access is denied. (Exception from HRESULT: 0x80070005 (E_ACCESSDENIED))" '. Process Exit Code -1. The step failed.

Eu tentei habilitar portas e programas de firewall (em servidores de destino e de origem) sem sorte. Funciona manualmente mas não automatizado em SQL, o que dá?

    
por D3vtr0n 14.10.2011 / 00:19

2 respostas

1

Isso ocorre porque o script está sendo executado com o serviço do SQL Agent e esse serviço está sendo executado com uma conta local.

Você deve alterar a conta do serviço que deve executar o script, usando services.msc , para um do seu domínio com privilégios nos outros servidores.

    
por 17.10.2011 / 20:23
1

De acordo com o texto de descrição do exeception, o seu script é executado a partir da conta "Local System" incorporada (NT AUTHORITY \ SYSTEM). Esta é uma conta poderosa que tem acesso total ao computador, mas não tem nenhum direito de acessar a rede.

O seu problema: [WMIClass] “\ nome_do_computador \ raiz \ padrão: StdRegProv” não retorna um Objeto-Wmi, mas uma Classe-Wmi + ao usar o acelerador de tipo [WMIClass] não é possível fornecer credenciais para a máquina remota.

No Powershell v.2 Microsoft suporte WMI aprimorado e você pode tentar alterar o script com alguns parâmetros adicionais para especificar as credenciais necessárias para acesso remoto (algo como isto: $ reg = get-wmiobject -list -namespace root \ default -computername $ computer -credential domínio \ user | where-object {$ _. name -eq "StdRegProv"}

Esse retorno é a classe WMI StdRegProv na raiz do namespace \ default, como o comando Accelerator do tipo WMI.

    
por 17.10.2011 / 20:12