Sei que posso baixar e instalar a biblioteca mencionada (wget para Windows), mas minha pergunta é a seguinte:
No Windows PowerShell, existe uma alternativa nativa para wget
?
Eu preciso wget
simplesmente recuperar um arquivo de uma determinada URL com HTTP GET. Por exemplo:
wget http://www.google.com/
Respostas:
Aqui está um simples single-liner do PS 3.0 e posterior que funciona e não envolve muito barf PS:
Observe que:
wget
é um apelido paraInvoke-WebRequest
Nas instalações do Windows Server Core, você precisará escrever isso como
Antes de 20 de setembro de 2014, sugeri
como resposta. No entanto, isso não funciona em todos os casos, pois o
>
operador (que é um alias paraOut-File
) converte a entrada em Unicode.Se você estiver usando o Windows 7, precisará instalar a versão 4 ou mais recente do Windows Management Framework.
Você pode achar que fazer isso
$ProgressPreference = "silentlyContinue"
antesInvoke-WebRequest
melhorará significativamente a velocidade de download com arquivos grandes; essa variável controla se a interface do usuário de progresso é renderizada.fonte
Se você apenas precisar recuperar um arquivo, poderá usar o método DownloadFile do objeto WebClient :
Onde
$url
é uma string que representa a URL do arquivo e$path
representa o caminho local em que o arquivo será salvo.Observe que
$path
deve incluir o nome do arquivo; não pode ser apenas um diretório.fonte
(new-object System.Net.WebClient).DownloadFile( '$url, $path)
pois é a melhor correspondênciawget
que vi até agora. Obrigado!$client.DownloadFile( "http://blog.stackexchange.com/", "c:/temp2/_Download.html")
(new-object System.Net.WebClient).DownloadData($url) | Out-Null
Existe
Invoke-WebRequest
na próxima versão 3 do PowerShell:fonte
dd
...-Outfile
parâmetro parece estranho quando você pode apenas usar>
(para substituir) ou>>
(para acrescentar) a um arquivo.wget
se :)wget
ecurl
está alternadamente comInvoke-WebRequest
(iwr
) por padrão: DÉ um pouco confuso, mas há uma postagem no blog que fornece instruções para o download de arquivos.
Como alternativa (e eu recomendo), você pode usar o BITS:
Ele mostrará o progresso e fará o download do arquivo no diretório atual.
fonte
Start-BitsTransfer : Access is denied. (Exception from HRESULT: 0x80070005 (E_ACCESSDENIED))
. Estou intrigado: |Uma linha do PowerShell V4:
ou
Essa é basicamente a única linha V3 de Warren (impressionante) (obrigado por isso!) - com apenas uma pequena alteração para fazê-la funcionar em um V4 PowerShell.
O one-liner de Warren - que simplesmente usa
wget
e nãoiwr
- ainda deve funcionar para a V3 (pelo menos, eu acho; no entanto, não a testei). De qualquer forma. Mas ao tentar executá-lo em um V4 PowerShell (como tentei), você verá o PowerShell falhando ao resolverwget
como um cmdlet / programa válido.Para os interessados, isso é - como eu peguei no comentário de Bob em resposta à resposta aceita (obrigado, cara!) - por causa do PowerShell V4,
wget
e com ocurl
aliasInvoke-WebRequest
, definido comoiwr
padrão . Assim,wget
não pode ser resolvido (assim comocurl
não pode funcionar aqui) .fonte
Aqui está uma função do PowerShell que resolve URLs curtos antes de baixar o arquivo
Use-o assim para baixar o arquivo para a pasta atual:
Ou, para baixar o arquivo para uma pasta especificada:
fonte
A função a seguir receberá um URL.
Alguns comentários:
(New-Object Net.WebClient).DownloadFile($url, $path)
funciona bem.if (!$path) {...}
seção trata do caso simples em que você deseja fazer o download do arquivo no diretório atual usando o nome fornecido no URL.fonte
Use o shell do Windows 10 bash, que inclui o wget assim que o recurso do Windows estiver configurado.
Como instalar o Ubuntu bash shell no Windows:
YouTube: Executando o Bash no Ubuntu no Windows!
Documentação do subsistema Windows para Linux
fonte
Se o seu Windows for novo o suficiente (como a versão 1809 ou mais recente), há uma curvatura "real" disponível. curl tem a opção de linha de comando "-O" (letra maiúscula O; letras minúsculas não fazem o mesmo!) A opção "-O", ou "-remote-name" informa ao curl, que o arquivo salvo obtém o mesmo nome que a parte do nome do arquivo da URL.
É necessário iniciar isso como "curl.exe", para discerni-lo a partir do alias "curl" para "Invoke-WebRequest". Aliás, ele funciona no cmd.exe sem alterações.
Usando o mesmo exemplo que em outra resposta aqui
(O site não permitirá que eu adicione isso como um comentário, já que aparentemente eu preciso de mais "reputação" para isso - então obtém uma nova resposta)
fonte
O parâmetro Invoke-WebRequest com -outfile espera uma sequência, portanto, se o nome do arquivo começar com um número e não estiver entre aspas, nenhum arquivo de saída será criado.
por exemplo.
Invoke-WebRequest -Uri "http://www.google.com/" -outfile "2.pdf"
Isso não afeta os nomes de arquivos iniciados por uma letra.
fonte
wget
é uma abreviatura deInvoke-WebRequest
, e um semelhante ao acima)Isso deve funcionar para você contornar o material não inicializado pelo navegador. Observe o parâmetro "-UseBasicParsing".
fonte
-UseBasicParsing
.