【问题标题】:Insert data with a collection object into a SQL Server table将带有集合对象的数据插入 SQL Server 表
【发布时间】:2021-10-31 05:34:37
【问题描述】:

下面的代码没有错误,它插入到 SQL Server 表中没有问题。但是[ServicePrincipalNames] 数据没有按我的计划插入。

插入到表中的值是

Microsoft.ActiveDirectory.Management.ADPropertyValueCollection

我要插入的是该对象集合中的值,如下所示:

WSMAN/Server1Name
WSMAN/Server1Name.mx.ds.abc.com
TERMSRV/Server1Name
TERMSRV/Server1Name.mx.ds.abc.com
RestrictedKrbHost/Server1Name
HOST/Server1Name
RestrictedKrbHost/Server1Name.mx.ds.abc.com
HOST/Server1Name.mx.ds.abc.com

执行插入的代码如下所示。我怎么能改变这个让插入将所有服务放在列中,用|分隔?

$sqlServer='SomeServer'
$catalog = 'SomeDatabase'


$insert = @"
Insert into dbo.ADServers([Name],[OperatingSystem],[OperatingSystemVersion],[ipv4Address],[Created],[Deleted],[whenChanged],[Modified],[Description],[ServicePrincipalNames],[DisplayName],[Location],[DistinguishedName],[DNSHostName])
values('{0}','{1}','{2}','{3}','{4}','{5}','{6}','{7}','{8}','{9}','{10}','{11}','{12}', '{13}')
"@

$start = (Get-Date).ToString('MM/dd/yyyy hh:mm:ss tt')


    
    $connectionString = "Data Source=$sqlServer;Initial Catalog=$catalog;Integrated Security=SSPI"
    # connection object initialization
    $conn = New-Object System.Data.SqlClient.SqlConnection($connectionString)
    #Open the Connection 
    $conn.Open()
    # Prepare the SQL 
    $cmd = $conn.CreateCommand()
    #WMI ouput transformation to SQL table



Get-ADComputer -Filter {operatingSystem -Like 'Windows*server*2019*'} -Property * |` 
        Select Name,OperatingSystem,OperatingSystemVersion,ipv4Address,Created,Deleted,whenChanged,Modified,Description,ServicePrincipalNames,DisplayName,Location,DistinguishedName,DNSHostName |`
           forEach-object{
                   $cmd.CommandText = $insert -f $_.Name, $_.OperatingSystem, $_.OperatingSystemVersion, $_.ipv4Address, $_.Created, $_.Deleted, $_.whenChanged, $_.Modified,$_.Description, $_.ServicePrincipalNames , $_.DisplayName,$_.Location,$_.DistinguishedName,$_.DNSHostName
                   $cmd.ExecuteNonQuery()
           }
 



$end = (Get-Date).ToString('MM/dd/yyyy hh:mm:ss tt')

Write-Host $start
Write-Host $end

【问题讨论】:

    标签: powershell powershell-5.1


    【解决方案1】:

    经过一段时间的谷歌搜索和了解外串后,好的。为了显示对象,我必须在该列上创建一个表达式并将其重写如下。它起作用了

    在查询中替换

    ServicePrincipalNames
    

    @{Label="ServicePrincipalNames";Expression={$_.ServicePrincipalNames -join ";" }}
    

    【讨论】:

      猜你喜欢
      • 2016-01-26
      • 1970-01-01
      • 1970-01-01
      • 2018-12-31
      • 2020-03-27
      • 2021-02-19
      • 2013-12-02
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多