Попробуйте, прочитайте содержимое файла как одну строку, а затем используйте Regex.Matches, чтобы получить все вхождения текста, содержащегося в скобках:
$content = Get-Content test.txt | Out-String
$baseUrl = 'http://www.gogameworld.com/webclient/qipu/'
[regex]::matches($content,"javascript:viewdemogame\('([^\']+)'\)") | Foreach-Object{
$url = '{0}{1}' -f $baseUrl,$_.Groups[1].Value
& "(Path)/download.exe" $url
}
Вот объяснение шаблона регулярного выражения (созданного с помощью RegexBuddy):
javascript:viewdemogame\('([^\']+)'\)
Match the characters “javascript:viewdemogame” literally «javascript:viewdemogame»
Match the character “(” literally «\(»
Match the character “'” literally «'»
Match the regular expression below and capture its match into backreference number 1 «([^\']+)»
Match any character that is NOT a ' character «[^\']+»
Between one and unlimited times, as many times as possible, giving back as needed (greedy) «+»
Match the character “'” literally «'»
Match the character “)” literally «\)»
Match the character “"” literally «"»
'{0} {1}' используется с оператором -f для создания строки. {0} отображается на первое значение в правой части оператора (например, $ baseUrl), а {1} отображается на второе значение. Под капотом PowerShell подает в суд на метод .NET String.Format. Подробнее об этом можно прочитать здесь: http://devcentral.f5.com/weblogs/Joe/archive/2008/12/19/powershell-abcs---f-is-for-format-operator.aspx