【问题标题】:Missing url parameters values after running powershell script as scheduled task将powershell脚本作为计划任务运行后缺少url参数值
【发布时间】:2015-09-21 10:01:24
【问题描述】:

我有一个 Powershell 脚本,它以字符串形式获取计算机名称,以 json 数组形式获取在其上运行的进程,从变量创建参数,然后向 url 发出 Web 请求,并通过 POST 方法发送 2 个参数如下图:

$comp_id = (Get-WmiObject win32_operatingsystem) | Select-Object  csname | Format-Table -HideTableHeaders | out-string
$processes = get-process | Where-Object {$_.StartTime -ne $null -and $_.MainWindowTitle.Length -gt 10}  | Select-Object id,description,FileVersion,mainWindowTitle,startTime| ConvertTo-Json

# create parameters from variables
$param1= @{id=$comp_id}
$param2 = @{data=$processes} #the variable $process is a JSON array string 
$bothParams = $param1+$param2

Invoke-WebRequest -Uri http://my.webserver.comp:8080/galileo/peeker -Method POST-Body $bothParams

当我直接运行脚本时一切正常,即两个参数值都可以从 servlet 访问。

我想将此脚本作为计划任务运行,因此我创建了一个调用 powershell 脚本的批处理脚本文件。问题是当脚本作为计划任务运行时,第二个参数,应该是一个JSON数组字符串,是空的。可能是什么问题?

我的批处理脚本有以下两行:

 @echo OFF
# used batch script tag(%~dpn0) to get path (p) and file name similar to this file
Powershell.exe -Command "& '%~dpn0.ps1'" 

【问题讨论】:

  • 我猜是路径问题;分享你的批处理脚本;
  • 如何将任何内容分配给$comp_id$processes
  • 嗨。我编辑了问题以包括从批处理文件进行的调用以及$comp_id$process 如何获取它们的值。希望现在更清楚..
  • 任务计划程序使用哪个帐户运行脚本?
  • 我正在使用普通用户帐户运行脚本,已设置为使用最高权限运行,并且所有脚本的 Powershell 都设置为“无限制”模式。

标签: powershell batch-file


【解决方案1】:

您可以直接从任务计划程序运行 PowerShell 脚本,因此您不需要批处理脚本。至于为什么 JSON 字符串最终为空,最可能的原因是 Where-Object 没有捕获任何内容。

在脚本中添加一些基本的调试日志记录可以帮助您了解正在发生的事情。示例:

$logFile = "script.log"

$env:USERNAME | Out-File -FilePath $logFile -Append
Get-Process | Select-Object Id, Description, FileVersion, MainWindowTitle, StartTime `
    | Out-File -FilePath $logFile -Append

【讨论】:

  • 您好 Allexander,感谢您的日志记录提示。我的get-process 行在我直接运行时工作正常,但在作为计划任务运行时出现问题。我会尝试按照您的建议将输出记录到文件中,看看我得到了什么。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-05-02
  • 2019-06-01
  • 1970-01-01
  • 2013-08-18
  • 2017-11-08
  • 2020-08-07
相关资源
最近更新 更多