将变量从批处理传递给powershell

时间:2014-04-18 14:59:05

标签: batch-file powershell

我有一个批处理文件,要求用户提供变量行set /p asset=。我像这样调用我的powershell脚本

  

SET ThisScriptsDirectory=%~dp0

     

SET PowerShellScriptPath=%ThisScriptsDirectory%file.ps

     

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

我想知道如何从我的批处理文件中向powershell发送变量'asset'。

这是我的.bat文件内容

@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 个答案:

答案 0 :(得分: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%"

答案 1 :(得分:2)

您可以使用$env:variable_name语法从powershell访问curent cmd环境变量。要掌握变量,请使用$env:asset
要尝试,请打开cmd,执行set "myvar=my value",启动powershell,执行$env:myvar(这只会打印它,但当然您可以将其用作任何其他ps变量)

正如旁注,ps有很好的帮助系统。如果您执行help env,它将列出两个相关主题,您可以依次检查这些主题以获取详细信息。

希望这有帮助

答案 2 :(得分:0)

param($asset)

这必须是PowerShell脚本中的第一行才能起作用,否则它将失败。