2016-06-26 13 views
0

私はpowershellを使ってchannel9からビデオシリーズをダウンロードしようとしていますが、最初のファイルでこのエラーが発生します。私はそのパイプ文字だと思っていますが、テストパス:パスに不正な文字があります

function Get-Media 
{ 
    [CmdletBinding()] 
    param 
    (
     [Object] 
     $url, 
     [Object] 
     $title, 
     [Object] 
     $path 
    ) 

    $u = New-Object System.Uri($url) 
    $name = $title 
    $extension = [System.IO.Path]::GetExtension($u.Segments[-1]) 
    $fileName = $name + $extension 

    $fileName = $fileName -replace "’", '' 
    $fileName = $fileName -replace "\?", '' 
    $fileName = $fileName -replace ":", '' 
    $fileName = $fileName -replace '/', '' 
    $fileName = $fileName -replace ",", '' 
    $fileName = $fileName -replace '"', '' 
    $fileName = $fileName -replace '|', '' 
    $fileName = $fileName -replace '\#', '' 
    $fileName = $fileName -replace '-', '' 

    $fileName 

    if (Test-Path($fileName)) { 
     Write-Host 'Skipping file, already downloaded' -ForegroundColor Yellow 
    } 
    else 
    { 
     Invoke-WebRequest $url -OutFile (Join-Path -Path $path -ChildPath $fileName) 
    } 
} 

function Get-VideosFromFeed 
{ 
    [CmdletBinding()] 
    param 
    (
     [Object] 
     $feedUrl, 
     [Object] 
     $folder, 
     [Object] 
     $path 
    ) 

    $feed=[xml](New-Object System.Net.WebClient).DownloadString($feedUrl) 

    $downloadPath = (Join-Path -Path $path -ChildPath $folder) 

    if (Test-Path($downloadPath)) { 
     Write-Host 'Skipping folder, already exists' -ForegroundColor Yellow 
    } 
    else 
    { 
     New-Item -Path $downloadPath -ItemType directory -WarningAction SilentlyContinue 
    } 

    foreach($i in $feed.rss.channel.item) { 
     foreach($m in $i.group){ 
      foreach($u in $m.content ` 
        | Where-Object { ` 
          $_.url -like '*mid.mp4' ` 
         } | Select-Object -Property @{Name='url'; Expression = {$_.url}}, ` 
                @{Name='title'; Expression = {$i.title}}) 
      { 
       Get-Media -url $u.url -title $u.title -path $downloadPath 
      } 
     } 
    } 
} 

$physicalPath = "D:\Videos\Series" 

Get-VideosFromFeed -feedUrl 'https://channel9.msdn.com/Blogs/azurestack/feed/mp4high'                   -path $physicalPath -folder 'azurestack' 
+0

エラーの発生場所はわかりません。あなたの質問に正確なエラーメッセージを表示してください。 –

+0

最初のビデオをダウンロードする際にエラーが発生しました。コード全体をコピーしてコピーしてください。 –

+0

@EstebanV下の提案を試しましたか? –

答えて

2

は、あなたがコードのこの奇妙な作品を交換する必要があります厳密なプロキシであり、プロセス全体をテストすることはできませんが、少なくとも「パスの不正な文字」エラーは表示されません。

あなたはすべてのものを交換する必要はありません。英字のみ:<>:"/\|?*naming rulesに従います。だから、より良い正規表現パターンは次のようにする必要があります:-replace '\<|\>|:|"|/|\\|\||\?|\*', ''

+0

は今晩後半にテストしてお知らせします。 –

1

$ Folderパラメータまたは$ Pathパラメータを指定せずにGet-VideosFromFeedを呼び出すようです。

デフォルト値を設定するか、関数を呼び出すときに値を渡す必要がある場合があります。

このようにそれを呼び出して試してみてください。これにより

$fileName = $fileName -replace "’", '' 
$fileName = $fileName -replace "\?", '' 
$fileName = $fileName -replace ":", '' 
$fileName = $fileName -replace '/', '' 
$fileName = $fileName -replace ",", '' 
$fileName = $fileName -replace '"', '' 
$fileName = $fileName -replace '|', '' 
$fileName = $fileName -replace '\#', '' 
$fileName = $fileName -replace '-', '' 

$fileName = $fileName -replace '(-|#|\||"|,|/|:|â|€|™|\?)', '' 

私は後ろに仕事

私は信じて
Get-VideosFromFeed -feedUrl 'https://channel9.msdn.com/Blogs/azurestack/feed/mp4high' -folder "Folder" -Path "C:\Path" 
+0

全体の行を貼り付けなかったようですが、パラメータはそこにあります、スクリプト全体を実行しようとしましたか?最初のビデオで私のために働いたことを私に見せてもらえますか? –

+0

私はチェックしましたが、コードは大丈夫ですが、右にスクロールしてすべてをコピー&ペーストしてください。あなたは、RSSフィードから最初のビデオをダウンロードするときにエラーが発生します。 Get-VideosFromFeed -feedUrl 'https://channel9.msdn.com/Blogs/azurestack/feed/mp4high' -path $ physicalPath -folder 'azurestack' –

1

この行は何もしません。

$fileName = $fileName -replace '|', '' 

-replaceする最初の引数は正規表現です。これは、$ fileNameのすべての空の文字列を見つけ出し、空の文字列で置き換えます。一群のCPUサイクルを無駄にするだけでなく、これは効果がありません。

正規表現内のパイプ文字をエスケープする必要があります。

$fileName = $fileName -replace '\|', '' 
関連する問題