2014-10-22 1 views
0

У меня есть этот запрос на вставку, который неправильно вставлен и действительно раздражает. Я кратко объясню, что я пробовал, и чего я действительно хочу достичь.Powershell - Вставить в MySQL ошибку таблицы базы данных?

Что мой PS скрипт делает:

  1. пинг каждый компьютер из таблицы базы данных
  2. если пинг успешно, получить имя пользователя вошедшего от компьютера
  3. вставки в таблицу базы данных следующих значений: имя пользователя, имя хоста, онлайн (true/false)

Теперь вот проблемы, которые продолжают возникать.

Проблема 1: Если я использую следующую команду:

$ имя = Get-WMIObject -ComputerName $ АРМ -Класс Win32_ComputerSystem | Select-Object -ExpandProperty Username;

Это вставит значение имени пользователя следующим образом: SUPER/user1, который Хорошо, но я хочу, чтобы избавиться от «SUPER /» и просто держать фактическое имя пользователя «user1» перед вставкой.

Я попытался с помощью одного ниже, но он не работает:

$username = Get-WMIObject -ComputerName $workstation -Class Win32_ComputerSystem | Select-Object -ExpandProperty -replace '^.*\\' Username; 

Команда в задаче 1 даст мне эти две ошибки:

не может обработать аргумент, так как значение аргумента " obj "имеет значение null. Измените значение аргумента «obj» на ненулевое значение.

И

Get-WmiObject: Сервер RPC недоступен.

Как я могу игнорировать эти две ошибки?

Я надеюсь, что кто-то может помочь мне, потому что это действительно раздражает. спасибо заранее всем.

Powershell скрипт:

foreach($pcname in $workstation_list){ 

     $command = $connection.CreateCommand(); 
     $command.Connection = $connection; 
     $command.CommandText = "INSERT INTO workstation_userlogged 
           (username,hostname,online) 
           VALUES (@username,@hostname,@status)"; 

     ### ============================================================= 
     ### values to be assigned as a parameters 
     ### =============================================================   
     $workstation = $pcname;     
     $test_ping = Test-Connection -ComputerName $workstation -Count 1 -ErrorAction SilentlyContinue; 
     $status  = [bool](Test-Connection $workstation -Quiet -Count 1 -ErrorAction SilentlyContinue); 

     #if status is TRUE get username 
     if($test_ping) 
     { 
      $username = Get-WMIObject -ComputerName $workstation -Class Win32_ComputerSystem | Select-Object -ExpandProperty Username; 
      echo $username; 
      #echo -replace '^.*\\' $username;   

      #if ping succeeds but no user is logged 
      if($username -eq "") 
      { 
       $username = "no user logged"; 
      } 

     } #end if 

     #if ping DOES NOT succeed set username value to NULL and status to FALSE 
     elseif(!$test_ping) 
     { 
      $username = [DBNull]::Value; 
     } 

     ### ============================================================= 
     ### Assign parameters with appropriate values 
     ### ============================================================= 
     $command.Parameters.Add("@username", $username)  | Out-Null 
     $command.Parameters.Add("@hostname", $workstation) | Out-Null 
     $command.Parameters.Add("@status", $status)  | Out-null 
     ### ============================================================= 
     ### Execute command query 
     ### ============================================================= 
     try{ 
      $command.ExecuteNonQuery() | out-null; 
      Write-Host "Successfully inserted in Database"; 
     } 
     catch{ 
      Write-Host "Caught the exception"; 
      Write-Host "$_"; 
     } 

     ### ============================================================= 
     ### clear parameter values 
     ### ============================================================= 
     $command.Dispose() 
     $workstation = ""; 
     $username = ""; 
     $status  = ""; 
     $test_ping = ""; 
    }#end for each loop 

ответ

1

Я вижу две вещи. первых, эта линия:

$username = Get-WMIObject -ComputerName $workstation -Class Win32_ComputerSystem | Select-Object Username #-ExpandProperty 

Если, вероятно, это:

$username = Get-WMIObject -ComputerName $workstation -Class Win32_ComputerSystem | Select-Object -ExpandProperty Username 

Во-вторых, вы не использовали кавычки при встраивании переменной имя пользователя в SQL-строку. Попробуй это. Я процитировал все три значения, так как я не знаю, какие типы других столбцов.

$command.CommandText = "INSERT INTO workstation_userlogged 
            (username,hostname,online) 
            VALUES ('$username','$pc_db','$ping_status')"; 
+0

+1 Часть домена может быть удалена из имени пользователя следующим образом: '$ Username -replace '^.* \\ '' –

+0

причина, по которой я удалил ** - ExpandProperty **, потому что он продолжает давать мне эту ошибку: ** Невозможно обработать аргумент, потому что значение аргумента« obj »равно null. Измените значение аргумента «obj» на ненулевое значение. ** – mario

+0

@AnsgarWiechers Я пытался это сделать, но давал ** ** ** в конце? Что я делаю не так? Благодарю. Я обновил свой код выше – mario