在powershell中通过csv文件循环

时间:2017-04-22 15:47:03

标签: powershell

我有一个从sql数据库导出的csv文件。该文件有2列,包含100条记录: FunctionName DateCreated

所以我希望看到数据库中每个函数引用的每个对象。

这是我到目前为止编写的代码:

$Query=  "SELECT  space(iteration * 4) + TheFullEntityName + ' (' + rtrim(TheType) + ')', *
               FROM    dbo.fn_DependantObjects('$FunctionName',    1,     0)    
               ORDER BY ThePath" 

请注意:dbo.fn_DependantObjects,是我已创建的功能。

$fileName = 'c:\CurrentDate.csv'
foreach ($pattern in (Import-Csv $filename | % {$_.FunctionName})) {
    Invoke-Sqlcmd -ServerInstance "ServerName" -Database "DatabaseName" -Query $Query

我仍然是PowerShell的新手,如果有人能以任何其他方式帮助我,我将非常感激。我被困住了,这个项目落后于计划。

让我知道。

由于 不朽

3 个答案:

答案 0 :(得分:2)

$Query字符串中,您使用$FunctionName来引用功能名称,但在foreach()循环中使用$pattern - 首先修复此问题。

然后,确保在 $Query被分配后指定$FunctionName字符串

$fileName = 'c:\CurrentDate.csv'
foreach ($FunctionName in Import-Csv $filename | % {$_.FunctionName}) {
    $Query=  "SELECT  space(iteration * 4) + TheFullEntityName + ' (' + rtrim(TheType) + ')', *
               FROM    dbo.fn_DependantObjects('$FunctionName',    1,     0)    
               ORDER BY ThePath" 
    Invoke-Sqlcmd -ServerInstance "ServerName" -Database "DatabaseName" -Query $Query
}

答案 1 :(得分:0)

从查询中查看此行:

FROM    dbo.fn_DependantObjects('$FunctionName',    1,     0)  

它正在尝试使用字符串插值在字符串中设置$FunctionName变量。但是,在您运行该代码时,$FunctionName还没有值。当你第一次将它分配给$Query变量时,它试图完成字符串插值,而不是通过循环保存每次迭代的占位符。

要解决此问题,您需要将该字符串变量赋值代码移动到循环中:

$fileName = 'c:\CurrentDate.csv'
foreach ($pattern in (Import-Csv $filename | % {$_.FunctionName})) {
    $Query=  "SELECT  space(iteration * 4) + TheFullEntityName + ' (' + rtrim(TheType) + ')', *
               FROM    dbo.fn_DependantObjects('$FunctionName',    1,     0)    
               ORDER BY ThePath" 
    Invoke-Sqlcmd -ServerInstance "ServerName" -Database "DatabaseName" -Query $Query
}

答案 2 :(得分:0)

with -format(-f)喜欢它:

Import-Csv $filename | %{
    $Query=  "SELECT  space(iteration * 4) + TheFullEntityName + ' (' + rtrim(TheType) + ')', *
               FROM    dbo.fn_DependantObjects('{0}',    1,     0)    
               ORDER BY ThePath" -f $_.FunctionName
    Invoke-Sqlcmd -ServerInstance "ServerName" -Database "DatabaseName" -Query $Query

}