基本上,我希望資料顯示在 Excel 檔案中,就像它顯示在 SQL 資料庫中一樣。這是我需要做的作業的更簡化版本,但本質上就是這樣。
我從 SQL 中檢索資料,對于檢索到的每個專案(這是主鍵),我希望將與其對應的資料添加到哈希表中。然后我將此哈希表匯出為 CSV
生成了 CSV 檔案,但有一些奇怪的資料

我不確定到底出了什么問題,因為當我Write-host $hashObject看到資料在那里時。
代碼
$server = "DESKTOP\SQLEXPRESS"
$database = "AdventureWorks2019"
$hashTable = @{}
$hashObject = @([PSCustomObject]$hashTable)
$query = "SELECT[DepartmentID] FROM [AdventureWorks2019].[HumanResources].[Department]"
$invokeSql = Invoke-Sqlcmd -ServerInstance $server -Database $database -Query $query
$departmentResult = $invokeSql.DepartmentID
ForEach($department in $departmentResult){
$queryAll = "SELECT [Name],[GroupName],[ModifiedDate]FROM [AdventureWorks2019].[HumanResources].[Department] Where DepartmentID=$department"
$invokeSql = Invoke-Sqlcmd -ServerInstance $server -Database $database -Query $queryAll
$name = $invokeSql.Name
$groupName = $invokeSql.GroupName
$modifiedDate = $invokeSql.ModifiedDate
$hashObject =("Department",$department, "Name",$name,"GroupName",$groupName,"ModifiedDate",$modifiedDate)
}
ConvertTo-Csv $hashObject| Export-Csv -Path "C:\Users\Desktop\PowerShell\HashTable_OutputFiles\HashOutput.csv"
uj5u.com熱心網友回復:
這是您嘗試做的簡化版本,在這種情況下,您應該能夠在第二個查詢中使用SQL IN 運算子,而不是在每次回圈迭代時查詢您的資料庫。
順便說一句,在宣告哈希表然后將其轉換為PSCustomObject實體然后將其包裝在陣列中時,尚不清楚您想要做什么:
$hashTable = @{}
$hashObject = @([PSCustomObject] $hashTable)
還值得注意的是ConvertTo-Csv和Import-Csv以這樣一種方式編碼,即它們旨在從管道接收物件。這個答案可能有助于澄清為什么。還不清楚為什么您嘗試首先將物件轉換為 Csv,然后在Import-Csv可以(在這種情況下,必須)接收物件時將它們匯出,將它們轉換為 Csv 字串,然后將它們匯出到檔案。
$server = "DESKTOP\SQLEXPRESS"
$database = "AdventureWorks2019"
$query = "SELECT [DepartmentID] FROM [AdventureWorks2019].[HumanResources].[Department]"
$invokeSql = Invoke-Sqlcmd -ServerInstance $server -Database $database -Query $query
$department = "'{0}'" -f ($invokeSql.DepartmentID -join "','")
$query = @"
SELECT [Name],
[GroupName],
[ModifiedDate]
FROM [AdventureWorks2019].[HumanResources].[Department]
WHERE DepartmentID IN ($department);
"@
Invoke-Sqlcmd -ServerInstance $server -Database $database -Query $query |
Export-Csv -Path "C:\Users\Desktop\PowerShell\HashTable_OutputFiles\HashOutput.csv"
如果你想從第一個查詢中查詢每個 ID 的資料庫,你可以這樣做(注意這類似于你想要完成的,將ID與第二個查詢的第二個結果合并):
$invokeSql = Invoke-Sqlcmd -ServerInstance $server -Database $database -Query $query
$query = @"
SELECT [Name],
[GroupName],
[ModifiedDate]
FROM [AdventureWorks2019].[HumanResources].[Department]
WHERE DepartmentID = '{0}';
"@
& {
foreach($id in $invokeSql.DepartmentID) {
$queryID = $query -f $id
Invoke-Sqlcmd -ServerInstance $server -Database $database -Query $queryID |
Select-Object @{ N='DepartmentID'; E={ $id }}, *
}
} | Export-Csv -Path "C:\Users\Desktop\PowerShell\HashTable_OutputFiles\HashOutput.csv"
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/490716.html
上一篇:Powershell腳本需要幫助
