2015-06-12 2 views
7

Sto cercando di eseguire arricciatura per caricare un file nel mio script, l'utilizzo di batch è stato doloroso perché ho bisogno di fare manipolazione di stringhe etc, quindi mi sono rivolto a PowerShell.Esecuzione di curl tramite powershell - come costruire gli argomenti?

Tuttavia io non riesco a ottenere PowerShell per eseguire Curl:

$hash = "test" 
$fileToUpload = "hello world.txt" 
$user = "user" 
$password = "passy" 
curl --ftp-create-dirs -T $fileToUpload -u ${user}:${pass} ftp://example.com/$hash/$fileToUpload 

Questo si traduce in:

Invoke-WebRequest : Parameter cannot be processed because the parameter name 'T' is ambiguous. Possible matches include: 
-TimeoutSec -TransferEncoding. 
At line:5 char:24 
+ curl --ftp-create-dirs -T $fileToUpload -u ${user}:${pass} ftp://example.com/$ha ... 
+      ~~ 
    + CategoryInfo   : InvalidArgument: (:) [Invoke-WebRequest], ParameterBindingException 
    + FullyQualifiedErrorId : AmbiguousParameter,Microsoft.PowerShell.Commands.InvokeWebRequestCommand 

Curl.exe è nel mio percorso.

+6

'curl' ->' curl.exe' – PetSerAl

+0

eh .. perché fa quel lavoro? – paulm

+2

Per aggiungere a cosa ha detto @PetSerAl - quando si chiama "curl", viene mappato come alias al cmdlet Invoike-WebRequest. Utilizzare "curl.exe" per chiamare l'eseguibile del ricciolo. Puoi confermarlo con: Get-Alias ​​-name curl – dugas

risposta

15

In PowerShell curl è un build in alias del cmdlet Invoke-WebRequest. E gli alias hanno priorità nella risoluzione dei comandi. Per risolvere il problema si dispone di più specifiche, utilizzare curl.exe anziché curl, quindi il comando non è stato risolto in alias. Oppure puoi rimuovere l'alias Remove-Item alias:curl, ma dato che è costruito in alias devi inserire questo comando nel tuo profilo, o richiamarlo in ogni sessione.

Se non siete sicuri di come PowerShell risolvere il comando, allora è possibile utilizzare Get-Command cmdlet:

Get-Command curl 
Get-Command curl.exe 
+0

È inoltre possibile verificare se esiste un alias per un determinato nome di comando eseguendo "Get-Alias ​​-Nome yourcommand'. –

+0

@AnsgarWiechers Intendi '-Definition'? 'Get-Alias ​​-Definition Invoke-WebRequest' – PetSerAl

+2

Intendevo' -Name': 'Get-Alias ​​-Name curl'. Probabilmente avrei dovuto dire "per verificare se per un determinato nome di comando esiste un alias con lo stesso nome". –