PowerShell v2.0:从批处理cmd文件传递变量计算机名参数

3

大家好

我想设置一个通用脚本,在调用.ps1文件时可以从.bat脚本中传递服务器名称。

在我的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文件识别.bat文件中的变量。非常感谢您的帮助。
BobZ

重复问题 - Emiliano Poggi
2个回答

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%' "

出现了一个错误,缺少终止符。我稍后会研究如何使用参数。由于我没有提到我将传递多个参数,所以我将按照说明使用该参数。 - BobZ
错误可能是引号放错了位置。请尝试使用以下命令: "& '\serverd1\d$\Program Files%run_dir%\Dcls\PS\Stop_Bkgnd_%run_env%_01.ps1' -server_name %server_name%" (请注意,单引号已移回文件名的末尾) manojlds 关于双引号内参数的说法是正确的。 - Jay

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()}

非常感谢,这个很好用。在我的批处理脚本中,我有这个语句: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=$args[0] gwmi win32_service -Computername $server_name -filter "name = 'BackgroundQueue'" | % {$_.StopService()} - BobZ

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接