У меня есть этот запрос на вставку, который неправильно вставлен и действительно раздражает. Я кратко объясню, что я пробовал, и чего я действительно хочу достичь.Powershell - RPC, OBJ Null и -Replace ОШИБКИ в запросе на вставку MySQL
Что мой PS скрипт делает:
- пинг каждый компьютер из таблицы базы данных
- если пинг успешно, получить имя пользователя вошедшего от компьютера
- вставки в таблицу базы данных следующих значений: имя пользователя, имя хоста, онлайн (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
эй, он сделал INSERT в моем столе отлично. Однако есть 2 ошибки, показывающие как «split», так и «array». Для «split» ** Вы не можете вызывать метод в нулевом выражении ** и для «массива» ** Нельзя индексировать нулевой массив. ** Не могли бы вы объяснить? благодаря! – mario
hmm Я предполагаю, что это происходит, если Get-WmiObject не возвращает объект (возможно, из-за вашей второй проблемы). На данный момент $ username равно $ null, поэтому он разделяется, и следующее будет сбой – Paul
, так как я могу игнорировать ошибки, чтобы сценарий все еще мог работать без его отображения. Спасибо – mario