#sql-server #powershell
Вопрос:
Я пытаюсь импортировать электронную таблицу, содержащую несколько столбцов, но я также хотел бы получить имя файла Excel, которое будет добавлено в список столбцов, которые будут импортированы в MS SQL Server.
Прямо сейчас — приведенный ниже код выбирает нужные мне столбцы из электронной таблицы и импортирует их в таблицу. Но то, что я хотел бы сделать, это захватить имя файла и включить его в импорт в именованный столбец BatchFileName
.
В конце концов, я хочу изменить это, чтобы просмотреть папку и загрузить любую найденную электронную таблицу, но для начала я хотел сначала посмотреть, возможно ли это. Я попытался добавить переменную в Select-объект, но это не сработало. И на данный момент у меня нет никаких других идей.
Возможно ли это? И если да, то как бы этого добиться?
$FileDirectory = "C:QualityReport"
$FileName = "QualityReport05142021.xlsx"
$BatchFileName = -JOIN ($FileDirectory,$FileName)
Write-Host $BatchFileName
$SQLInstance = "localhost"
$Database = "GenericDB"
$data = Import-Excel -Path $ImportFile -WorksheetName "Sorted" | Select-Object "IP","Network","DNS","NetBIOS","Tracking Method","OS","IP Status","QID","Title","Vuln Status","Type","Severity","Port","Protocol","FQDN","SSL"
#Write-Host $data
Write-DbaDataTable -SqlInstance $SQLInstance -Database $Database -Table "dbo.QualityReport" -InputObject $data -Truncate
Комментарии:
1. Если вы делаете это вручную, почему бы не создать столбец в файле Excel и не избежать сложностей? support.microsoft.com/en-us/office/…
2. Конечная цель-не ручной процесс, а сбор файлов, сохраненных на сетевом диске, и выполнение этой операции.
3. Это должно дать вам дополнительный толчок: github.com/dfinke/ImportExcel/blob/master/mdhelp/en/…
Ответ №1:
PowerShell поддерживает вычисляемые свойства во многих командлетах.
Вы можете изменить следующую строку (завернутую для ясности):
$data = Import-Excel -Path $ImportFile -WorksheetName "Sorted" `
| Select-Object "IP","Network","DNS","NetBIOS","Tracking Method","OS","IP Status","QID","Title","Vuln Status","Type","Severity","Port","Protocol","FQDN","SSL"
К чему-то вроде этого:
$data = Import-Excel -Path $ImportFile -WorksheetName "Sorted" `
| Select-Object @{Name="BatchFileName";Expression={$ImportFile}},"IP","Network","DNS","NetBIOS","Tracking Method","OS","IP Status","QID","Title","Vuln Status","Type","Severity","Port","Protocol","FQDN","SSL"
Комментарии:
1. Я полагаю, что предпочтительнее сделать обратный отсчет, чтобы у вас была труба в начале следующей строки. Решил, что я бы указал оператору, что символ канала (
|
) можно использовать в качестве символа продолжения, например[...] -WorksheetName "Sorted" | <new line> Select-Object [...]