从命令行运行时 Powershell 脚本未按预期记录

从命令行运行时 Powershell 脚本未按预期记录

我有一个简单的 powershell 脚本,可以打开 ur 并记录它是否成功:

$LogFile = ".\userLoad.log"
$Date = Get-Date
Try
{
    $Request = [System.Net.WebRequest]::Create("http://dxscrumassist.zhi.com/maintenance/loadusers.aspx")
    $Response = $Request.GetResponse()
    $LogString = "$Date - User Load Success"
    $Response.Close()
}
Catch
{
    $LogString = "$Date - User Load Failure"
}
Add-content $LogFile -value $LogString

当我从 PowerShell ISE 运行该程序时,它运行良好并按预期记录:

powershell.exe -executionpolicy bypass -file C:\AAA\loadUsers.ps1

当我从 Windows 命令行运行完全相同的文件时,我没有获得日志文件条目。我做错了什么?

答案1

事情是这样的,你告诉 powershell 写入“.\log.log”,它确实写入了。只是我认为它没有写入你期望的位置。它写入的位置get-location实际上是默认位置,通常是你的用户目录(或执行它的帐户的目录)。检查.\users\<username>\log.log它是否在那里。现在,你需要的是一种获取当前脚本执行目录并将输出写入那里的方法。你可以这样做:

function Get-ScriptDirectory
{
  $Invocation = (Get-Variable MyInvocation -Scope 1).Value
  Split-Path $Invocation.MyCommand.Path
}
$ScriptDir = Get-ScriptDirectory

对于你来说,$LogFile实际上是:

$LogFile = "$ScriptDir\log.log"

查看Invoke-WebRequest:) 您可能会发现它更容易处理 Web 请求。您可能还想考虑将 添加finally到您的 中try\catch,以便它成为try\catch\finally。该finally块始终运行,您可以使用它来记录脚本执行(在本例中)。

答案2

我怀疑这是工作目录问题。查看 C:\Windows\System32 并查看您的日志是否在那里。或者给出您想要日志的明确路径,而不是使用相对路径。

相关内容