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 № 1Nie 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