如何使用SSIS将Powershell输出加载到SQL表中?

时间:2015-09-21 13:54:25

标签: sql-server powershell ssis

我试图让所有在我的域中被禁用的用户并将其放入SQL表中。我试图使用SSIS来做到这一点。现在我可以使用以下代码获取正确的输出并将其放入CSV文件中:

Search-ADAccount -AccountDisabled -UsersOnly | 
    Select Name | 
    Export-CSV -Path C:\Users\hou\Downloads\Test.csv

但是,由于我要在不同的服务器上运行该软件包,因此我无法通过固定的位置来存储文件并加载到SQL Table中。因此,我要在执行流程任务(我运行Powershell脚本)中使用变量来存储CSV文件,或者使用SSIS将输出直接存储在SQL表中。

但我不知道那些。我怎么能这样做?

2 个答案:

答案 0 :(得分:0)

位置应在脚本中定义,即:

$Path = Get-Location

“$路径\ Test.csv”

#Option 1 just a Name
$Path = Get-Location ; Get-ChildItem C:\temp | Select-Object Name | Export-CSV -Path "$Path\Test.csv"

## Option 2 Name, with other property
$Path = Get-Location ; Get-ChildItem C:\temp | Select-Object Name,mode | Export-CSV -Path "$Path\Test.csv"

对于一个班轮脚本,请使用“; ”分隔命令。

答案 1 :(得分:0)

我建议使用PowerShell将数据加载到SQL中。 Microsoft提供了一个免费的PowerShell模块,称为“ sqlserver”,它允许PowerShell直接与SQL通信。您可能已经安装了它。

## Check if installed:
Get-InstalledModule -Name SqlServer
## If installed you can Update (you may need to run as local admin):
Update-Module -Name SqlServer
## If not installed (only need admin if you want all users to have access to this module):
Install-Module SqlServer

一旦安装了模块,就会有一个名为“ Write-SqlTableData”的cmdlet将数据批量复制到SQL中。假设是(1)该表已经存在于SQL中。 (2)PowerShell Select中的所有列都与SQL表中存在的顺序和数据类型匹配。在这种情况下,将有一个带有单个[Name]列的SQL表。 (3)您正在使用AD凭据访问SQL,否则,您将不得不向cmdlet添加凭据。

实际的PowerShell代码,更新引号中的变量:

## Input Variables
$SqlServerName = ""
$SqlDatabaseName = ""
$SqlTableSchemaName = ""
$SqlTableName = ""

## Insert into SQL
Search-ADAccount -AccountDisabled -UsersOnly | Select-Object Name | Write-SqlTableData -ServerInstance $SqlServerName -DatabaseName $SqlDatabaseName -SchemaName $SqlTableSchemaName -TableName $SqlTableName -Force

请注意,如果您打算做很多PowerShell / SQL工作,则可能还需要安装“ WFTools”模块,因为它还具有许多其他SQL cmdlet。

希望这会有所帮助。