我在 PoSh 方面相当缺乏经验,但我认为我可以在菜鸟赛道上保持自己的水平。我正在尝试研究一种机制,以通过 PowerShell 从 SQL 表中的服务器列表中检索直接附加存储 (DAS)。获取 DAS 的命令必须从它所连接的服务器本地运行。因为每台服务器都可以连接多个 DAS 设备,所以我选择为每台服务器创建一个阵列,并使用每个 DAS 单元的对象填充该阵列。我已经确定了该过程,并且能够遍历每台服务器并在每台服务器上远程运行命令并捕获我想要的数据(在远程会话中),但是我无法恢复对象数组远程会话,以便我们可以将此数据写入数据库表。如果我在调用命令脚本块中调用数组,一切都很好,我得到了我需要的数据——只有当我之后尝试调用它时。我不打算在这些服务器(数百个)上建立 SQL 会话来写入数据,所以我更愿意在运行它的机器上进行。
因为这些数据将直接写入数据库,所以我也更愿意在同一脚本中的 PowerShell 中本地利用它,而不是与导出/导入文件、csv 等混淆。
我意识到 PowerShell 会在网络上序列化对象,但我的理解是,一旦它回到本地机器,它就会对其进行再水化。我正在努力完成的事情是可能的,还是我只是失去了理智?
相关代码为:
$result = invoke-command -computer $FQDN -credential $mycred -ArgumentList $FQDN -scriptblock {
param($FQDN)
$DASArray = @()
$OMReport = get-wmiobject -class win32_product | where-object {$_.Name -like 'Dell OpenManage*'}
if (!$OMReport)
{
}
else
{
[xml]$DAS = omreport storage enclosure -fmt xml
$Nodelist = $DAS.SelectNodes("/OMA/Enclosures/DCStorageObject")
foreach ($Node in $Nodelist | where-object {($_.SelectSingleNode("EnclosureType").get_InnerXML()) -ne 1})
{
$DASValues = New-Object PSObject
$DASValues | Add-Member –MemberType NoteProperty –Name FQDN –Value $FQDN
$DASValues | Add-Member –MemberType NoteProperty –Name ID –Value $Node.selectsinglenode("ObjID").get_InnerXML()
$DASValues | Add-Member –MemberType NoteProperty –Name Model –Value $Node.selectsinglenode("AssetName").get_InnerXML()
$DASValues | Add-Member –MemberType NoteProperty –Name EnclosureType –Value $Node.selectsinglenode("EnclosureType").get_InnerXML()
$DASValues | Add-Member –MemberType NoteProperty –Name ServiceTag –Value $Node.selectsinglenode("ServiceTag").get_InnerXML()
$DASArray += $DASValues
}
}
}
$result
if (!$DASArray)
{
}
else
{
$DASArray
}
}
从脚本块中调用时的一些示例输出:
FQDN : server1
ID : 16777237
Model : MD1200
EnclosureType : 7
ServiceTag : XXXXX1
PSComputerName : server1
RunspaceId : 999231e0-5be1-4b8b-8cf1-6462a9fccad3
PSShowComputerName : True
FQDN : server1
ID : 16777238
Model : MD1200
EnclosureType : 7
ServiceTag : XXXXX2
PSComputerName : server1
RunspaceId : 999231e0-5be1-4b8b-8cf1-6462a9fccad3
PSShowComputerName : True
FQDN : server1
ID : 16777239
Model : MD1200
EnclosureType : 7
ServiceTag : XXXXX3
PSComputerName : server1
RunspaceId : 999231e0-5be1-4b8b-8cf1-6462a9fccad3
PSShowComputerName : True
FQDN : server2
ID : 16777240
Model : MD1200
EnclosureType : 7
ServiceTag : XXXXXX4
PSComputerName : server2
RunspaceId : 999231e0-5be1-4b8b-8cf1-6462a9fccad3
PSShowComputerName : True
有什么想法吗?