我是Powershell脚本编写的新手。我正在尝试编写一个脚本,重新启动服务器列表,ping,检查应用程序服务是否全部启动,然后将RDP重新启动到服务器上。
我的问题是将服务器列表从数组变量传递到另一个我调用reboot的脚本。见下文;
调用和绕过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脚本(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}
我希望数组的结构保持不变。
答案 0 :(得分:0)
我相信你的困惑源于你相信$ NSRVList是一个字符串数组。但是,如果你看下面的例子;你会看到它实际上是一个自定义对象
so_question.csv的内容
ENVName,FND,DB,APPS
RND,srv003529,srv002983,srv003528
RND,,,srv003527
RND,,,srv003526
RND,,,srv003530
调用import-csv
PS C:\Users\sqlchow\Desktop> $a = Import-Csv .\so_question.csv
PS C:\Users\sqlchow\Desktop> $a #uses the default display format for objects
ENVName FND DB APPS
------- --- -- ----
RND srv003529 srv002983 srv003528
RND srv003527
RND srv003526
RND srv003530
但实际上$ a实际上是一个自定义对象
PS C:\Users\sqlchow\Desktop> write-host $a
@{ENVName=RND; FND=srv003529; DB=srv002983; APPS=srv003528} @{ENVName=RND; FND=; DB=; APPS=srv003527} @{ENVName=RND; FND
=; DB=; APPS=srv003526} @{ENVName=RND; FND=; DB=; APPS=srv003530}
PS C:\Users\sqlchow\Desktop> $a | gm
TypeName: System.Management.Automation.PSCustomObject
Name MemberType Definition
---- ---------- ----------
...
...
APPS NoteProperty System.String APPS=srv003528
DB NoteProperty System.String DB=srv002983
ENVName NoteProperty System.String ENVName=RND
FND NoteProperty System.String FND=srv003529