我有一个批处理文件,要求用户提供变量行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
答案 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脚本中的第一行才能起作用,否则它将失败。