Ответ 1
В вашем веб-запросе вызова просто используйте параметр -UseBasicParsing
например в вашем скрипте (строка 2) вы должны использовать:
$rss = Invoke-WebRequest -Uri $url -UseBasicParsing
Мне нужно загрузить канал 9 series с помощью powershell, однако скрипты, которые я пробовал, имеют ошибки:
Этот script
$url="https://channel9.msdn.com/blogs/OfficeDevPnP/feed/mp4high"
$rss=invoke-webrequest -uri $url
$destination="D:\Videos\OfficePnP"
[xml]$rss.Content|foreach{
$_.SelectNodes("rss/channel/item/enclosure")
}|foreach{
"Checking $($_.url.split("/")[-1]), we will skip it if it already exists in $($destination)"
if(!(test-path ($destination + $_.url.split("/")[-1]))){
"Downloading: " + $_.url
start-bitstransfer $_.url $destination
}
}
не удалось с ошибкой:
Содержимое ответа не может быть проанализировано, потому что механизм Internet Explorer недоступен, или конфигурация первого запуска Internet Explorer не завершена. Укажите параметр UseBasicParsing и повторите попытку.
Я тоже пробовал этот
# --- settings ---
$feedUrl = "https://channel9.msdn.com/blogs/OfficeDevPnP/feed/mp4high"
$mediaType = "mp4high"
$overwrite = $false
$destinationDirectory = join-path ([Environment]::GetFolderPath("MyDocuments")) "OfficeDevPnP"
# --- locals ---
$webClient = New-Object System.Net.WebClient
# --- functions ---
function PromptForInput ($prompt, $default) {
$selection = read-host "$prompt`r`n(default: $default)"
if ($selection) {$selection} else {$default}
}
function DownloadEntries {
param ([string]$feedUrl)
$feed = [xml]$webClient.DownloadString($feedUrl)
$progress = 0
$pagepercent = 0
$entries = $feed.rss.channel.item.Length
$invalidChars = [System.IO.Path]::GetInvalidFileNameChars()
$feed.rss.channel.item | foreach {
$url = New-Object System.Uri($_.enclosure.url)
$name = $_.title
$extension = [System.IO.Path]::GetExtension($url.Segments[-1])
$fileName = $name + $extension
$invalidchars | foreach { $filename = $filename.Replace($_, ' ') }
$saveFileName = join-path $destinationDirectory $fileName
$tempFilename = $saveFilename + ".tmp"
$filename
if ((-not $overwrite) -and (Test-Path -path $saveFileName))
{
write-progress -activity "$fileName already downloaded" -status "$pagepercent% ($progress / $entries) complete" -percentcomplete $pagepercent
}
else
{
write-progress -activity "Downloading $fileName" -status "$pagepercent% ($progress / $entries) complete" -percentcomplete $pagepercent
$webClient.DownloadFile($url, $tempFilename)
rename-item $tempFilename $saveFileName
}
$pagepercent = [Math]::floor((++$progress)/$entries*100)
}
}
# --- do the actual work ---
[string]$feedUrl = PromptForInput "Enter feed URL" $feedUrl
[string]$mediaType = PromptForInput "Enter media type`r`n(options:Wmv,WmvHigh,mp4,mp4high,zune,mp3)" $mediaType
$feedUrl += $mediaType
[string]$destinationDirectory = PromptForInput "Enter destination directory" $destinationDirectory
# if dest dir doesn't exist, create it
if (!(Test-Path -path $destinationDirectory)) { New-Item $destinationDirectory -type directory }
DownloadEntries $feedUrl
со слишком большим количеством ошибок
В вашем веб-запросе вызова просто используйте параметр -UseBasicParsing
например в вашем скрипте (строка 2) вы должны использовать:
$rss = Invoke-WebRequest -Uri $url -UseBasicParsing
Чтобы это работало без изменения ваших скриптов:
Я нашел решение здесь: http://wahlnetwork.com/2015/11/17/solving-the-first-launch-configuration-error-with-powershells-invoke-webrequest-cmdlet/
Ошибка, вероятно, появляется, потому что IE еще не был запущен в первый раз, открыв окно ниже. Запустите его и пройдите через этот экран, и сообщение об ошибке больше не будет появляться. Нет необходимости изменять какие-либо сценарии.
Это верно, потому что команда Invoke-WebRequest имеет зависимость от сборок Internet Explorer и вызывает ее для анализа результата в соответствии с поведением по умолчанию. Как утверждает Мэтт, вы можете просто запустить IE и сделать свой выбор в подсказке настроек, которая появляется при первом запуске. И ошибка, которую вы испытываете, исчезнет.
Но это возможно только в том случае, если вы запускаете скрипты powershell как те же пользователи Windows, с которыми вы запускали IE. Настройки IE хранятся в вашем текущем профиле окон. Поэтому, если вы, как и я, запускаете свою задачу в планировщике на сервере как пользователь SYSTEM, это не сработает.
Итак, здесь вам придется изменить свои сценарии и добавить аргумент -UseBasicParsing, как ijn в этом примере: $WebResponse = Invoke-WebRequest -Uri $url -TimeoutSec 1800 -ErrorAction:Stop -Method:Post -Headers $headers -UseBasicParsing
Вы можете отключить необходимость запуска конфигурации первого запуска Internet Explorer, запустив этот скрипт PowerShell, он настроит соответствующее свойство реестра:
Set-ItemProperty -Path "HKLM:\SOFTWARE\Microsoft\Internet Explorer\Main" -Name "DisableFirstRunCustomize" -Value 2
После этого WebClient будет работать без проблем