Вывести Поиск домена Powershell на отдельных листах Excel - PullRequest
0 голосов
/ 06 июня 2019

Я выполняю Get-ADComputer и пытаюсь перебрать цикл, который извлекает имена компьютеров из отдельных комнат. Я пытаюсь вывести каждую комнату на другой лист Excel.

Я использую PowerShell Version 5:

$results = for($room=102; $room -le 110; $room++) {
    Get-ADComputer -SearchBase $oubase -Properties Name, Description -Filter * |
        Where-Object {$_.description -clike "*RM $Room"}
}

$results | 
    Select-Object Name, Description |
        Export-CSV '\\Desktop\Room_Hosts.csv' -NoTypeInformation -Encoding UTF8 -Append

Что мне нужно сделать, чтобы исправить вывод листа Excel?

1 Ответ

1 голос
/ 06 июня 2019

В вашем сообщении говорится, что вы хотите лист Excel, но ваш код выводится в CSV. Вы не можете добавить второй лист в CSV. Вы можете экспортировать различные файлы CSV для каждого объекта компьютера.

$results = for($room=102; $room -le 110; $room++) {
    Get-ADComputer -SearchBase $oubase -Properties Name, Description -Filter * |
        Where-Object {$_.description -clike "*RM $Room"}
}

$results | 
    Select-Object Name, Description | Foreach-Object {
        $_ | Export-CSV -Path ("\\Desktop\{0}.csv" -f $_.Name) -NoTypeInformation -Encoding UTF8 -Append

Если проблема связана с получением доменного имени, вы можете добавить код в вашу команду Select-Object.

$results = for($room=102; $room -le 110; $room++) {
    Get-ADComputer -SearchBase $oubase -Properties Name,Description,DNSHostName -Filter * |
        Where-Object {$_.description -clike "*RM $Room"}
}

$results | 
    Select-Object Name,Description,@{n='Domain';e={$_.DNSHostName -Replace $("{0}." -f $_.Name}} |
        Export-CSV '\\Desktop\Room_Hosts.csv' -NoTypeInformation -Encoding UTF8 -Append

Пояснение для получения домена объекта компьютера:

Свойство DNSHostName содержит полное доменное имя объекта компьютера. Таким образом, вам нужно только удалить часть имени хоста из этой строки. Здесь мы просто заменяем имя хоста и следующий символ . ничем. Имя хоста извлекается из свойства Name объекта компьютера. Оператор -f используется для простого добавления символа . к имени. Select-Object использует хеш-таблицу для вычисления значения домена и сохранения его в свойстве под названием Домен.

В качестве альтернативы вы можете применить те же концепции, что и выше, для получения доменного имени, но использовать CanonicalName объекта компьютера с оператором -Split.

$results = for($room=102; $room -le 110; $room++) {
    Get-ADComputer -SearchBase $oubase -Properties Name,CanonicalName,Description -Filter * |
        Where-Object {$_.description -clike "*RM $Room"}
}

$results | 
    Select-Object Name,Description,@{n='Domain';e={($_.CanonicalName -Split "/")[0]}} |
        Export-CSV '\\Desktop\Room_Hosts.csv' -NoTypeInformation -Encoding UTF8 -Append
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...