2015-06-08 2 views
2

Привет В основном я имею вопрос, мне нужно, чтобы загрузить аргументы, чтобы следующий код, расположенный на $URL & $Output, но мне нужно, чтобы работать с Join-Path, но каждый раз, когда я пытаюсь его ногами назад груз ошибки я новичок в этом, так что я стараюсь, чтобы все это заработало меня попросили сделать это моим боссом полностью из моей глубины, но никогда не было, чтобы уклоняться от вызоваPowerShell 3 Параметры

Function DownloadFileFromURL 
{ 
Add-Type -AssemblyName Microsoft.Visualbasic 
#$url = 'http://download.microsoft.com/download/F/4/2/F42AB12D-C935-4E65-9D98-4E56F9ACBC8E/wpilauncher.exe' 
$url = $args[0] 
$filename = Split-Path -leaf $url 
$output = Join-Path $args1 + $filename 
$response = [System.Net.WebRequest]::Create($url).GetResponse() 
$realurl = $response.ResponseUri.OriginalString 
$response.Close() 
(New-Object Net.WebClient).DownloadFile($url, $output) 


#################Time Taken To Download Files###################### 
$start_time = Get-Date 
Write-Output "Time taken: $((Get-Date).Subtract($start_time).Seconds) second(s)" 

} 

    DownloadFileFromURL ('http://download.microsoft.com/download/F/4/2/F42AB12D-C935-4E65-9D98-4E56F9ACBC8E/wpilauncher.exe','C:\Users\Martin.beardmore\Downloads\test') 

ошибки будучи Получено

Join-Path : Cannot bind argument to parameter 'Path' because it is null. 
At C:\Users\Martin.beardmore\Documents\Query download.ps1:6 char:21 
+ $output = Join-Path $args[1] + $filename 
+      ~~~~~~~~ 
    + CategoryInfo   : InvalidData: (:) [Join-Path], ParameterBindingValidationException 
    + FullyQualifiedErrorId : ParameterArgumentValidationErrorNullNotAllowed,Microsoft.PowerShell.Commands.JoinPathCommand 

Cannot convert argument "requestUri", with value: "System.Object[]", for "Create" to type "System.Uri": "Cannot convert the "System.Object[]" value of type "System.Object[]" to type 
"System.Uri"." 
At C:\Users\Martin.beardmore\Documents\Query download.ps1:7 char:1 
+ $response = [System.Net.WebRequest]::Create($url).GetResponse() 
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 
    + CategoryInfo   : NotSpecified: (:) [], MethodException 
    + FullyQualifiedErrorId : MethodArgumentConversionInvalidCastArgument 

You cannot call a method on a null-valued expression. 
At C:\Users\Martin.beardmore\Documents\Query download.ps1:9 char:1 
+ $response.Close() 
+ ~~~~~~~~~~~~~~~~~ 
    + CategoryInfo   : InvalidOperation: (:) [], RuntimeException 
    + FullyQualifiedErrorId : InvokeMethodOnNull 

Cannot convert argument "address", with value: "System.Object[]", for "DownloadFile" to type "System.Uri": "Cannot convert the "System.Object[]" value of type "System.Object[]" to type 
"System.Uri"." 
At C:\Users\Martin.beardmore\Documents\Query download.ps1:10 char:1 
+ (New-Object Net.WebClient).DownloadFile($url, $output) 
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 
    + CategoryInfo   : NotSpecified: (:) [], MethodException 
    + FullyQualifiedErrorId : MethodArgumentConversionInvalidCastArgument 

ответ

2

Вам нужно удалить + между путями, к которым вы хотите присоединиться. Посмотрите на синтаксис для Join-Path.

PS> Get-Command Join-Path -Syntax 

Join-Path [-Path] <string[]> [-ChildPath] <string> [-Resolve] [-Credential <pscredential>] [-UseTransaction] [<CommonParameters>] 

Вы должны использовать его как $output = Join-Path $args1 $filename

Кроме того, откуда $args1 родом? В функциях вы должны указать свои параметры. Порядок, в котором вы определяете их, будет тем, к которому они привязаны, поэтому они будут по-прежнему вести себя так же, как и аргументы, но с ними легче работать.

Function DownloadFileFromURL ($url, $folder) 
{ 
    Write-Host "URL: $url" 
    Write-Host "Folder: $folder" 
} 

Пример:

PS > DownloadFileFromURL stackoverflow.com c:\folder 
URL: stackoverflow.com 
Folder: c:\folder 

Вы также вызов функции неправильно. Запятая используется для отдельных объектов в массиве, так что DownloadFileFromURL ('http://download.microsoft.com/download/F/4/2/F42AB12D-C935-4E65-9D98-4E56F9ACBC8E/wpilauncher.exe','C:\Users\Martin.beardmore\Downloads\test') результаты:

$url = $args[0] = @('http://download.microsoft.com/download/F/4/2/F42AB12D-C935-4E65-9D98-4E56F9ACBC8E/wpilauncher.exe','C:\Users\Martin.beardmore\Downloads\test') 

Измените функцию, чтобы использовать параметры и назвать его, как я, как показано выше, и он должен работать.

Обновленный сценарий:

Function DownloadFileFromURL ($url, $destination) 
{ 
    Add-Type -AssemblyName Microsoft.Visualbasic 
    $filename = Split-Path -Leaf $url 
    $output = Join-Path $destination $filename 
    $response = [System.Net.WebRequest]::Create($url).GetResponse() 
    $realurl = $response.ResponseUri.OriginalString 
    $response.Close() 
    (New-Object Net.WebClient).DownloadFile($url, $output) 


    #################Time Taken To Download Files###################### 
    $start_time = Get-Date 
    Write-Output "Time taken: $((Get-Date).Subtract($start_time).Seconds) second(s)" 

} 

DownloadFileFromURL 'http://download.microsoft.com/download/F/4/2/F42AB12D-C935-4E65-9D98-4E56F9ACBC8E/wpilauncher.exe' 'C:\Users\Martin.beardmore\Downloads\test' 
#or even better 
#DownloadFileFromURL -url 'http://download.microsoft.com/download/F/4/2/F42AB12D-C935-4E65-9D98-4E56F9ACBC8E/wpilauncher.exe' -destination 'C:\Users\Martin.beardmore\Downloads\test' 
Смежные вопросы