民间,
我找到了一些答案,但它们似乎是用于手动数组,或者当你知道确定的数字时。我有一个阵列,我不知道会有多少人在那里。想知道我是否能得到帮助。
基本上 - 我希望它通过每个服务器,获取OCX和DLL名称,版本和日期,并将其放在电子表格中。
似乎工作正常......只有一次。它不会继续我的数组中的下一个文件。
我是如此接近,有人可以帮助我告诉它(好的,在完成所有文件之前不要前进到下一个服务器)
到目前为止,这是我的代码。效果很好 - 但每台服务器只能使用一个文件。
非常感谢提前。
$Servers = Get-Content C:\temp\Servers.txt
$objExcel=New-Object -ComObject Excel.Application
$objExcel.Visible=-1
$WorkBook=$objExcel.WorkBooks.Add()
$sheet=$workbook.worksheets.item(1)
$class = "win32_Share"
$sheet.Cells.item(1,1)=("Server")
$sheet.Cells.item(1,2)=("File Name")
$sheet.Cells.Item(1,3)=("File Version")
$sheet.Cells.Item(1,4)=("Date")
$sheet.Range("A1:D1").interior.colorindex = 43
$x=2
$i = 0
foreach ($Server in $Servers) {
$infos = Invoke-Command -computername $Server {Get-ChildItem "V:\Service\*" -File -Include *.dll, *.ocx | Select-Object name,@{label="FileVersion";expression={$_.versioninfo.fileversion}},@{label="Date";expression={$_.LastWriteTime}}}
$info = $infos[$i]
$sheet.Cells.item($x, 1)=($Server)
$sheet.Cells.item($x, 2)=($info.name)
$sheet.Cells.item($x, 3)=($info.FileVersion)
$sheet.Cells.item($x, 4)=($info.Date)
$x++
$i++
}
#Autofit columns when completed
$range = $sheet.usedRange
$range.EntireColumn.Autofit()
它似乎永远不会通过$ info [$ i]数组前进。
答案 0 :(得分:4)
只是嵌套另一个foreach:
$x = 2
foreach ($Server in $Servers) {
$infos = Invoke-Command -computername $Server { Get-ChildItem "V:\Service\*" -File -Include *.dll, *.ocx | Select-Object name,@{label="FileVersion";expression={$_.versioninfo.fileversion}},@{label="Date";expression={$_.LastWriteTime}}}
foreach ($info in $infos) {
$sheet.Cells.item($x, 1)=($Server)
$sheet.Cells.item($x, 2)=($info.name)
$sheet.Cells.item($x, 3)=($info.FileVersion)
$sheet.Cells.item($x, 4)=($info.Date)
$x++
}
}
我还建议将$x
重命名为更具描述性的内容,例如$Row
。
答案 1 :(得分:1)
我建议立即获取所有信息,按服务器排序,选择所需内容,将其转换为制表符分隔的csv,将其复制到剪贴板,然后将其粘贴到电子表格中。
Caused by: org.apache.spark.sql.catalyst.errors.package$TreeNodeException: execute, tree:
TungstenExchange hashpartitioning
at org.apache.spark.sql.catalyst.errors.package$.attachTree(package.scala:49)
at org.apache.spark.sql.execution.Exchange.doExecute(Exchange.scala:247)
at org.apache.spark.sql.execution.SparkPlan$$anonfun$execute$5.apply(SparkPlan.scala:132)
at org.apache.spark.sql.execution.SparkPlan$$anonfun$execute$5.apply(SparkPlan.scala:130)
at org.apache.spark.rdd.RDDOperationScope$.withScope(RDDOperationScope.scala:150)
at org.apache.spark.sql.execution.SparkPlan.execute(SparkPlan.scala:130)
Caused by: org.apache.hadoop.ipc.RemoteException(java.io.IOException): Delegation Token can be issued only with kerberos or web authentication
at org.apache.hadoop.hdfs.server.namenode.FSNamesystem.getDelegationToken(FSNamesystem.java:7496)
at org.apache.hadoop.hdfs.server.namenode.NameNodeRpcServer.getDelegationToken(NameNodeRpcServer.java:548)
at org.apache.hadoop.hdfs.server.namenode.AuthorizationProviderProxyClientProtocol.getDelegationToken(AuthorizationProviderProxyClientProtocol.java:663)
at org.apache.hadoop.hdfs.protocolPB.ClientNamenodeProtocolServerSideTranslatorPB.getDelegationToken(ClientNamenodeProtocolServerSideTranslatorPB.java:981)