【问题标题】:Powershell How to query multiple classes and write in to SQL TablePowershell如何查询多个类并写入SQL表
【发布时间】:2013-11-22 12:18:23
【问题描述】:

不太了解 Powershell 和确实 sql,我花了整整一个星期才拼凑出一个可行的脚本,但我需要帮助来扩展它。它适用于从同一个类中检索超过 1 个值并插入这些值。我需要做的是能够从其他类中检索值并将结果插入到适当的列中。任何帮助/建议将不胜感激。

$servernames = Get-WmiObject -computername Anycompname -class win32_ComputerSystem |     Select Name, Manufacturer

# Open Connection
$conn = New-Object System.Data.SqlClient.SqlConnection
$connectionString = "Server=;Database=;user=;pwd=;"
$conn.ConnectionString = $connectionString
$conn.Open()

# Create the Command object to execute the queries
$cmd = New-Object System.Data.SqlClient.SqlCommand
$cmd.Connection = $conn
$cmd.CommandType = [System.Data.CommandType]::Text

# Write Data
foreach ($servername in $servernames)
{
# Compose Query for this $servername - watch the single quotes for string values!!
$query = "INSERT INTO dbo.U_Server (ServerName, OSVersion) VALUES ('" +        $servername.Name + "', '" + $servername.Manufacturer + "')"

# Uncomment next line to display query for checking
$query 

# Setup Command
$cmd.CommandText = $query

# Execute Command to insert data for this $drive
$result = $cmd.ExecuteNonQuery() 
}

# Tidy Up 
$conn.Close()

【问题讨论】:

    标签: sql powershell insert wmi


    【解决方案1】:

    只需在 foreach 循环中获取其他 WMI 对象,并根据需要继续添加到您的插入字符串。

    
    foreach ($servername in $servernames)
    {
    ##  Get other WMI info as needed here.
    $os = Get-WmiObject -class win32_operatingsystem –computername $servername.Name
    $processors = Get-WmiObject Win32_Processor -computername $servername.Name
    
    # Compose Query for this $servername 
    $query = "Insert Into dbo.U_Server (ServerName, OSVersion, OSName, OSServicePack) Values 
    ('$($servername.Name)', '$($servername.Manufacurer)', ‘$($os.Caption)’, ‘$($os.ServicePackMajorVersion)’ )"
    
    ##  The rest of your foreach loop follows
    
    }  ##  End of foreach
    

    【讨论】:

    • 感谢一百万布鲁斯。我会试试这个并报告
    • 嘿布鲁斯 - 当扩展 foreach 循环时它应该是什么样子? # 写入数据 foreach ($servername in $servernames),($OS in $OS) or foreach ($servername in $servernames) | ($OS 中的 $OS)提前致谢。真的,真的很新:-)
    • 我扩展了我的答案以显示在何处/如何获取添加的 WMI 信息。
    • 谢谢布鲁斯 - 会尽快试试这个。
    • 干杯布鲁斯。搞定了它,它起作用了。再次感谢。抱歉延迟试用。
    猜你喜欢
    • 1970-01-01
    • 2019-07-26
    • 1970-01-01
    • 2012-10-19
    • 1970-01-01
    • 1970-01-01
    • 2019-08-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多