#sql #powershell
#sql #powershell
Вопрос:
Когда я пытаюсь выполнить результат SQL-запроса к Active Directory и экспортировать его в файл CSV, я всегда получаю шестнадцатеричный результат в каждой строке вместо выбранных мной свойств.
SQL:
$qry = New-Object System.Data.SqlClient.SqlCommand("SELECT Name, IsCompliant,LatestEntry,ComputerManufacturerName,ComputerModelName,OperatingSystemName,MachinesUsersNames FROM ComplianceCore.MachinesComplianceView", $conn)
$adapter = New-Object System.Data.SqlClient.SqlDataAdapter $qry
$dataset = New-Object System.Data.DataSet
$adapter.Fill($dataset) | Out-Null
Powershell:
get-adcomputer -filter * -properties CN, CanonicalName, IPv4Address | Where-Object { ($_.Name -notin $dataset.tables.name -and $_.CanonicalName -notlike "*Domain Contr*" -and $_.CanonicalName -notlike "*servers*" -and $_.CanonicalName -notlike "*Idle Computers*") } | Select-object CN, CanonicalName, IPv4Address | Export-Csv -Path "C:BACWSUSScriptsMBAM ComplianceNotConfiguredResult.csv"
Комментарии:
1.Вы должны показать нам часть результирующего файла, однако его необходимо удалить
| ft
, поскольку он предназначен только для отображения и может усекать отображаемые значения полей. Экспортируйте объекты в csv такими, какие они есть на самом деле,2. @Theo обновил раздел результатов
3. Вы удалили
| ft
, и что вы получаете при выполненииget-adcomputer -filter * -properties CN, CanonicalName, IPv4Address | Where-Object { ($_.Name -notin $dataset.tables.name -and $_.CanonicalName -notlike "*Domain Contr*" -and $_.CanonicalName -notlike "*servers*" -and $_.CanonicalName -notlike "*Idle Computers*") }
. Что находится внутри$dataset.tables.name
?4. КСТАТИ. Я бы предложил использовать регулярное
-match
выражение вместо этих повторяющихся-notlike
сравнений:$_.CanonicalName -notmatch "Domain Contr|servers|Idle Computers"
5. Обновил FT, я использую -notlike, поскольку хочу убедиться, что я не пропустил ни одного пробела, и $dataset.tables.name содержит имена устройств, на которых настроен bitlocker. Мой план состоит в том, чтобы получить все устройства в AD, которых нет в $dataset.tables.name список