首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Foreach-Object中的增量变量

Foreach-Object中的增量变量
EN

Stack Overflow用户
提问于 2020-11-05 18:02:23
回答 2查看 75关注 0票数 1

我想将一些带有PowerShell的AD属性插入到SQL表中。到目前为止一切顺利:

代码语言:javascript
复制
$insert = @'
    INSERT INTO [mdb].[dbo].[import](id,userid)
    VALUES ('{0}','{1}')
'@
 
Try {
    
    $connectionString = 'Data Source=serverdb;Initial Catalog=mdb;Integrated Security=SSPI'
    $conn = New-Object System.Data.SqlClient.SqlConnection($connectionString)
    $conn.Open()
    $cmd = $conn.CreateCommand()

    $counter = 0

    Get-ADUser -Filter * -SearchBase "OU=company,DC=company,DC=state,DC=de" | Select @{Name="ID";Expression={ $global:counter; $global:counter++ }},SamAccountName |`
        ForEach-Object  {           
            $cmd.CommandText = $insert -f $counter,$_.SamAccountName
            $cmd.ExecuteNonQuery()
        }

    $conn.Close()
}
Catch {
    Throw $_
}

get-ADUser的输出是正确的,但是insert抛出了一个错误,即主键有重复的错误。递增一定是错误的。

有人能帮上忙吗?谢谢!

EN

回答 2

Stack Overflow用户

发布于 2020-11-05 18:47:08

ID是从1开始的,不是0,这正常吗?

此外,为什么要创建一个用户定义的属性(ID)而不使用它?

你也可以避免丑陋的全局作用域(这里从0开始计数):

代码语言:javascript
复制
#### $counter = 0     <--- No more usefull

Get-ADUser -Filter * -SearchBase "OU=company,DC=company,DC=state,DC=de" | Select SamAccountName |`
ForEach-Object -Begin { $counter = 0 } -Process {
            $cmd.CommandText = $insert -f $counter,$_.SamAccountName
            $cmd.ExecuteNonQuery()
            $counter++
            }

我不是SQL专家,所以这可能不是一个专家。但是,您在这里有更好的代码;)

票数 0
EN

Stack Overflow用户

发布于 2020-11-05 21:05:02

在使用SQL插入数据时,应该始终使用参数。(Why?)简而言之:它更安全,性能更好,更健壮,更容易使用。

将操作(++$counter)放在圆括号中,以便在递增后返回值。(如果您想要从0开始的if,请使用$counter++;如果您想要从1开始的if,请使用++$counter。)

代码语言:javascript
复制
$cmd.CommandText = "
    INSERT INTO [mdb].[dbo].[import](id,userid)
    VALUES (@id, @userId)
"
$counter = 0
Get-ADUser -Filter * -SearchBase "OU=company,DC=company,DC=state,DC=de" | foreach {
    $cmd.Parameters.Clear()
    $cmd.Parameters.AddWithValue("id", (++$counter))
    $cmd.Parameters.AddWithValue("userId", $_.SamAccountName)
    $cmd.ExecuteNonQuery()
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64694910

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档