Tập lệnh Powershell không đăng nhập như mong đợi khi chạy từ dòng lệnh


2

Tôi có một tập lệnh powershell đơn giản mở ra một ur và ghi lại xem nó có thành công hay không:

$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

Khi tôi chạy chương trình từ PowerShell ISE, nó hoạt động tốt và ghi nhật ký như mong đợi:

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

Khi tôi chạy cùng một tệp từ dòng lệnh Windows, tôi không nhận được mục nhập tệp nhật ký. Tôi đang làm gì sai?


Thư mục nào bạn đang cố chạy nó từ đâu?
Ƭᴇcʜιᴇ007

Câu trả lời:


2

Đây là vấn đề, bạn đang nói với powershell viết thư cho ". \ Log.log" và đúng là như vậy. Chỉ là tôi không nghĩ rằng nó viết ở nơi bạn mong đợi. Nó được viết ở đâu get-location, thực sự là một mặc định thường là thư mục người dùng của bạn (hoặc tài khoản thực thi nó). Kiểm tra .\users\<username>\log.logvà xem nếu nó ở đó. Bây giờ, những gì bạn muốn là một cách để có được thư mục thực thi tập lệnh hiện tại và viết đầu ra của bạn ở đó. Bạn có thể làm điều này như vậy:

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

Trong trường hợp của bạn, $LogFilethực sự sẽ là:

$LogFile = "$ScriptDir\log.log"

Hãy xem Invoke-WebRequest:) Bạn có thể thấy dễ dàng hơn cho các yêu cầu web. Bạn cũng có thể muốn xem xét thêm một finallyvào try\catchđể nó là một try\catch\finally. Các finallykhối luôn chạy và bạn có thể sử dụng nó để đăng nhập kịch bản thực hiện (trong trường hợp này).


3

Sự nghi ngờ của tôi là nó là một vấn đề thư mục làm việc. Xem trong C: \ Windows \ System32 và xem nhật ký của bạn có ở đó không. Hoặc đưa ra và đường dẫn rõ ràng đến nơi bạn muốn nhật ký thay vì sử dụng một đường dẫn tương đối.


Tôi đồng ý với bạn về thư mục làm việc, nhưng tôi nghĩ có lẽ nó mặc định là thư mục người dùng hoặc root. +1
Colyn1337
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.