我有一个简单的 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 并查看您的日志是否在那里。或者给出您想要日志的明确路径,而不是使用相对路径。