O script Powershell não está sendo registrado como esperado quando executado a partir da linha de comando

2

Eu tenho um script simples de powershell que abre um ur e registra se foi bem-sucedido:

$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

Quando executo o programa a partir do PowerShell ISE, ele funciona bem e registra como esperado:

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

Quando executo exatamente o mesmo arquivo na linha de comando do Windows, não estou recebendo uma entrada de arquivo de log. O que estou fazendo errado?

    
por David Tunnell 15.10.2013 / 17:02

2 respostas

2

Aqui está a coisa, você está dizendo ao PowerShell para escrever para ". \ log.log" e é. É só que não acho que está escrevendo onde você espera que seja. Ele está escrevendo para onde get-location é, que é na verdade um padrão que normalmente é o diretório do usuário (ou o da conta que o está executando). Verifique .\users\<username>\log.log e veja se está lá. Agora, o que você quer é uma maneira de obter o diretório de execução de script atual e escrever sua saída lá. Você pode fazer isso assim:

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

No seu caso, $LogFile seria realmente:

$LogFile = "$ScriptDir\log.log"

Confira Invoke-WebRequest :) Você pode achar mais fácil solicitações da web. Você também pode considerar adicionar um finally ao seu try\catch , de modo que seja um try\catch\finally . O bloco finally sempre é executado e você pode usá-lo para registrar a execução de scripts (nesta instância).

    
por 15.10.2013 / 17:25
3

Minha suspeita é que é um problema de diretório de trabalho. Olhe em C: \ Windows \ System32 e veja se o seu log está lá. Ou forneça e explique o caminho para onde você deseja o log, em vez de usar um caminho relativo.

    
por 15.10.2013 / 17:15