2016-11-03 98 views
8

我已經找到了另兩個任務的答案,卻不能在一起:如何以批處理文件的參數運行powershell?

  • 運行PowerShell的從一個批處理文件

  • 運行PowerShell的有爭論從一個批處理管理員文件

但我想運行powershell 作爲管理員AND從批處理文件中帶有參數

由於這個原因,我相信這並不是重複的。

這個問題很複雜這個原因:

我使用ArgumentList開關指向的文件路徑運行升高的PowerShell時。我也用它來傳遞參數。另外,我能夠成功地使用這個開關。儘管我可以將它用於這兩項任務,但似乎並未如此。

這裏是我如何使用PowerShell的當前:

作爲管理員:

powershell -Command "& {Start-Process powershell -ArgumentList '-File "filePath.ps1' -Verb RunAs}" 

帶參數:

powershell -ExecutionPolicy unrestricted Import-Module "filePath.ps1" -ArgumentList "arg1","arg2" 

我已經試過:

我試過把我的參數添加到文件傳入的ArgumentList,但它們沒有被識別。

我也嘗試在工作參數行中添加-Verb RunAs,但powershell認爲我試圖在稱爲Verb的另一個參數中傳遞,並且未能將powershell作爲和管理運行。

是否有可能完成運行PowerShell作爲管理員和參數,通過切換我如何傳遞參數,或者我如何提升PowerShell?

回答

4

可能解決您的問題沒有第三方工具,但解決方案有點神祕。

因此,請考慮下載Bill Stewart的幫助elevate32elevate64工具,如his answer中所述,這可簡化解決方案。

下面是一個簡單的例子,它調用Get-Date cmdlet和參數在從cmd.exe推出升高PowerShell會話(或批處理文件):

powershell -command "start-process -verb runas powershell" "'-noexit -command get-date -UFormat %s'" 

注意如何從命令行穿過到升高參數創建的中介-command的PS會話作爲單個參數傳遞,該參數包含在嵌入式單引號中。

報價可能會非常棘手,但這種方法也適用在原則上調用*.ps1文件:

  • powershell -command "start-process -verb runas powershell"是命令行的不變一部分。

  • 其餘"..." -enclosed字符串必須包含引用的是PowerShell可識別含所有參數,你會直接傳遞到powershell ...命令行調用(單引號是最容易)一嵌套一個字符串。

適用於你的例子:

... "'-File C:\path\to\filePath.ps1 arg1 arg2'" 

注:一定要使用你的腳本文件完整路徑,因爲升高的PS會話不(一定)運行與呼叫會話在同一個目錄中。

如果需要報價嵌套字符串中的參數,使用\"

... "'-File \"c:\path with spaces\to\filePath.ps1\" arg1 arg2'" 
+1

我遇到了另一個問題,但我認爲這個問題的範圍,這解決了這個問題。在下一個!萬分感謝。 –

4

您可以通過抓取我寫入名爲Elevate32.exe的簡短命令行可執行文件(或針對64位版本的Elevate64.exe)來執行此操作。你可以在這裏得到它:

http://www.westmesatech.com/misctools.html(ElevationToolkit1.zip)

例子:一切後

elevate64 -- powershell.exe -file C:\scripts\myscriptfile.ps1 

--是要提升的命令行。

+1

所以,我非常有信心,這工作。我接受其他答案的唯一原因是因爲它不需要對外部進程的調用,而只是一種更優雅的解決方案。這是一個漂亮的工具,我打算將它應用到其他應用程序!再次感謝。 –

0

如果你碰巧有NirCmd由著名NirSoft的是,你在你的服務有一個很好的elevate命令(還有更多)。

nircmd elevate powershell.exe -File script.ps1 arg1 arg2 ... 

的NirCmd在x86和x64的口味提供和自由,就像從NirSoft所有軟件。