【发布时间】:2017-09-23 18:54:50
【问题描述】:
我是 Powershell 脚本的新手。我正在尝试编写一个脚本来重新启动服务器列表,ping,检查应用程序服务是否全部启动,然后 RDP 到服务器上。
我的问题是将服务器列表从数组变量传递到另一个我称为重启的脚本。见下文;
调用和绕过ps1 executionPolicy(ParamBypass.bat)的批处理脚本:
PowerShell -NoProfile -ExecutionPolicy Bypass -Command "& '"%PowerShellScriptPath%"' -ServerList '%2' -SCreD '%3' -SEnv '%4'"
--actual Batch call code : ParamBypass.bat PingRBAuthPass.ps1
Powershell Script (PingRBAuthPass.ps1):获取服务器列表并将其存储到数组中
$NSRVList = Import-Csv .\SMachines\Servers.csv | Where-Object {$_.ENVName -eq "RND"} | Select-Object -Property ENVName,FND,DB,APPS
ParamBypass.bat /reboot.ps1 $NSRVList
Powershell 重启脚本:
param(
[string[]]$ServerList,
[string]$SCreD,
[string]$SEnv
)
Function Database
{
[Object[]]$RBSrv
$RBSrv = $ServerList
Foreach ($srv in $RBSrv) {
if($srv.DB) {
--do something
$NSRVList = $RBSrv | Select-Object -Property ENVName,FND,APPS
} else { & "FND" }
}
}
& "Database"
如果我运行它,数组的内容如下所示: PingRBAuthPass.ps1 中的变量 $NSRVList 输出
ENVName FND DB APPS
------- --- -- ----
RND srv003529 srv002983 srv003528
RND srv003527
RND srv003526
RND srv003530
reboot.ps1 中的变量 $NSRVList 输出
@{ENVName=RND; FND=srv003529; DB=srv002983; APPS=srv003528}
我希望数组的结构保持不变。
【问题讨论】:
-
有什么原因不能将所有内容合并到一个脚本中吗?
-
很好:维护更容易。我也不熟悉 powershell 的稳健性以及它可以在一个脚本中处理多少行代码。所以选择了这种编码方式。
标签: arrays batch-file powershell