的PowerShell 2.0传递变量ComputerName参数从批处理文件CMD
好日子所有的PowerShell 2.0传递变量ComputerName参数从批处理文件CMD
我想建立一个共同的脚本,我可以从.bat脚本调用的.ps1
时传递的服务器名称在我的蝙蝠脚本我有这样的说法:
set setver_name=our2008server
powershell -ExecutionPolicy RemoteSigned
-NonInteractive
-NoProfile
-command
"& '\\serverd1\d$\Program Files\%run_dir%\Dcls\PS\Stop_Bkgnd_%run_env%_01.ps1' "
-server_name %server_name%
在我的PS1脚本我有:
gwmi win32_service -Computername $server_name -filter "name = 'BackgroundQueue'" |
% {$_.StopService()}
如果我将$ server_name替换为实际的服务器名称,它可以正常工作。只是无法从.bat文件中获取要在.ps1中识别的变量。
任何帮助将不胜感激。
BobZ
最简单的方法是使用$args
变量。这是一个包含传递给PowerShell脚本的所有参数的数组。
使用范例:
Write-Host "Num Args:" $args.Length;
foreach ($arg in $args)
{
Write-Host "Arg: $arg";
}
$args[0]
$args[1]
所以,在你的榜样,我会改变command
参数读取
// Note the change at the end of this string
-command "& '\\path\to\my\powershell_script.ps1' %setver_name%"
,改变PS1文件是
// Note I have used $args[0].
gwmi win32_service -Computername $args[0] -filter "name = 'BackgroundQueue'" |
% {$_.StopService()}
非常感谢你,这个效果很好 在我的蝙蝠脚本我有这样的说法: 集setver_name = our2008server PowerShell的-ExecutionPolicy下RemoteSigned -nonInteractive -NoProfile -command “和“\\ serverd1 \ d $ \ Program Files文件\%run_dir%\ DCL的\ PS \ Stop_Bkgnd_%run_env%_01.ps1' %SERVER_NAME% “ $ SERVER_NAME =的$ args [0] gwmi win32_service时-computername $服务器名称筛选器” NAME = 'BackgroundQueue' “| %{$ _ StopService()} – BobZ 2011-05-10 13:34:32
更新您的脚本使用param:
param($server_name)
gwmi win32_service -Computername $server_name -filter "name = 'BackgroundQueue'" |
% {$_.StopService()}
在呼叫时,将-server_name %server_name%
移动到命令中。
set setver_name=our2008server
powershell -ExecutionPolicy RemoteSigned
-NonInteractive
-NoProfile
-command
"& '\\serverd1\d$\Program Files\%run_dir%\Dcls\PS\Stop_Bkgnd_%run_env%_01.ps1 -server_name %server_name%' "
[重复的问题](http://stackoverflow.com/questions/5592531/how-to-pass-an-argument-to-this-powershell-script/5596698#5596698)。 – 2011-05-09 20:40:57