Вопрос или проблема
В настоящее время я ищу информацию о всех лицензиях 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
Объяснение скрипта
-
Получение списка компьютеров: мы загружаем список компьютеров из текстового файла, чтобы затем поочерёдно обрабатывать каждую запись.
-
Обработка исключений: блок
try-catch
позволяет обрабатывать возможные ошибки, такие как недоступные компьютеры или недостаточные права доступа. -
Извлечение информации: использование
Get-ItemProperty
позволяет извлекать нужные свойства, такие как имя и номер лицензии SolidWorks, из реестра. -
Формирование объекта: мы создаём настраиваемый объект с именем компьютера и его лицензией, который будет добавляться в результирующий массив.
-
Экспорт данных: в конце мы экспортируем все собранные данные в CSV файл, используя
Export-Csv
, что делает данные легко доступными для анализа.
Заключение
Этот подход обеспечит вам полный и структурированный способ получения информации о лицензиях SolidWorks из вашей сети. С учетом возможности расширения: вы можете легко модифицировать скрипт, добавляя дополнительные проверки, обработку различных форматов и другие усовершенствования по мере необходимости. Такой скрипт будет полезен не только для извлечения информации о лицензиях, но и станет отличным базисом для дальнейшего использования в других проектах, связанных с администрированием и анализом данных.