0

为了在 Windows 上设置类似计划任务的“cron 作业”,我使用之前的 stackoverflow 问题推荐的代码设置了 Powershell 脚本。

我有一些备份需要每天清理并删除旧备份,因此我创建了一个 asp.net 脚本来执行此任务 - 文件名为 BackupCleanup.aspx,我已确认 ASP.net 脚本在其上执行时确实有效通过访问上面的 url 拥有 - 但是我无法使用下面的 Powershell 脚本来执行它。

我正在使用的 Powershell 脚本代码是:

$request = [System.Net.WebRequest]::Create("http://127.0.0.1/BackupCleanup.aspx")
$response = $request.GetResponse()
$response.Close()

我已经使用 PS1 扩展名创建了这个文件,它在我的操作系统(Windows 2008)中正确显示 - 我已经尝试通过右键单击并选择“使用 Powershell 运行”手动执行此任务,并将其安排为任务 - 两者徒劳无功。

我无法弄清楚为什么脚本不起作用 - 任何帮助将不胜感激。

4

2 回答 2

0

这是我使用 IE 调用网页的 Powershell 脚本。希望这也对你有用。

Function NavigateTo([string] $url, [int] $delayTime = 100)
{
  Write-Verbose "Navigating to $url"

  $global:ie.Navigate($url)

  WaitForPage $delayTime
}

Function WaitForPage([int] $delayTime = 100)
{
  $loaded = $false

  while ($loaded -eq $false) {
    [System.Threading.Thread]::Sleep($delayTime) 

    #If the browser is not busy, the page is loaded
    if (-not $global:ie.Busy)
    {
      $loaded = $true
    }
  }

  $global:doc = $global:ie.Document
}

Function SetElementValueByName($name, $value, [int] $position = 0) {
  if ($global:doc -eq $null) {
    Write-Error "Document is null"
    break
  }
  $elements = @($global:doc.getElementsByName($name))
  if ($elements.Count -ne 0) {
    $elements[$position].Value = $value
  }
  else {
    Write-Warning "Couldn't find any element with name ""$name"""
  }
}

Function ClickElementById($id)
{
  $element = $global:doc.getElementById($id)
  if ($element -ne $null) {
    $element.Click()
    WaitForPage
  }
  else {
    Write-Error "Couldn't find element with id ""$id"""
    break
  }
}

Function ClickElementByName($name, [int] $position = 0)
{
  if ($global:doc -eq $null) {
    Write-Error "Document is null"
    break
  }
  $elements = @($global:doc.getElementsByName($name))
  if ($elements.Count -ne 0) {
    $elements[$position].Click()
    WaitForPage
  }
  else {
    Write-Error "Couldn't find element with name ""$name"" at position ""$position"""
    break
  }
}

Function ClickElementByTagName($name, [int] $position = 0)
{
  if ($global:doc -eq $null) {
    Write-Error "Document is null"
    break
  }
  $elements = @($global:doc.getElementsByTagName($name))
  if ($elements.Count -ne 0) {
    $elements[$position].Click()
    WaitForPage
  }
  else {
    Write-Error "Couldn't find element with tag name ""$name"" at position ""$position"""
    break
  }
}

#Entry point

# Setup references to IE
$global:ie = New-Object -com "InternetExplorer.Application"
$global:ie.Navigate("about:blank")
$global:ie.visible = $true

# Call the page
NavigateTo "http://127.0.0.1/BackupCleanup.aspx"

# Release resources
$global:ie.Quit()
$global:ie = $null
于 2013-01-28T14:25:14.950 回答
0

我遇到过同样的问题。我手动打开了 powershell 并执行了我的脚本,我收到“无法加载 WebPage.ps1,因为在此系统上禁用了运行脚本。”。

您必须允许脚本运行

在 PowerShell 中执行以下命令

Set-ExecutionPolicy RemoteSigned -Scope LocalMachine

于 2014-02-06T16:12:55.020 回答