【问题标题】:Powershell to export AD thumbnails to databasePowershell 将 AD 缩略图导出到数据库
【发布时间】:2021-05-08 19:05:01
【问题描述】:

Poweshell 新手。尝试将 AD 缩略图导出到数据库表。我可以将缩略图存储为 varbinary 或 base64 字符串。我遇到的问题是我的脚本只是挂起。我找不到任何导出到数据库的干净示例。非常感谢任何有助于理解为什么会挂起的帮助。

$conn = New-Object System.Data.SqlClient.SqlConnection("Data Source=DBSERVER; Initial 
      Catalog=DBName; Integrated Security=SSPI");
$conn.open();
$users = Get-ADUser -Filter {enabled -eq $true -and passwordneverexpires -eq $false -and  
     sAMAccountName -eq "MyUserName"} -SearchBase 
     "OU=MIS_Staff,OU=People,OU=MyCompany,DC=mydomain,DC=com" -Properties * |
     Where-Object { $_.thumbnailphoto -ne $Null } |
    select name,samaccountname,EmployeeNumber,ThumbNailPhoto;
   foreach ($item in $users) {
    $cmd = $conn.createcommand();
    $cmd.commandtext = "INSERT AdPhotos (Username, EmployeeNumber, Image)
       VALUES ('$($item.samaccountname)', '$($item.employeeNumber)', '$($item.thumbnailPhoto)')";
    $cmd.executenonquery(); 
   $conn.close();

【问题讨论】:

    标签: sql powershell thumbnails


    【解决方案1】:

    我没有可以将其写入的数据库,但有几点我可以在没有测试的情况下提出。我注意到的第一件事是您在每次循环迭代时都关闭了 SQL 连接。看起来不会超过第一次插入。

    我做了一些其他的调整,主要是为了玩它:

    $conn = New-Object System.Data.SqlClient.SqlConnection("Data Source=DBSERVER; Initial 
          Catalog=DBName; Integrated Security=SSPI")
    $conn.open()
    
    # Should you escape the Bools?
    $ADFilter   = "Enabled -eq $true -and passwordneverexpires -eq $false -and sAMAccountName -eq 'MyUserName'"
    $SearchBase = "OU=MIS_Staff,OU=People,OU=MyCompany,DC=mydomain,DC=com"
    $ADProps    = 'EmployeeNumber', 'ThumbNailPhoto'
    
    $Users = 
    Get-ADUser -Filter $ADFilter -SearchBase $SearchBase -Properties $ADProps |
    Where-Object { $_.ThumbNailPhoto } |
    Select-Object Name,samAccountName,EmployeeNumber,ThumbNailPhoto
    
    ForEach ( $User in $Users ) 
    {
        $cmd = $conn.createcommand()
        $cmd.commandtext = "INSERT AdPhotos (Username, EmployeeNumber, Image)
           VALUES ('$($User.samaccountname)', '$($User.employeeNumber)', '$($User.thumbnailPhoto)')"
        $cmd.executenonquery()
    }
    
    # Close the connection after the loop:
    $conn.close
    

    通常,您应该只检索您需要的属性。我还将$Item 替换为$User,这更像是一种标准模式。我也不认为你需要 Select-Object 代码应该可以在没有它的情况下正常工作,尽管我确实将它留在了示例中。

    不确定这是否是一个问题,但 ThumbNail 属性将在 $cmd.commandText = "..." 中返回一个字节数组 ([byte[]]),该数组应转换为以空格分隔的字符串。但是,您可能需要检查 Image 列的 SQL 数据类型,以确保它可以获取数据...

    顺便说一句,有几种方法可以使用 .Net 类来处理 SQL DB。我对这些事情的代码有点不同,但看看方法和文档,你所做的应该是可行的。

    【讨论】:

      猜你喜欢
      • 2017-01-17
      • 1970-01-01
      • 1970-01-01
      • 2012-07-09
      • 2017-06-28
      • 2014-09-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多