Powershell Variable将我们显示为命令而不是值

时间:2014-04-13 11:46:34

标签: sql powershell

当我运行此脚本时,结果不会仅用于获取结果的命令插入数据库。

如果我只是将变量$Computername$username输出到他们正确输出的屏幕

$Computername = 'get-wmiobject -query "select csname from win32_operatingsystem" | select-object     csname | ft -hide'
$username = 'Get-Childitem env:username |select value | ft -hide'
$SqlCmd = New-Object System.Data.SqlClient.SqlCommand 
$SqlInsert = @"

insert into info (computername,username)
Values ('$computername','$username')

"@
$Connection.open() 
$SqlCmd.CommandText = $SqlInsert
$SqlAdapter = New-Object System.Data.SqlClient.SqlDataAdapter
$SqlAdapter.SelectCommand = $SqlCmd
$SqlCmd.Connection = $Connection
$DataSet = New-Object System.Data.DataSet
$SqlAdapter.Fill($DataSet)
$Connection.Close()

关于如何仅插入变量而不是命令的任何想法?

2 个答案:

答案 0 :(得分:1)

单击这样的单引号。

$Computername = get-wmiobject -query "select csname from win32_operatingsystem" | select-object     csname | ft -hide
$username = Get-Childitem env:username |select value | ft -hide

另外,您会发现获取计算机名和用户名的代码与此相同;

$env:computername
$env:username

答案 1 :(得分:1)

三件事:

  1. 您正在将字符串传递给$ Computername和$ username变量,而不是命令。 从这些变量赋值中删除第一个和最后一个单引号。

  2. Format-Table Cmdlet用于更好地格式化PowerShell控制台的输出。

    $ Computername = get-wmiobject -query“从win32_operatingsystem中选择csname”| select-object csname | ft -hide

    上面的命令为您提供了一个格式对象,您可以使用

    查看

    $computername | Get-Member

    此对象不是您要插入数据库的对象。 而是使用-Expandproperty Select-object参数来获取字符串值。

    $Computername = get-wmiobject -query "select csname from win32_operatingsystem" | select-object -ExpandProperty csname

    $username = Get-Childitem env:username |select -ExpandProperty value

  3. 您缺少SQLConnection对象。或者可能是故意隐藏它:)