2013-12-09 2 views
1

Я пытаюсь использовать CSV-файл для автоматического именования компьютеров с помощью powershell. Наши имена компьютеров содержат общие номера моделей, которые говорят мне о фактическом типе компьютера. Например, модель # 2537CU1 - это Lenovo T410. Я хочу вывести номер модели и изменить переменную на T410.Powershell - Изменение переменных на основе CSV-файла

Я уже могу получить номер модели с вызовом get-wmiobject классу компьютеров, но для создания переменной с данными типа, например T410, мне нужно использовать кучу операторов If и elseif , Это связано с огромным числом или моделями/типами, которые мы поддерживаем. Моя цель - иметь CSV для редактирования вместо самого скрипта. Я просто хочу, чтобы соответствующая модель получала правильную переменную для «типа» машины.

Так вот где моя голова до сих пор, и я знаю, что я далеко:

$model = Get-WmiObject -Class Win32_ComputerSystem | select -ExpandProperty Model 
$modelCSV = "0" 
$typeCSV = "0" 
Import-Csv -Path "C:\TechDiv\ComputerModel_Type.csv" | 
ForEach-Object { 
    $modelCSV += $_.Model 
    $typeCSV += $_.Type 
    } 
if ($modelCSV -like $model) 
    { 
     $model = $typeCSV 
    } 

Где моя CSV выглядит следующим образом:

Model, Type 
0401B7U, A70Z 
0401R6U, A70Z 
1165A3U, A70Z 
25521H8, 0E31 
2552Ck1, 0E31 
7360, 0M58 
7483, 0M58 
7630, 0M58 

В конечном итоге мой компьютер именования скрипт сростить модель и серийный номер для удобных коллекций и обновлений. Пример с моделью/серийным названием (0 в блокнот левый серийному для заполнения 10 пробелов): T410000R84D06Z

ответ

1

Вот как я бы это сделать:

$model = Get-WmiObject -Class Win32_ComputerSystem | select -ExpandProperty Model 
$modelCSV = "0" 
$typeCSV = "0" 
$modelList = Import-Csv -Path "C:\TechDiv\ComputerModel_Type.csv" | 
$modelName = $modelList | Where-Object{$_.Model -eq $model} 
+0

Как перевести «Модель», которую вызывает WMI-вызов, и изменить на «Тип» из CSV. Тип - это то, что я действительно хочу. Таким образом, вызов WMI дает мне, например, 3257CU1 (модель). Я хочу, чтобы перевести мою переменную в T410 (тип). – LiquidCourage11

+0

Я использовал вашу линию Where-Object и пошел немного дальше, так как мне понадобилась информация типа «Type». Проводка кода в ответе ниже, поскольку ответы не могут содержать фрагменты кода. – LiquidCourage11

+0

$ model = Get-WmiObject -Class Win32_ComputerSystem | select -ExpandProperty Model $ modelType = Import-Csv -Path "C: \ TechDiv \ ComputerModel_Type.csv" | Where-Object {$ _. Model -eq $ model} | выберите -ExpandProperty type – LiquidCourage11

0

Я бы загрузить его CSV в хэш-таблицу:

$ModelHash = @{} 
Import-Csv -Path "C:\TechDiv\ComputerModel_Type.csv" | 
ForEach-Object { $ModelHash[$_.Model = $_.Type } 

$model = Get-WmiObject -Class Win32_ComputerSystem | select -ExpandProperty Model 

$Type = $ModelHash[$Model] 
Смежные вопросы