如何将Powershell命令的结果保存到MS SQL DB?
例如:
我在Powershell提示符下运行此命令: get-psdrive,它在列视图中返回一些结果。
如何获取结果的每个元素并将其记录到单独的数据库行/列中?
发布于 2011-12-28 06:19:44
我建议将命令的结果保存到一个变量中。例如:
$drives = Get-PSDrive可以像这样对变量进行索引:
第一个元素:
$drives[0]最后一个元素:
$drives[-1]您可以使用foreach遍历每个元素
foreach ($drive in $drives) {
# current drive is $drive
}或ForEach-Object cmdlet:
$drives | ForEach-Object {
# current drive is $_
}现在您已经有了用于填充表的数据,您可以连接到数据库并执行数据库记录插入。
您可以使用Powershell SQL server cmdlet,也可以使用.NET对象进行连接。根据您使用的SQL server版本,您可以选择使用哪种SQL server。SQL Server 2008具有Powershell cmdlet,而2005没有。这里有大量关于SQL server2008Powershell集成here的信息。对于SQL Server2005,您有一些不同的选项。此问题解答here提供了与SQL Server2005一起使用的Powershell选项列表。
更多信息:
当Powershell显示对象信息时,它使用类型系统来选择性地确定在屏幕上显示对象的哪些属性。并不是所有对象都会显示。Powershell使用XML文件来确定要显示哪些属性,这些属性存储在Powershell目录中:
dir $PSHOME/*format* | select Name从Get-PsDrive返回的对象属于System.Management.Automation.PSDriveInfo类型。文件PowerShellCore.format.ps1xml告诉格式化引擎在Powershell窗口中显示哪些属性。这些可能正是您正在寻找的属性,但是许多对象具有未显示的附加属性。例如,默认情况下,System.IO.DirectoryInfo类型的对象不会显示其所有属性。您可以使用Get-Member cmdlet查看其余的对象属性,例如:
Get-Item $env:windir | Get-Member这将显示对象的所有方法和属性。还可以使用属性参数的通配符使用Select-Object cmdlet来查看对象的所有属性:
Get-Item $env:windir | Select-Object -Property *要访问对象属性值,请使用以下语法:
$objectVariable.ObjectProperty现在您已经知道了如何查看对象的属性和访问它们的值,接下来需要使用它来构造一条Insert SQL语句。下面是一个使用随SQL Server2008提供的Invoke-SqlCmd cmdlet的示例。
Invoke-Sqlcmd -ServerInstance $env:COMPUTERNAME -Database Test -Query "Insert MyTable values ('a', 'b')"下面是一个循环遍历从Get-PsDrive返回的对象的示例,假设您有一个名为MyTable的表,并且它至少有两列接受文本数据:
Get-PsDrive | ForEach-Object {
$providerName = $_.Name
$providerRoot = $_.Root
Invoke-Sqlcmd -ServerInstance $env:COMPUTERNAME -Database Test -Query "Insert MyTable values ('$providerName', '$providerRoot')"
}https://stackoverflow.com/questions/8649715
复制相似问题