2013-07-05 7 views
7

Ich möchte nur eine URL mit dem Aufgabenplaner unter Windows Server 2008 und einem Powershell-Skript aufrufen.Rufen Sie eine URL mit geplantem Powershell-Skript an

So entwickelte ich das folgende Skript:

$url = "http://example.com" 

$log_file = "${Env:USERPROFILE}\Desktop\Planification.log" 
$date = get-date -UFormat "%d/%m/%Y %R" 
"$date [INFO] Exécution de $url" >> $log_file 

$request = [System.Net.WebRequest]::Create($url) 
$response = $request.GetResponse() 
$response.Close() 

Das Skript ohne Problem funktioniert, wenn ich es aus der Powershell ISE ausführen, die Konsole Powershell oder mit dem Befehl:

powershell PATH_TO_MY_SCRIPT.ps1 

Aber es funktioniert nicht, wenn ich es von den Scheduler-Tasks aus ausführe, gibt es den Code 0xFFFD0000 zurück. Ich habe folgendes gefunden: http://www.briantist.com/errors/scheduled-task-powershell-0xfffd0000/ So kann es ein Berechtigungsproblem sein, also habe ich versucht viele andere Profile und Optionen (einschließlich "Ausführen mit allen Berechtigungen") zu testen, ohne Erfolg.

Ich führe auch ein anderes Powershell-Skript, das nur ein Netzlaufwerk mountet und zwei Dateien kopiert, und ich habe kein Problem mit diesem Skript. Also denke ich, dass das Problem von der Verwendung des .NET-Objekts zum Aufruf meiner URL herrührt.

Ich sah, dass ich möglicherweise Module in mein Skript vor anderen Befehlen enthalten muss, aber ich weiß nicht genau, was ich zu tun habe. (Ich kenne Powershell nicht, ich versuche es nur zu benutzen, um meine Probleme zu lösen).

Vielen Dank für Ihre Hilfe.

+1

Ich denke, es wahrscheinlicher ist, dass das Problem mit dem Zugriff auf das 'USERPROFILE' Verzeichnis ist - es kann nicht sein, was Sie es erwarten. Es könnte auch ein Problem mit Ihrer Proxy-Einstellung (oder deren Fehlen) sein, wenn es sich um eine externe URL handelt. Mit welchem ​​Benutzerkonto wird die geplante Aufgabe ausgeführt? – alroc

+0

Kann nicht mehr mit @alroc auf dem 'USERPROFILE' Teil zustimmen. Wenn Sie es manuell (oder interaktiv) ausführen, ist es derjenige, der sich am System anmeldet und die Sitzung öffnet (zB wenn Sie sich als "Peter" anmelden, erhalten Sie das "Peter" Profil). Wenn es den Zeitplan-Task durchläuft, ist es standardmäßig das Profil von "SYSTEM", was "$ {Env: USERPROFILE} \ Desktop \ Planification.log" sinnlos machen könnte. Aber "SYSTEM" -Konto kann geändert werden: In "Geplante Aufgabe" Systemsteuerung mit der rechten Maustaste darauf und dann gehen Eigenschaften, Sie können das Benutzerkonto ändern, unter dem die Aufgabe ausgeführt wird. – Peter

Antwort

10

i verwendet in einer geplanten Aufgabe der folgenden, und es funktioniert wie erwartet:

$url="http://server/uri" 
(New-Object System.Net.WebClient).DownloadString("$url"); 
+0

Der Unterschied zwischen Ihrem und Dorian ist, ob die Variable in der Definition einer anderen Variablen verwendet wird. – Peter

1

Sie werden feststellen, dass Log-Datei irgendwo in einem freigegebenen Verzeichnis setzen wollen. Geplante Aufgaben haben möglicherweise keinen Zugriff auf $env:USERPROFILE. Verwenden Sie außerdem Start-Transcript, damit PowerShell die Ausgabe des Skripts in eine Protokolldatei schreibt (mit Ausnahme von STDOUT müssen Sie die Ausgabe von ausführbaren Dateien an Write-Host übergeben, z. B. hostname | Write-Host).

$url = "http://example.com" 

$log_file = "C:\PlanificationLogs\Planification.log" 
Start-Transcript -Path $log_file 

Get-Date -UFormat "%d/%m/%Y %R" 
Write-Host "$date [INFO] Exécution de $url" 

# PowerShell 3 
Invoke-WebRequest -Uri $url 

# PowerShell 2 
$request = [System.Net.WebRequest]::Create($url) 
$response = $request.GetResponse() 
$response.Close() 
1

folgenden Code sollte tun, was Sie brauchen.

$url = "http://www.google.com" 
PowerShell Invoke-WebRequest -Uri $url -Method GET 
Verwandte Themen