Powershell | DownloadString | Site externo | Retorna


0

Eu sou totalmente novato em PowerShell, então seja indulgente;)

Estou tentando escrever um script em que uma máquina verifica um site externo aguardando a palavra: "test" para executar um download. As coisas são assim:

$Word = 'test'
$WebClientObject = New-Object Net.WebClient
$comment = "http://MySite.wordpress.com/comment_section/"
$WebClientObject.Headers.Add("User-Agent", "Mozilla/5.0 (Windows NT 6.2; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/32.0.1667.0 Safari/537.36)")

While($True) {
  $CommentResult = $WebClientObject.DownloadString($comment)
  $Found = $CommentResult.contains($Word)

  If ($Found) {
    IEX $WebClientObject.DownloadString('http://A_Server_That_Is_Accessible/Tasks_to_do')
    #Task_to_do and some blabla commands
    Return
  }
  Start-Sleep -Seconds 60
}

Estou executando o powershell 2.0. Windows7

O que aconteceu:

  • o download não é executado pela internet
  • não é um problema proveniente de IPs ou caminhos

O que eu fiz a seguir:

  • Escrevo diretamente os diferentes comandos no prompt do PowerShell:

-> while ($ True) inicia um loop sem fim sem sair dele.

Para fazer o truque, preciso "clicar duas vezes em retornar no meu teclado", o final do loop e o comando "downloadstring" finalmente são executados.

Ainda me lembro que sou mais que um novato, certo? :(

  • Tentei "quebrar" "retornar" ou "sair", mas é impossível sair do loop.
  • Tentei colocar muitos retornos de carro duplos no meu script também sem sucesso.

Alguém por favor me indica o caminho para fazer essa coisa simples ...? :)

Muito obrigado.

ATUALIZAÇÃO Essas pequenas linhas devem ser utilizadas por pessoas diferentes em lugares diferentes (esse é um dos motivos de um site deportado), e eu simplesmente não tenho a possibilidade de atualizar as máquinas remotas para uma versão mais recente do PowerShell. Se alguém tiver algum guru do PowerShell da Microsoft em seu contato, será apenas uma tremenda ajuda. Obrigado a todos vocês.


Realmente não entendo o que você está tentando fazer ... Você baixa uma página da Web, procura uma String e, se encontrado, está baixando outra página? É isso que você deseja alcançar? Por que você está repetindo repetidamente com o loop while? Se encontrado, baixe o arquivo e pronto, certo? Agora você está fazendo isso infinitamente.
Mwilczynski

Respostas:


0

Ok, aqui está um exemplo simples do que eu acho que você está tentando fazer:

$Path = New-Object System.Uri("http://localwire.pl/");
$WebClient = New-Object Net.WebClient;
$Word = "PhraseThatDoesNotExist"

While ($True){

    $Result = $WebClient.DownloadString($Path);
    $Found = $Result.Contains($Word);

    If ($Found){
        $Path = New-Object System.Uri("http://stackoverflow.com");
        $NewResult = $WebClient.DownloadString($Path);
        Write-Host "Found!"
        Break;
    } Else {
        Write-Host "Not found!"
    }
    Start-Sleep -s 5
}

Estamos baixando uma página da Web e, se ela contiver uma frase que estávamos procurando, estamos baixando a outra página. Espero ter entendido você direito. Caso contrário, informe-nos exatamente o que você precisa.


Obrigado por suas respostas e para ser mais claro: quero que uma palavra escrita em uma página da Web acione o download de um arquivo de outra máquina remota. A idéia é poder dirigir a partir do ponto A, ponto B, para procurar informações no ponto C. Eu uso um loop while para o ponto B é sempre "ouvir" as instruções fornecidas no ponto A. Eu quero isso a operação pode ocorrer no tempo de repetição. Mas eu faço isso provavelmente muito sem jeito. Muito obrigado pela sua ajuda.
tomah Grandjean

Ok, eu editei o código, agora aguarda 5s para verificar novamente. Não é a idéia mais bonita para ser honesto, mas faz o que você quer.
Mwilczynski

Infelizmente, isso não resolve o problema. Fico em um loop infinito que assumirá o controle de maneira sistemática. O que eu preciso é de uma palavra-chave, por exemplo, "teste" que acionou o download da ação. uma vez, mas a máquina está ouvindo a próxima ordem de download. Espero não ser muito confuso.
tomah Grandjean

para ser mais preciso e menos complicado: como tudo isso parece acima do meu nível: Quando inicio um loop while no intervalo do prompt do PowerShell, tenho esse símbolo >> que aparece (aguardando mais argumentos). Eu terminei meu loop com um "}". Mas o símbolo >> ainda está lá. Sou obrigado novamente a pressionar a tecla de retorno no teclado para tocar a ordem. Como posso fazer isso a partir de um script e não do prompt do PowerShell? Eu tentei colocar "Return" (no meu script inicial) após o "}". Nada. Nem com "Interromper" ou "Sair" em vez de "Retornar".
tomah Grandjean

Eu também tentei colocar 'r ou' n neste final do meu script sem mais sucesso ..
tomah Grandjean
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.