Отображение данных в двух столбцах в Excel

Я пытаюсь отобразить данные в документе Excel, где в столбце A отображается имя сервера, а в столбце B отображается версия .NET. Я столкнулся с проблемой экспорта в .csv, потому что он говорит, что путь к файлу не существует. Я хотел бы получить некоторые рекомендации о том, как я могу решить эту проблему и как я могу отображать данные в двух столбцах в Excel.

$Servers =
(
"test"
)

foreach ($Server in $Servers)
{

Invoke-Command -ComputerName $Server -ScriptBlock {
Write-Output "$(hostname)"
Get-ChildItem 'HKLM:\SOFTWARE\Microsoft\NET Framework Setup\NDP' -Recurse | Get-ItemProperty -Name Version,Release -EA 0 | where { $_.PSChildName -match '^(?!S)\p{L}'} | select PSChildName, Version, Release | Select -ExpandProperty Version | Sort-Object Version | Export-Csv -Path C:\Users\User\Desktop\example.csv

}
Export-Csv -Path C:\Users\User\Desktop\example.csv находится внутри скриптового блока Invoke-Command, как кажется. Вы хотите экспортировать результат на локальный хост или на удаленный хост?
Santiago Squarzon 08.04.2022 22:44

@SantiagoSquarzon, я хочу экспортировать на локальный хост

Michael 08.04.2022 22:57

@SantiagoSquarzon. Есть ли лучший способ добавить несколько серверов, чтобы сценарий получил версию .NET для нескольких серверов? Когда я пытаюсь запустить обновленный скрипт, он просто продолжает проходить через каждый сервер и не останавливается.

Michael 08.04.2022 23:35

Может быть, есть более быстрый способ получить .NET-версию компьютера (я имею в виду лучше, чем блок сценария, который у вас уже есть), однако я не уверен в этом конкретно, я только что понял, что допустил ошибку с размещением Sort-Object в моем ответ (см. обновление).

Santiago Squarzon 08.04.2022 23:39

@SantiagoSquarzon, не обязательно имея в виду быстрый способ, но я говорю, что сценарий просто зацикливает серверы и не заканчивается, когда я добавляю в сценарий несколько серверов.

Michael 08.04.2022 23:52

Я не вижу ничего плохого в самом коде, возможно, он не может подключиться к некоторым хостам (время ожидания составляет около 2 минут), поэтому это может вызывать задержки. но наверняка цикл foreach будет намного медленнее

Santiago Squarzon 08.04.2022 23:58

@SantiagoSquarzon, хорошо, когда говорится, что работает над «___», это просто означает, что сценарий все еще работает и еще не завершен, верно?

Michael 09.04.2022 00:03

Да, сэр, дело в том, что, поскольку это работает в параллельно, вы увидите, что «работает над ...» для стольких хостов, сколько есть в $computers (все одновременно, вероятно, лол)

Santiago Squarzon 09.04.2022 00:05

@SantiagoSquarzon, я понимаю, что ты имеешь в виду. В любом случае, спасибо за объяснение и помощь!!

Michael 09.04.2022 00:07

Конечно, с удовольствием ;)

Santiago Squarzon 09.04.2022 00:08
Преобразование HTML-таблицы в профессиональный документ Excel
Преобразование HTML-таблицы в профессиональный документ Excel
Это самый простой способ создания Excel из HTML-таблицы.
Импорт excel в laravel в базу данных
Импорт excel в laravel в базу данных
Здравствуйте, дорогой читатель, в этой статье я расскажу практическим и быстрым способом, как импортировать файл Excel в вашу базу данных с помощью...
1
10
24
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Основная проблема заключается в том, что вы используете Export-Csv на удаленных хостах, так как он находится внутри блока сценария Invoke-Command, и симпатичная ошибка заключается в том, что путь, который вы используете в качестве экспорта, не существует на этих хостах.

Также стоит отметить, что Invoke-Command может работать параллельно, -ComputerName, а также -Session может принимать массив, это устраняет необходимость в цикле foreach, а также намного быстрее / эффективнее.

Invoke-Command -ComputerName $servers -ScriptBlock {
    Write-Host "Working on $($env:COMPUTERNAME)..."
    Get-ChildItem 'HKLM:\SOFTWARE\Microsoft\NET Framework Setup\NDP' -Recurse |
        Get-ItemProperty -Name Version, Release -EA 0 |
        ForEach-Object {
            if ($_.PSChildName -notmatch '^(?!S)\p{L}') {
                return # skip this
            }
        
            [pscustomobject]@{
                HostName = $env:COMPUTERNAME
                Version  = $_.Version
            }
        } | Sort-Object Version
} -HideComputerName | Select-Object * -ExcludeProperty RunspaceID |
    Export-Csv -Path C:\Users\User\Desktop\example.csv -NoTypeInformation

Другие вопросы по теме