2012-02-01 38 views
6

Có cách nào khác ngoại trừ $ MyInvocation.InvocationName trong powershell để lấy tên tập lệnh không? Vì tôi cần phải bật kịch bản của mình trong một exe và trong trường hợp đó nó không hoạt động trên exe đó.Nhận tên tập lệnh trong Powershell

+0

Cách bạn gọi exe và cách bạn chuyển tên tập lệnh? –

+0

Tôi chuyển đổi các tập lệnh vào exe bằng cách sử dụng một tiện ích .. các chức năng hoạt động tốt với kịch bản nhưng nếu tôi sử dụng exe thay cho kịch bản nó không hoạt động .. –

+0

Cách duy nhất tôi biết là sử dụng $ Myinvocation. Có lẽ tiện ích (PS2EXE có thể§ ??) không thể chuyển đổi thuộc tính PSCmdlet.MyInvocation đề cập đến một exe hoặc bao vây của mình. –

Trả lời

11

Tôi giả sử vì bạn chuyển đổi tập lệnh PowerShell thành tệp thực thi mà bạn sau vị trí của tệp thực thi. Bạn có thể nhận nó theo cách này:.

[Environment]::GetCommandLineArgs()[0] 
+0

Vâng mà làm việc đó là wat tôi thực sự muốn cảm ơn rất nhiều jon Z .. :) –

+2

fwiw - nếu bạn đang gỡ lỗi này trong ISE, tên kịch bản trở thành tham số thứ hai: '[Environment] :: GetCommandLineArgs() [1]' –

0

Nếu bạn muốn một cái gì đó mà làm việc trong và ngoài ISE bạn có thể sử dụng

$MyInvocation.InvocationName 

Kể từ đường dẫn đầy đủ và \ YourScript.ps1 thể được trả lại bạn có thể phân tích cú pháp tên với:

[Regex]::Match($MyInvocation.InvocationName, '[^\\]+\Z', [System.Text.RegularExpressions.RegexOptions]::IgnoreCase -bor [System.Text.RegularExpressions.RegexOptions]::SingleLine).Value 
Các vấn đề liên quan