14

我只想使用 Windows Server 2008 上的任务调度程序和 Powershell 脚本调用 URL。

所以我开发了以下脚本:

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

当我从 Powershell ISE、Powershell 控制台或使用以下命令执行脚本时,该脚本可以正常工作:

powershell PATH_TO_MY_SCRIPT.ps1

但是当我从调度程序任务中执行它时它不起作用,它返回代码 0xFFFD0000。我发现了这个:http ://www.briantist.com/errors/scheduled-task-powershell-0xfffd0000/ 所以这可能是一个权限问题,所以我尝试了许多其他配置文件和选项(包括“以所有权限执行”)测试,没有成功。

我还执行了另一个 Powershell 脚本,它只是挂载了一个网络驱动器并复制了两个文件,我对这个脚本没有任何问题。所以我认为问题来自使用 .NET 对象来调用我的 URL。

我看到我可能必须在我的脚本中包含任何其他命令之前的模块,但我不知道我必须做什么。(我不知道Powershell,我只是尝试用它来解决我的问题)。

谢谢你的帮助。

4

3 回答 3

18

i used the following in a scheduled task and it works as expected :

$url="http://server/uri"
(New-Object System.Net.WebClient).DownloadString("$url");
于 2013-07-05T11:32:43.397 回答
3

以下代码应该可以满足您的需要。

$url = "http://www.google.com"
PowerShell Invoke-WebRequest -Uri $url -Method GET 
于 2017-10-06T12:05:32.890 回答
2

您需要将该日志文件放在共享目录中的某个位置。计划任务可能有权也可能无权访问$env:USERPROFILE. 此外,使用Start-TranscriptPowerShell 将脚本的输出写入日志文件(除了STDOUT,您需要将可执行文件的输出通过管道传输到 Write-Host,例如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()
于 2013-07-09T09:20:38.247 回答