Powershell通过ForEach循环(或嵌套的Foreach)中的数组前进

时间:2017-06-05 18:52:18

标签: arrays powershell

民间,

我找到了一些答案,但它们似乎是用于手动数组,或者当你知道确定的数字时。我有一个阵列,我不知道会有多少人在那里。想知道我是否能得到帮助。

基本上 - 我希望它通过每个服务器,获取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]数组前进。

2 个答案:

答案 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)