Страницы: 1
RSS
Передача нескольких переменных из VBA в PowerShell
 
Столкнулся с проблемой скачивания файлов.
Поиском сайт просмотрел, аналогичных тем не нашел, так что модеров прошу не корить сильно, если вдруг оффтоп.
Решил не особо мучиться и сделать скачивание через PowerShell. Тем более что я уже однажды писал скрипт в который передавал аргументы из другой программы.
В VBA такой "финт ушами" не сработал!
Нарыл скрипт скачивания файла по ссылке, ибо в PS я не сильно шарю, мягко говоря. Указал откуда скачивать, куда класть, выполнил скрипт и всё скачалось и положилось куда надо. Дело, казалось, осталось за малым: передать из VBA две переменных (ссылка и путь сохранения) и дело в шляпе. Однако же я не смог передать не то что обе, но и ни одной вовсе.
Ребят, уже 4 с лишним часа сижу. Гуглом пользоваться умею, так что просьба не отправлять в гугл. Про передачу переменных я что мог найти - там прочитал. Но у меня не получается такое сделать...
Подскажите пожалуйста, кто в теме PS, как передать 2 параметра в скрипт PowerShell из макроса VBA.

Код VBA:
Код
Sub TestPowershell()
    Dim cmd, a1, a2
        a1 = "string1"
        a2 = "string2"
        cmd = "powershell.exe -ExecutionPolicy Unrestricted -NoExit -File d:\TestScript\sc.ps1 -Name """ & a1 & ""
        Shell cmd, vbNormalFocus
End Sub


Код PowerShell:
Код
-ExecutionPolicy ByPass -command

Get-Service -Name $args[0] $args[1]

$download_url = $args[0]
$local_path = $args[1]
$WebClient = New-Object System.Net.WebClient
$WebClient.DownloadFile($download_url, $local_path)

P.S. Пробовал так же "Get-Service -Name $args[0] $args[1]" заменить на "param($mURL, $mPath)". Тоже не получилось...
 
Код
cmd = "powershell.exe -ExecutionPolicy Unrestricted -NoExit -File d:\TestScript\sc.ps1 -Name """ & a1 & """
не хватает одной закрывающей кавычки. у вас & "" просто ничего не добавляет.
По вопросам из тем форума, личку не читаю.
 
Цитата
Andrew написал:
как передать 2 параметра
Хоть 10 параметров
Код
Sub TestPowershell()
    Dim cmd, a1, a2
        a1 = "string1"
        a2 = "string2"
        cmd = "powershell.exe -ExecutionPolicy Unrestricted -NoExit -File d:\sc.ps1 " & _
        Chr(34) & a1 & Chr(34) & "  " & Chr(34) & a2 & Chr(34)
     Shell cmd, vbNormalFocus
End Sub
Код скрипта
Код
echo $args[0]
echo  $args[1]
Результат
 
Doober, аааааааа, спасииииибищеееее!!!!!!!!!! ну просто огроменное спасибище. Вон оно как надо то, а я и так и сяк. Кстати ни в одном из примеров что я в гугле находил про передачу переменных не было этого самого echo! Сделал как Вы написали - все сразу же заработало!!!!!
:)  
 
UPDATE
Каждый раз забываю написать сюда.
При скачивании каждый раз передавать список загрузки в PowerShell, запуская каждый раз новый экземпляр PowerShell, не удобно, поэтому я "немного глубже вкурив" PS написал скачивание по списку.
В PS передается путь к файлу CSV из Excel, затем PS берет файл и заносит данные в массив для скачивания, а далее качает.
Разделитель - "|".
Строка CSV = [ССЫЛКА] & "|" & [Путь сохранения с файлом (например D:\1\1.pdf)]

Код PowerShell:
Код
echo $args[0]
$tmpARR = gc $args[0]
$CompareArr = @()
$tmpARR | Foreach{
    $EL = $_.split("|")
    $CompareArr += ,@($EL[0],$EL[1])
   $TotalLen += 1
}
foreach($VAL in $CompareArr)
{
   $k +=1
   $OutStr = "NOW downloading " + $k + " / " + $TotalLen
   $OutStr
   $WebClient = New-Object System.Net.WebClient
   $WebClient.DownloadFile($VAL[0], $VAL[1])
}

Код VBA:
Код
Sub GetFilePSCSV(mFile As String)
    Dim cmd
        cmd = "powershell.exe -ExecutionPolicy Unrestricted -File D:\Scripts\PS_CSV_DOWNLOADER.ps1 " & Chr(34) & mFile
        Shell cmd, vbNormalFocus
End Sub
Страницы: 1
Наверх