2013-07-05 18 views
7

Voglio solo chiamare un URL con lo scheduler delle attività su Windows Server 2008 e uno Script di PowerShell.Chiama un URL con Script PowerShell pianificato

Così ho sviluppato il seguente script:

$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() 

Lo script funziona senza alcun problema quando eseguo dal PowerShell ISE, la console PowerShell o con il comando:

powershell PATH_TO_MY_SCRIPT.ps1 

Ma non funziona quando lo eseguo dalle attività dello Scheduler, restituisce il codice 0xFFFD0000. Ho trovato questo: http://www.briantist.com/errors/scheduled-task-powershell-0xfffd0000/ Quindi può essere un problema di autorizzazione, quindi ho provato molti altri profili e opzioni (incluso "Esegui con tutte le autorizzazioni") per testare, senza successo.

Eseguo anche un altro script PowerShell che monta semplicemente un'unità di rete e copia due file e non ho alcun problema con questo script. Quindi penso che il problema derivi dall'utilizzo dell'oggetto .NET per chiamare il mio URL.

Ho visto che potrei dover includere moduli nel mio script prima di qualsiasi altro comando, ma non so esattamente cosa devo fare. (Non conosco Powershell, cerco solo di usarlo per risolvere i miei problemi).

Grazie per il vostro aiuto.

+1

Penso che sia più probabile che il problema sia con l'accesso alla directory 'USERPROFILE' - potrebbe non essere quello che ci si aspetta che sia. Potrebbe anche essere un problema con l'impostazione del proxy (o la sua mancanza) se si tratta di un URL esterno. In quale account utente viene eseguita l'operazione pianificata? – alroc

+0

Impossibile concordare di più con @alroc sulla parte 'USERPROFILE'. Quando lo esegui manualmente (o in modo interattivo) è chiunque abbia effettuato l'accesso al sistema e apri la sessione (ad esempio se accedi come "Peter" otterrai il profilo di "Peter"). Quando viene eseguito attraverso l'attività di pianificazione, sarà di default il profilo "SYSTEM" che potrebbe rendere '$ {Env: USERPROFILE} \ Desktop \ Planification.log' senza senso. Tuttavia, l'account "SISTEMA" può essere modificato: Nel Pannello di controllo "Pianificazione attività" fare clic con il tasto destro del mouse su di esso e quindi andare su Proprietà, sarà possibile modificare l'account utente in cui viene eseguita l'attività. – Peter

risposta

10

ho usato la segue in un operazione pianificata e funziona come previsto:

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

La differenza tra tuo e Dorian è se si utilizza la variabile nella definizione di un'altra variabile. – Peter

1

Avrai voglia di mettere quel file di log da qualche parte in una directory condivisa. Le attività pianificate possono o non possono avere accesso a $env:USERPROFILE. Inoltre, utilizzare Start-Transcript per fare in modo che PowerShell scriva l'output dello script in un file di registro (ad eccezione di STDOUT, sarà necessario reindirizzare l'output dai file eseguibili a Write-Host, ad esempio 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

codice seguente dovrebbe fare quello che ti serve.

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