[英]Passing parameters to PowerShell from bat file
我拼命地嘗試將參數從批處理文件傳遞到PowerShell腳本,該腳本檢查Windows服務是否正在運行。
這是我完全可操作的命令:
.\nsrservices.ps1 -cmd running nsrexecd,stisvc
但問題是命令的行為:
這是我的bat文件:
powershell.exe -File .\nsrservices.ps1 -cmd running nsrexecd,stisvc
ECHO.%ERRORLEVEL%
exit /B %ERRORLEVEL%
在我的PS文件中,參數定義如下:
param([string]$cmd=$(throw "Type d'action manquante !"),[string[]]$srv)
在日志文件中,我得到了這兩個結果(抱歉法國輸出)。
在PowerShell窗口中:
24/12/2015 09:02:50-Paramètres appelés : cmd=running srv=stisvc nsrexecd
24/12/2015 09:02:50-Début test de l'état running du service : stisvc
24/12/2015 09:02:50- Début évaluation de l'état du service : stisvc
24/12/2015 09:02:50- Fin évaluation de l'état du service : stisvc
24/12/2015 09:02:50-Le service tourne
24/12/2015 09:02:50-Fin test de l'état running du service : stisvc
24/12/2015 09:02:50-Début test de l'état running du service : nsrexecd
24/12/2015 09:02:50- Début évaluation de l'état du service : nsrexecd
24/12/2015 09:02:50- Fin évaluation de l'état du service : nsrexecd
24/12/2015 09:02:50-Le service tourne
24/12/2015 09:02:50-Fin test de l'état running du service : nsrexecd
這意味着服務按順序進行測試
從.bat文件:
24/12/2015 09:04:24-Paramètres appelés : cmd=running srv=nsrexecd,stisvc
24/12/2015 09:04:24-Début test de l'état running du service : nsrexecd,stisvc
24/12/2015 09:04:24- Début évaluation de l'état du service : nsrexecd,stisvc
24/12/2015 09:04:24- Le service nsrexecd,stisvc n'existe pas !
24/12/2015 09:04:24- Fin évaluation de l'état du service : nsrexecd,stisvc
24/12/2015 09:04:24-Fin test de l'état running du service : nsrexecd,stisvc
這意味着名為“nsrexecd,stisvc”的服務不存在。
使用.bat文件時,我的兩個名字之間的逗號似乎會引起混淆
所以我正在努力找到一個解決方法來贏得這個血腥的.bat文件。
我試過報價,單引號,-File,-Command,但沒有成功。
任何線索或解決方案都會非常受歡迎,因為我在這個論壇上的研究沒有給我一些可用的東西。
當然,之后我想用參數調用.bat文件。
在你的情況下,我將使用:
[parameter(Mandatory=$true,
ValueFromRemainingArguments=$true)]
[String[]]
$services
您的批量調用將如下所示
powershell.exe -File .\nsrservices.ps1 -cmd running nsrexecd stisvc
有關更多詳細信息,請查看about_Functions_Advanced_Parameters
最后,我改變了方向。 因為我有空格的服務名稱(我必須在.bat文件中包含我的.ps1),所以我決定將參數控制放在main中,然后離開
param([string]$cmd,[string[]]$srv)
沒有控件的行。
謝謝大家。
從我通常做的BAT文件中調用PowerShell腳本
PowerShell .\script.ps1 -arg 1234 -arg2 5678
要么
PowerShell C:\path\to\script.ps1 -arg 1234 -arg2 5678
您的PowerShell腳本文件應具有類似的功能
param([string]$arg, [string]$arg2)
在腳本的頂部和開頭。
在我的param([string] $ arg,[string] $ arg2)中,我將開關名稱分別定義為arg和arg2。 因此,BAT文件將在-arg之后將任何內容分配給$ arg,並將-arg2之后的任何內容分配給$ arg2。
我們可以根據您的腳本將其更改為更方便的內容,例如在PowerShell腳本中我們可以將其更改為
param([string]$computer, [string]$filename)
在我們的BAT文件中,我們可以像上面一樣調用PowerShell,而不是-arg和-arg2,我們將使用-computer和-filename。
請記住它是特定於訂單的,因此您可以使用類似的參數調用腳本
PowerShell .\script.ps1 -computer MyComputer -filename MyFileName
要么
PowerShell .\script.ps1 -filename MyFileName -computer MyComputer
-filename將始終轉到$ filename
- 計算機將永遠到$計算機。
我希望這有幫助。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.