首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Powershell foreach和export-csv不起作用

Powershell foreach和export-csv不起作用
EN

Stack Overflow用户
提问于 2019-06-19 06:55:51
回答 2查看 135关注 0票数 1

我使用powershell V3和/或powershell V4我在这个问题上已经讨论了几天,但到目前为止还没有解决方案。

我解释说,我有一个带有输入文件(服务器列表)的普通powershell,我希望通过循环foreach在该文件上应用处理,并在csv中检索输出。

然而,在一个100行的输入文件上,循环似乎起作用了,只有最后一行是导出的(前面出现的内容被覆盖了),我不知道为什么。我已经尝试通过添加用于增量的变量来重新调整脚本(参见下面的代码),但没有成功。

你能帮我解决这个问题吗?

代码语言:javascript
复制
enter code here Code1
                                            # Emplacement fichierSource
                        $fileComputerNames = "E:\ReportXplanif\ServeursIUCR2K12.txt"
                        # Write-Host $fileComputerNames

                        # Emplacement fichierDestination
                        $desti = "E:\ReportXplanif"
                        # Write-Host $desti

                        Foreach ($server in Get-Content $fileComputerNames) {


                            $cmde = {Get-ScheduledTask | Where {$_.Principal.userid -eq "ZRES\XPLANIF"} | Get-ScheduledTaskInfo}
                            Invoke-Command -ComputerName $server -ScriptBlock $cmde |
                            Select @{LABEL='Serveur';EXPRESSION={$server}}, TaskName,LastRunTime,NextRunTime
                            }
                           Export-csv ($desti + "\XplanifTasks.csv") -Delimiter "," -NoTypeInformation


                    code2
                    # Emplacement fichierSource
                    $fileComputerNames = "E:\ReportXplanif\ServeursIUCR2K12.txt"
                    # Write-Host $fileComputerNames

                    # Emplacement fichierDestination
                    $desti = "E:\ReportXplanif\"
                    # Write-Host $desti

                    $cmde = @()
                    Foreach ($server in Get-Content $fileComputerNames) {


                        $cmde += {Get-ScheduledTask | Where {$_.Principal.userid -eq "ZRES\XPLANIF"} | Get-ScheduledTaskInfo}
                        Invoke-Command -ComputerName $server -ScriptBlock $cmde |
                        Select @{LABEL='Serveur';EXPRESSION={$server}}, TaskName,LastRunTime,NextRunTime
                        }`enter code here`

                        $cmde | Export-csv ($desti + "\XplanifTasks.csv") -Delimiter "," -NoTypeInformation`enter
EN

回答 2

Stack Overflow用户

发布于 2019-06-19 11:12:00

就目前的代码而言,有几件事很有趣。

  1. 看起来就像是在构建一个脚本块的数组$cmde。为$fileComputerNames中的每个服务器添加一个脚本块,即使这些脚本块不是特定于服务器的。( Invoke-Command甚至接受脚本块的数组吗?我希望它会出错)
  2. 然后通过管道将此$cmde传输到Export-CSV
  3. While使用+=构建数组没有什么问题,它在PowerShell中效率非常低,如果数组很大,则应该避免使用,因为这将显著减慢您的脚本速度。

我不能完全检查你想要做什么,但是假设你的Invoke Command在一台计算机上做你想做的事情,下面这样的东西应该对你有效。

代码语言:javascript
复制
...
$cmde = {Get-ScheduledTask | Where {$_.Principal.userid -eq "ZRES\XPLANIF"} | Get-ScheduledTaskInfo}
$SchTasks = Foreach ($server in Get-Content $fileComputerNames) {
    Invoke-Command -ComputerName $server -ScriptBlock $cmde |
    Select @{LABEL='Serveur';EXPRESSION={$server}}, TaskName,LastRunTime,NextRunTime
}

$SchTasks | Export-csv ($desti + "\XplanifTasks.csv") -Delimiter "," -NoTypeInformation
票数 1
EN

Stack Overflow用户

发布于 2019-06-20 01:51:56

我非常想使用Task Scheduler com对象来做这件事,这样我就不必在所有计算机上创建远程会话,只需连接到它们的任务计划程序服务即可。这确实需要您在防火墙中启用对计划任务的远程管理,但是如果您允许远程powershell,那么您可能也会允许这样做。

代码语言:javascript
复制
$Scheduler = New-Object -ComObject Schedule.Service
Get-Content $fileComputerNames -PipelineVariable 'Server' |ForEach-Object{
    $i=0
    # Try to connect to remote task scheduler up to 3 times
    While(!$Scheduler.Connect($Server) -eq 0 -or $i -eq 3){$i++}
    # If we aren't connected to the right server throw a warning and move on to the next server
    If(!$Scheduler.TargetServer -eq $Server){Write-Warning "Unable to connect to $Server"; Continue}
    $RootFolder = $Scheduler.GetFolder('\')
    $RootFolder.GetTasks(1) | # The '1' indicates we want to include hidden tasks
        Where {$_.Principal.userid -eq "ZRES\XPLANIF"} |
        Select @{LABEL='Serveur';EXPRESSION={$server}}, Name, LastRunTime, NextRunTime
} | Export-Csv "$desti\XplanifTasks.csv" -Del ',' -NoType
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56658052

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档