【问题标题】:PowerShell - Add File Name to list of columns to be imported into SQL ServerPowerShell - 将文件名添加到要导入 SQL Server 的列列表中
【发布时间】:2021-09-13 01:42:01
【问题描述】:

我正在尝试导入包含几列的电子表格 - 但我还想获取 Excel 文件的名称,以添加到要导入 MS SQL Server 的列列表中。

现在 - 下面的代码从电子表格中选择我想要的列并将它们导入到表格中。但我想做的是获取文件名并将其包含在导入到名为BatchFileName 的列中。

最终我想修改它以遍历文件夹并加载它找到的任何电子表格,但首先我想看看这是否可行。我尝试将变量添加到 Select-Object 中,但没有奏效。而且我目前没有任何其他想法。

这可能吗?如果是这样,如何做到这一点?

$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

【问题讨论】:

标签: sql-server powershell


【解决方案1】:

PowerShell 在许多 cmdlet 上支持 Calculated Properties

您可以更改以下行(为清楚起见,换行):

$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"    

【讨论】:

  • 我认为最好使用反引号,这样您就可以在下一行的开头使用管道。我想我会向 OP 指出管道字符(|)可以用作延续字符,例如[...] -WorksheetName "Sorted" | <new line> Select-Object [...]
猜你喜欢
  • 2020-07-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-03-27
  • 1970-01-01
  • 2022-10-24
  • 1970-01-01
  • 2017-12-14
相关资源
最近更新 更多