【问题标题】:Call an URL with Scheduled Powershell Script使用计划的 Powershell 脚本调用 URL
【发布时间】:2013-07-03 09:34:13
【问题描述】:

我只想使用 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,我只是尝试用它来解决我的问题)。

感谢您的帮助。

【问题讨论】:

  • 我认为问题更可能出在访问USERPROFILE 目录 - 它可能不是您期望的那样。如果它是外部 URL,也可能是您的代理设置(或缺少代理设置)的问题。计划任务在哪个用户帐户下执行?
  • 不能更同意@alroc 在“用户配置文件”部分。当您手动(或以交互方式)运行它时,它是谁登录到系统并打开会话(例如,如果您以“Peter”身份登录,您将获得“Peter”的个人资料)。当通过计划任务运行它时,默认情况下它将是“SYSTEM”的配置文件,这可能会使${Env:USERPROFILE}\Desktop\Planification.log 毫无意义。但是“SYSTEM”帐户可以更改:在“计划任务”控制面板中右键单击它,然后转到属性,您将能够修改运行任务的用户帐户。
  • PowerShell 3+ 或更早版本的详细答案:stackoverflow.com/a/12081686/155687

标签: powershell scheduled-tasks


【解决方案1】:

我在计划任务中使用了以下内容,它按预期工作:

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

【讨论】:

  • 你和Dorian的区别在于是否在另一个变量的定义中使用变量。
【解决方案2】:

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

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

【讨论】:

    【解决方案3】:

    您需要将该日志文件放在共享目录中的某个位置。计划任务可能有权访问$env:USERPROFILE,也可能无权访问。此外,使用 Start-Transcript 让 PowerShell 将脚本的输出写入日志文件(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()
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-05-02
      • 1970-01-01
      • 1970-01-01
      • 2016-06-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多