Invoke-Rest quebra script no PS 4.0

6

Eu tinha um script do Powershell que usava o Invoke-RestMethod que estava trabalhando no powershell 3.0. No entanto, fiz um upgrade para o powershell 4.0 para corrigir um bug no powershell 3. Quando fiz isso, meu script parece ter parado de funcionar.

$username = "Administrator" $password = "PASSWORD" $uri = "https://10.0.0.18/vmrest/users" $dictionary = New-Object "System.Collections.Generic.Dictionary[[String],[String]]" $base64AuthInfo = [Convert]::ToBase64String([Text.Encoding]::ASCII.GetBytes(("{0}:{1}" -f$username,$password))) $dictionary.Add("Authorization",$base64AuthInfo) Invoke-RestMethod -Uri $uri -Method GET -Headers $dictionary -Verbose

Quando ligo o interruptor detalhado, isso me dá essa resposta

VERBOSE: GET https://192.168.1.18/vmrest/users with 0-byte payload VERBOSE: received -1-byte response of content type

Eu também tentei especificar o tipo de conteúdo solicitado, mas sem dados $dictionary.Add("Accept","application/json") $dictionary.Add("Connection", "keep_alive")

    
por Brett G 12.08.2014 / 01:02

2 respostas

9

Uma coisa que se destaca em mim é que, como você está usando HTTPS, tenho certeza de que você deve estar recebendo erros de certificado, já que sua URL é um endereço IP.

Você precisa dizer ao Powershell (o .NET framework, na verdade) para ignorar erros de certificado. Ou então ele vai cagar em coisas como Invoke-WebRequest.

Tente isto:

[Net.ServicePointManager]::ServerCertificateValidationCallback = {$true}

É um retorno de chamada de validação de certificado personalizado que sempre retorna verdadeiro, portanto, ignorando problemas de certificado.

    
por 12.08.2014 / 03:14
1

Provavelmente não é uma resposta para o seu problema, mas outro ponto é que você não precisa construir cabeçalhos de autenticação básica:

$secPw = ConvertTo-SecureString $password -AsPlainText -Force
$cred = New-Object PSCredential -ArgumentList $username,$secPw

Invoke-RestMethod -Uri $uri -Method Get -Credential $cred

É especialmente útil se você solicitar credenciais de forma interativa porque pode usar apenas Get-Credential e acabar com isso.

    
por 12.08.2014 / 06:02