【问题标题】:PowerShell and SQL serverPowerShell 和 SQL 服务器
【发布时间】:2014-03-03 10:20:37
【问题描述】:

目前我正在开发一个 PowerShell 脚本,该脚本正在提取有关操作系统、修补程序和已安装软件的信息。

好吧,如果我想导出到 txt 文件,一切都运行良好 - 一切。

但我的新任务是将这些信息上传到 sql server。

所以我正在创建一个 foreach 循环来打印已安装的软件并将所有内容放入服务器中。 PowerShell 没有显示任何错误,但我无法将此数据导入 sql server。

$conn = New-Object System.Data.SqlClient.SqlConnection
$conn.ConnectionString = "Data Source=myserver; Initial Catalog=table; Integrated Security=SSPI;"
$conn.Open()
$soft = Get-WmiObject Win32_Product
$cmd = New-Object System.Data.SqlClient.SqlCommand 
$cmd.Connection = $conn
$cmd = $conn.CreateCommand()
foreach ($Software in $soft){

$query = "INSERT INTO dbo.mytable (SoftName, SoftVersion) VALUES ('$($Software.Name)', $($Software.Version))" }

$cmd.CommandText = $query
$result = $cmd.ExecuteNonQuery
$conn.close()

所以我的想法是,当我运行这个脚本时,我会在 sql server 中列出所有安装在 pc 上的软件。

软件名称:软件版本:

办公室 14.202

Sql 15

谢谢!

【问题讨论】:

    标签: sql powershell


    【解决方案1】:

    当你运行你的脚本时,你在 $result 变量中得到了什么? 我相信,你会得到名为 ExecuteNonQuery 的重载方法的签名。正确的方法调用如下所示:

    $result = $cmd.ExecuteNonQuery()
    

    如果您看到错误,我建议您使用下面的代码来获取有关它们的完整信息:

    $ErrorActionPreference = "Stop"
    $Error.Clear()
    try {
        # Your code
    }
    catch {
        $Error | Format-List * -Force
    }
    

    【讨论】:

    • 现在我在 powershell 中遇到错误 - '.2100' 附近和重载定义下的语法不正确
    • 我猜这不是 PowerShell 错误,而是 SQL 错误。
    • 我已经更新了帖子,介绍了如何获取有关错误的更多信息。你能发布运行更新代码的结果吗?
    • 另外,请发布 $query 变量的值
    • 错误码太大,我把它复制到txt文件中,这里是一个链接-efshare.com/?s=WCELTH。关于 $query ,我得到完全相同的错误。
    【解决方案2】:

    您正在覆盖插入命令而不是附加到它。此外,正如 levgen 所指出的,您缺少方法调用语法:

    foreach ($Software in $soft){
        $query = "INSERT INTO dbo.mytable (SoftName, SoftVersion) VALUES ('$($Software.Name)', $($Software.Version))" 
    } # Oops!
    # Now $query contains only the last insert statement.
    $cmd.CommandText = $query
    $result = $cmd.ExecuteNonQuery # Should be .ExecuteNonQuery()
    $conn.close()
    

    试试这样的,

    foreach ($Software in $soft){
        $query += "INSERT INTO dbo.mytable (SoftName, SoftVersion) VALUES ('$($Software.Name)', $($Software.Version));" 
    } # Appending insert staements
    # Now $query should contain lots of insert staements
    $cmd.CommandText = $query
    $result = $cmd.ExecuteNonQuery()
    $conn.close()
    

    【讨论】:

    • 谢谢!新的东西出现了。但现在我收到一堆关于附近语法不正确和一些数字的错误
    • @user22401 将错误添加到帖子中。如果没有特定的错误消息,就不能做很多事情。
    • 使用“0”参数调用“ExecuteNonQuery”的异常:“'.6012' 附近的语法不正确。'.4763' 附近的语法不正确。'.4763' 附近的语法不正确。附近的语法不正确'.4763'。'.4763'附近的语法不正确。'.4763'附近的语法不正确。'.4763'附近的语法不正确。'.4763'附近的语法不正确。'.4763'附近的语法不正确。'附近的语法不正确。 4763'。
    • 还有很多但是很多错误码都是一样的。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-08-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-11
    相关资源
    最近更新 更多