2014-04-18 70 views
0

我有一個批處理文件,要求用戶輸入變量行set /p asset=。林打電話給我的PowerShell腳本這樣將變量從批處理傳遞到powershell

SET ThisScriptsDirectory=%~dp0

SET PowerShellScriptPath=%ThisScriptsDirectory%file.ps

PowerShell -NoProfile -ExecutionPolicy Bypass -Command "& '%PowerShellScriptPath%'";

我想知道我如何發送從我的批處理文件PowerShell中的變量 '資產'。

這是我.ba​​t文件內容

@Echo off 
cls 
Color E 
cls 

@echo Enter asset below 
set /p asset= 

@echo. 
@echo your asset is %asset% 
@echo. 
goto startusmt 

:startusmt 
@echo. 
@echo executing psexec ... 
@echo. 

SET ThisScriptsDirectory=%~dp0 
SET PowerShellScriptPath=%ThisScriptsDirectory%RemoteUSMT.ps1 
PowerShell -NoProfile -ExecutionPolicy Bypass -file %PowerShellScriptPath% %asset% 
psexec \\%asset% -u domain\username -p password cmd 

goto EOF 

:EOF 
PAUSE 

回答

3

如果你有一個file.ps1,需要一個參數,

param($asset) 
"The asset tag is $asset" 

您可以在變量作爲參數傳遞。

SET ThisScriptsDirectory=%~dp0 
SET PowerShellScriptPath=%ThisScriptsDirectory%file.ps1 
SET /p asset=Enter the asset name 

PowerShell -NoProfile -ExecutionPolicy Bypass -file "%PowerShellScriptPath%" "%asset%" 
+0

什麼是文件做,我需要在我的命令? – rangerr

+0

文件運行PowerShell腳本。您可以使用'-file'來代替'-command'調用文件。 – Rynant

+0

'PowerShell -NoProfile -ExecutionPolicy Bypass -file「%PowerShellScriptPath%」%asset%'像這樣? – rangerr

2

您可以使用$env:variable_name語法從powershell中訪問curent cmd環境變量。爲了讓您的變量保持你使用$env:asset
嘗試,開cmd,做set "myvar=my value",開始powershell,做$env:myvar(這將簡單地打印出來,當然你可以使用它作爲任何其它PS變量)

作爲一個旁註,ps有很好的幫助系統。如果你做help env它會列出兩個相關主題,您可以依次檢查以獲取詳細信息。

希望這有助於

+0

是的,這是一種選擇,但一般最好是有你在傳遞給PS腳本的參數,這樣就可以通過函數簽名什麼腳本取決於輸入告訴。如果直接從PowerShell調用PowerShell腳本,它還會使其更加可用。 – Rynant

+0

@Rynant一般來說是的,但有時某個地方你會發現你有過的腳本控制,但不是它的調用/環境,然後將其派上用場了:-) – wmz

+0

是的,我同意它派上用場,在這些情況下。 – Rynant

相關問題