首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >powershell将结果记录到数据库

powershell将结果记录到数据库
EN

Stack Overflow用户
提问于 2011-12-28 05:58:25
回答 1查看 2.6K关注 0票数 0

如何将Powershell命令的结果保存到MS SQL DB?

例如:

我在Powershell提示符下运行此命令: get-psdrive,它在列视图中返回一些结果。

如何获取结果的每个元素并将其记录到单独的数据库行/列中?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2011-12-28 06:19:44

我建议将命令的结果保存到一个变量中。例如:

代码语言:javascript
复制
$drives = Get-PSDrive

可以像这样对变量进行索引:

第一个元素:

代码语言:javascript
复制
$drives[0]

最后一个元素:

代码语言:javascript
复制
$drives[-1]

您可以使用foreach遍历每个元素

代码语言:javascript
复制
foreach ($drive in $drives) {
    # current drive is $drive
}

ForEach-Object cmdlet:

代码语言:javascript
复制
$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目录中:

代码语言:javascript
复制
dir $PSHOME/*format* | select Name

Get-PsDrive返回的对象属于System.Management.Automation.PSDriveInfo类型。文件PowerShellCore.format.ps1xml告诉格式化引擎在Powershell窗口中显示哪些属性。这些可能正是您正在寻找的属性,但是许多对象具有未显示的附加属性。例如,默认情况下,System.IO.DirectoryInfo类型的对象不会显示其所有属性。您可以使用Get-Member cmdlet查看其余的对象属性,例如:

代码语言:javascript
复制
Get-Item $env:windir | Get-Member

这将显示对象的所有方法和属性。还可以使用属性参数的通配符使用Select-Object cmdlet来查看对象的所有属性:

代码语言:javascript
复制
Get-Item $env:windir | Select-Object -Property *

要访问对象属性值,请使用以下语法:

代码语言:javascript
复制
$objectVariable.ObjectProperty

现在您已经知道了如何查看对象的属性和访问它们的值,接下来需要使用它来构造一条Insert SQL语句。下面是一个使用随SQL Server2008提供的Invoke-SqlCmd cmdlet的示例。

代码语言:javascript
复制
Invoke-Sqlcmd -ServerInstance $env:COMPUTERNAME -Database Test -Query "Insert MyTable values ('a', 'b')"

下面是一个循环遍历从Get-PsDrive返回的对象的示例,假设您有一个名为MyTable的表,并且它至少有两列接受文本数据:

代码语言:javascript
复制
Get-PsDrive | ForEach-Object {
    $providerName = $_.Name
    $providerRoot = $_.Root
    Invoke-Sqlcmd -ServerInstance $env:COMPUTERNAME -Database Test -Query "Insert MyTable values ('$providerName', '$providerRoot')"
}
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8649715

复制
相关文章

相似问题

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