![](/img/trans.png)
[英]Script that runs fine on PowerShell returns error using System.Management.Automation.PowerShell
[英]System.Management.Automation.Powershell RunAs Admin
我有一個Powershell腳本,我想在ASP.NET MVC應用程序內部觸發的服務器上運行該腳本。 我目前正在這樣做:
var shell = PowerShell.Create();
shell.Commands.AddScript(_script);
_output = new PSDataCollection<PSObject>();
var input = new PSDataCollection<string>();
input.Complete();
shell.BeginInvoke(input, _output);
但是,該腳本在與IIS應用程序相同的用戶帳戶下運行(顯然)。 該帳戶沒有腳本執行工作所需的特權。 我嘗試添加中間腳本,並使用具有授權帳戶憑據的Invoke-Command來運行主腳本,但是從ASP.NET進程運行時,Invoke-Command永遠不會觸發,並且不會返回錯誤。
例如,使用以下腳本:
"Start"
Invoke-Command -computername WinServer -Credential $credentials -ScriptBlock
{
"Test"
}
"Finish"
當我從服務器上的PS運行此命令時,得到的響應為“開始,測試,完成”,但是當我從ASP.NET運行它時,它只是返回“開始,完成”-腳本塊永遠不會運行。
是否有關於為什么腳本塊未運行的解釋,或在System.Management.Automation.Powershell中可以提升為管理員的方式或指定用戶帳戶來運行該腳本?
因此,最有可能發生的是Invoke-Command
調用引發了異常。 我最好的猜測是由於各種身份驗證問題而引發異常。
稍微講一下,PowerShell有多個“流”。 您可能只看到發送到Output
流的數據,因此我們需要捕獲其他流,並將它們合並到Output流中,以便我們可以檢查任何警告,錯誤或其他信息。
您可以通過幾種不同的方式“捕獲”錯誤並進行檢查:
Wait-Debugger
命令插入腳本( 需要PowerShell 5.0 ),然后使用Enter-PSHostProcess
遠程連接到進程 Invoke-Command
上使用-ErrorVariable
參數捕獲錯誤,然后將它們寫入文件或輸出流(使用Write-Output
)。 *>&1
實際上,我將更新您的腳本代碼,如下所示:
"Start"
Invoke-Command -computername WinServer -Credential $credentials -ScriptBlock {
"Test"
} -Verbose *>&1
"Finish"
那應該導致所有錯誤,警告,詳細輸出等被合並到輸出流中,因此您應該能夠看到腳本中發生了什么。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.