簡體   English   中英

System.Management.Automation.Powershell RunAs管理員

[英]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流中,以便我們可以檢查任何警告,錯誤或其他信息。

PowerShell流列表

  • 輸出量
  • 警告
  • 錯誤
  • 信息(PowerShell 5.0版)
  • 詳細
  • 除錯

捕捉流

您可以通過幾種不同的方式“捕獲”錯誤並進行檢查:

  • Wait-Debugger命令插入腳本( 需要PowerShell 5.0 ),然后使用Enter-PSHostProcess遠程連接到進程
  • Invoke-Command上使用-ErrorVariable參數捕獲錯誤,然后將它們寫入文件或輸出流(使用Write-Output )。
  • 使用PowerShell重定向將所有流合並到輸出流*>&1

實際上,我將更新您的腳本代碼,如下所示:

"Start"
Invoke-Command -computername WinServer -Credential $credentials -ScriptBlock {
  "Test"
} -Verbose *>&1
"Finish"

那應該導致所有錯誤,警告,詳細輸出等被合並到輸出流中,因此您應該能夠看到腳本中發生了什么。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM