Запрос к базе данных MYSQL с переменными powershell

Я пытаюсь проанализировать данные из базы данных MYSQL в powershell, а затем использовать эти данные для обновления учетных записей AD на основе переменных powershell & upn, но не могу заставить данные MySQL и переменную powershell работать должным образом. Я не SQL-парень, поэтому не уверен, что это с синтаксисом MYSQL или способом написания скрипта powershell.

Это команда в конце скрипта, которую я не могу получить, но я включил весь код ниже

$mysqlquery1 =  Invoke-MySqlQuery -Connection $oConnection  -Query 'Select * from user_informations where login='"$user.sAMAccountName" 

#
# Script.ps1
#
$GetUsersemail = Get-ADUser -Filter * -Properties mail, sAMAccountName, userPrincipalName -SearchBase "OUNAME"| Where-Object {($_.mail -ne $null)} | Select-Object mail,sAMAccountName,userPrincipalName

Import-Module activedirectory
Set-Location C:\MySQL\MySQL-master
Unblock-File -Path .\MySQL.psm1
Import-Module .\mysql.psm1

[System.Reflection.Assembly]::LoadWithPartialName("MySql.Data")
[string]$sMySQLUserName = sqluserid
[string]$sMySQLPW = 'password'
[string]$sMySQLDB = 'DB'
[string]$sMySQLHost = 'IP'
[string]$sConnectionString = "server="+$sMySQLHost+";port=3306;uid=" + $sMySQLUserName + ";pwd=" + $sMySQLPW + ";database="+$sMySQLDB+";SslMode=none"

$oConnection = New-Object MySql.Data.MySqlClient.MySqlConnection($sConnectionString)
$Error.Clear()

try

{
    $oConnection.Open()
    write-warning ("it connected")
$dataSet = New-Object System.Data.DataSet
}
catch
{
    write-warning ("Could not open a connection to Database $sMySQLDB on Host $sMySQLHost. Error: "+$Error[0].ToString())
}




ForEach ($user in $GetUsersemail) {
    $spn = $null
    $fullemail = $null
    $spnsplit = $user.mail.split("@")
    $spn = "@" + $spnsplit[1]
    $fullemail = $user.sAMAccountName + $spn

        if ($fullemail -ne $user.userPrincipalName) {


    Switch ($spn) {
            "@upn1.com" {
                Set-ADUser -UserPrincipalName $fullemail -Identity $user.sAMAccountName
                           }
            "@upn2.com" {   
                    Set-ADUser -UserPrincipalName $fullemail -Identity $user.sAMAccountName
                             }
             "@upn3" { 
                    Set-ADUser -UserPrincipalName $fullemail -Identity $user.sAMAccountName
                    }
            "@upn4" {
                    Set-ADUser -UserPrincipalName $fullemail -Identity $user.sAMAccountName
                    }
             "@upn5" {
                    Set-ADUser -UserPrincipalName $fullemail -Identity $user.sAMAccountName
                    }
              "@upn6" {
                    Set-ADUser -UserPrincipalName $fullemail -Identity $user.sAMAccountName
                    }
              "@upn7" {
                    Set-ADUser -UserPrincipalName $fullemail -Identity $user.sAMAccountName
                   }
               "@upn8" {
                    Set-ADUser -UserPrincipalName $fullemail -Identity $user.sAMAccountName
                    }
                    }
                    }

               $mysqlquery1 =  Invoke-MySqlQuery -Connection $oConnection  -Query 'Select * from user_informations where login='"$user.sAMAccountName" 
    }

   $oConnection.Close() 

1 ответ

Решение

Вы должны быть осторожны с цитированием строк в PowerShell; одиночные кавычки 'abc' не может иметь переменных внутри них, строки в двойных кавычках "abc" может, например, "abc $xyz" но вы не можете использовать "abc $xyz.property" потому что PowerShell относится к .property как часть текста, а не как часть переменной. Для этого вам нужно подвыражение, "abc $($xyz.property)"

В зависимости от того, как вам понадобится строка в кавычках, попробуйте:

"select * from user_informations where login='$($user.sAMAccountName)'" 

Двойные кавычки снаружи, так что вы можете поместить одинарные кавычки и подвыражения внутрь. Это должно получиться так:

select * from user_informations where login='john.hancock'

(Должно ли это быть user_information, единственное число?)

Другие вопросы по тегам