Как экспортировать ключ реестра в CSV?

Вопрос или проблема

В настоящее время я ищу информацию о всех лицензиях SolidWorks в сети.

Мне нужна помощь в написании скрипта на PowerShell, чтобы просмотреть список хостов, которые находятся в файле CSV/TXT, а затем выполнить следующую команду, сохранив результат в формате CSV с именем компьютера и записью лицензии SolidWorks в реестре.

введите описание изображения здесь

Вот команда, которую я использую:

Invoke-Command -ComputerName NAME -Command {Get-ItemProperty -Path HKLM:\SOFTWARE\SolidWorks\Licenses}

По умолчанию SolidWorks хранит информацию о лицензиях в следующем пути реестра:

COMPUTERNAME\HKEY_LOCAL_MACHINE\SOFTWARE\SolidWorks\Licenses\Serial Numbers\Solidworks

Что-то вроде этого даст вам отправную точку:

# Получите компьютеры из текстового файла. по 1 компьютеру на строку
$myComputerList = Get-Content C:\Installs\computerList.txt

# Проходим по массиву
ForEach ($computer in $myComputerList) {
    # Выполните команду на компьютере
    Invoke-Command -ComputerName $computer -ScriptBlock {
        # Это команда для выполнения
        # Получите значение реестра, которое вам нужно, и сохраните его в переменной
        $value = Get-ItemPropertyValue -Path "HKLM:\SOFTWARE\Microsoft\Windows NT\CurrentVersion\" -Name ProductName
        # Получите имя машины, с которой вы работаете
        $computerName = $env:COMPUTERNAME
        # Разделите их запятой и выгрузите в файл. Это может быть UNC путь на сетевом ресурсе
        ($computerName + "," + $value) | Out-File -FilePath C:\Installs\Output.csv -Append
    }
}

Ответ или решение

Экспорт ключа реестра SolidWorks в CSV с помощью PowerShell

Для извлечения информации о лицензиях SolidWorks из сети с использованием PowerShell и сохранения данных в формате CSV, нам нужно будет воспользоваться специальной командой, которая позволяет работать с удалёнными компьютерами. Важным аспектом этой задачи является корректное создание скрипта, обеспечивающего нужный входной и выходной форматы.

Вот пошаговое руководство по реализации данной задачи:

Шаг 1: Подготовка списка компьютеров

Первый шаг заключается в создании текстового файла, содержащего перечень компьютеров, с которых вы хотите извлечь информацию. Каждый компьютер должен указываться на отдельной строке. Например, создайте файл computerList.txt по следующему пути:

C:\Installs\computerList.txt

Шаг 2: Написание PowerShell скрипта

Теперь мы можем написать скрипт, который будет извлекать данные из реестра SolidWorks. Мы будем использовать команду Invoke-Command, чтобы выполнить команду на каждом из удалённых компьютеров, и функцию Get-ItemProperty, чтобы получить необходимые значения из реестра.

Вот пример PowerShell скрипта:

# Получаем список компьютеров из текстового файла
$myComputerList = Get-Content C:\Installs\computerList.txt

# Создаем массив для хранения результатов
$results = @()

# Перебираем список компьютеров
ForEach ($computer in $myComputerList) {
    # Выполняем команду на удалённом компьютере
    try {
        $licenseInfo = Invoke-Command -ComputerName $computer -ScriptBlock {
            # Получаем данные о лицензии
            Get-ItemProperty -Path "HKLM:\SOFTWARE\SolidWorks\Licenses" | Select-Object -Property PSChildName, SerialNumber
        }

        # Если команда успешна, добавляем результаты в массив
        if ($licenseInfo) {
            ForEach ($entry in $licenseInfo) {
                $results += [PSCustomObject]@{
                    ComputerName = $computer
                    ChildName = $entry.PSChildName
                    SerialNumber = $entry.SerialNumber
                }
            }
        }
    } catch {
        Write-Host "Не удалось получить данные с компьютера $computer: $_"
    }
}

# Сохраняем результаты в CSV файл
$results | Export-Csv -Path C:\Installs\SolidWorks_Licenses.csv -NoTypeInformation -Encoding UTF8

Объяснение скрипта

  1. Получение списка компьютеров: мы загружаем список компьютеров из текстового файла, чтобы затем поочерёдно обрабатывать каждую запись.

  2. Обработка исключений: блок try-catch позволяет обрабатывать возможные ошибки, такие как недоступные компьютеры или недостаточные права доступа.

  3. Извлечение информации: использование Get-ItemProperty позволяет извлекать нужные свойства, такие как имя и номер лицензии SolidWorks, из реестра.

  4. Формирование объекта: мы создаём настраиваемый объект с именем компьютера и его лицензией, который будет добавляться в результирующий массив.

  5. Экспорт данных: в конце мы экспортируем все собранные данные в CSV файл, используя Export-Csv, что делает данные легко доступными для анализа.

Заключение

Этот подход обеспечит вам полный и структурированный способ получения информации о лицензиях SolidWorks из вашей сети. С учетом возможности расширения: вы можете легко модифицировать скрипт, добавляя дополнительные проверки, обработку различных форматов и другие усовершенствования по мере необходимости. Такой скрипт будет полезен не только для извлечения информации о лицензиях, но и станет отличным базисом для дальнейшего использования в других проектах, связанных с администрированием и анализом данных.

Оцените материал
Добавить комментарий

Капча загружается...