美好的一天
我想设置一个通用脚本,我可以在调用.ps1时从.bat脚本传递服务器名称
在我的蝙蝠脚本中,我有这样的陈述:
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替换为实际的服务器名称,它可以正常工作。只是无法从.ps1中获取.b1文件中的变量。
非常感谢任何帮助。
BobZ
答案 0 :(得分:4)
更新您的脚本以使用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%' "
答案 1 :(得分:1)
最简单的方法是使用$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()}