|
Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » PowerShell - Не пишется лог в PowerShell |
|
PowerShell - Не пишется лог в PowerShell
|
Новый участник Сообщения: 33 |
Привет!
Подскажите пожалуйста, почему не пишется лог? Где я не прав? [array]$var = Get-ADUser -SearchBase "OU=Accounts,DC=TEST,DC=LOC" -Properties * -Filter * $comps = '' $date = (Get-Date).ToString('ddMMyyyy_HH') $file = 'C:\_BAT\PS1\New_projects\Address_book\phrase' # пароль $logfile = 'C:\_BAT\PS1\New_projects\Address_book\log\log_' + $date + '.txt' # файл логов $User = 'ldap_user' $password = ConvertTo-SecureString (Get-Content $file) -AsPlainText -Force $logfile2 = 'C:\_BAT\PS1\New_projects\Address_book\log\unavaliable_' + $date + '.txt' $subnets = @{ 3='Ф.Екатеринбург'; 32='Ф.Калининград'; 25='Ф.Уфа'; 26='Ф.Самара'; } function data_request($val1, $val2, $val3){ # $val1 - адрес сервера; $val2 - OU-контейнера; $val3 - домен пользователя $userName = $user + '@' + $val3 $domain = $val3.Split('.') $cred = New-Object -TypeName System.Management.Automation.PSCredential -ArgumentList $UserName, $Password $usr = Get-ADUser -Server $val1 -Credential $cred -Properties * -Filter * foreach ($u in $usr){ try{ if ($u.EmailAddress -eq $null -or $u.OfficePhone -eq $null -or $u.enabled -eq $false){ continue } else { $data = ($u.SamAccountName, $u.DisplayName, $u.Surname, $u.GivenName, $u.Office, $u.OfficePhone, $u.EmailAddress, "__________") Add-Content $("C:\_BAT\PS1\New_projects\Address_book\SM\" + $domain[0] + '.txt') $data } } catch { Add-Content $logfile $dom Add-Content $logfile $u_rem.Name Add-Content $logfile $u_rem.SamAccountName Add-Content $logfile '+++' Add-Content $logfile $("ERROR: " + $error[0]) Add-Content $logfile "__________" } if ($var | ? {$_.SamAccountName -notmatch $u.SamAccountName}){ New-ADUser -Name $($subnets.[int]$subnet[2] + " - " + $u.DisplayName) -Enabled $true -SamAccountName $($u.SamAccountName + $subnet[2]) -Surname $u.Surname -GivenName $u.GivenName -DisplayName $($subnets.[int]$subnet[2] + " - " + $u.DisplayName) -AccountPassword $password2 -Path $(`"$container`") -ChangePasswordAtLogon $true -Office $u.Office -OfficePhone $u.OfficePhone -EmailAddress $u.EmailAddress -Department $u.department -Company $u.Company -UserPrincipalName $($u.SamAccountName + $subnet[2] + '@test.loc') -Title $u.title } catch { Write-Host $logfile2 $("Name - " + $subnets.[int]$subnet[2] + " - " + $u.DisplayName) Write-Host $logfile2 $("SamAccountName - " + $u.SamAccountName + $subnet[2]) Write-Host $logfile2 "+++" Write-Host $logfile2 ("ERROR: " + $error[0]) } } } $comps = @{ 0=@('192.168.32.1','CN=Users,DC=klg,DC=local'); 1=@('192.168.25.1','CN=Users,DC=ufa,DC=local'); 2=@('192.168.26.1','CN=Users,DC=samara,DC=local'); 3=@('192.168.3.1','CN=Users,DC=ekb,DC=local'); } for ($i=0; $i -lt $comps.Count; $i++){ $pc = $comps[$i][0] $OU = $comps[$i][1] $dm = $OU -Split',' | ConvertFrom-StringData $dom = $dm.DC -join '.' Write-Host $pc Write-Host $OU data_request -val1 $pc -val2 $OU -val3 $dom } В процессе работы скрипта происходит несколько ошибок, сервер недоступен и сбой аутентификации, но данные ошибки не записываются в файл лога. Все пути правильные. Если надо, добавлю пояснения. |
|
Отправлено: 09:43, 07-02-2022 |
Новый участник Сообщения: 33
|
Профиль | Отправить PM | Цитировать В процессе работы возникают ошибки, которые должны отлавливаться блоком CATCH, если я все правильно понимаю...
Ошибки: 1. Get-ADUser : Не удается установить связь с сервером. Возможные причины: сервер не существует, выключен или на нем не запущены веб-службы Active Di rectory. C:\Users\p59_adm1\Desktop\Data request.ps1:22 знак:12 + $usr = Get-ADUser -Server $val1 -Credential $cred -Properties * - ... + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + CategoryInfo : ResourceUnavailable: ( ![]() + FullyQualifiedErrorId : ActiveDirectoryServer:0,Microsoft.ActiveDirectory.Management.Commands.GetADUser 2. Get-ADUser : Сбой аутентификации на удаленном сервере (поток может оставаться доступным для повторных попыток аутентификации). C:\Users\p59_adm1\Desktop\Data request.ps1:22 знак:12 + $usr = Get-ADUser -Server $val1 -Credential $cred -Properties * - ... + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + CategoryInfo : Ошибка безопасности: ( ![]() + FullyQualifiedErrorId : ActiveDirectoryCmdlet:System.Security.Authentication.AuthenticationException,Microsoft.ActiveDirecto ry.Management.C ommands.GetADUser Но в файле логов ничего нет. Пробовал явно указывать с блоке Catch ошибку, тоже ничего. Т.е. catch [System.Security.Authentication.AuthenticationException]{ code ... } |
Отправлено: 11:55, 07-02-2022 | #2 |
Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети. Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля. |
Ветеран Сообщения: 992
|
Профиль | Сайт | Отправить PM | Цитировать Цитата lcnet:
А вот с write-host во втором catch - нефига непонятно. Если это попытка писать в файл, то понятно почему не удачаная. Ну и насчет же использования двух catch: насколько мне известно это используется, обычно, чтобы нормально разделить ошибки и, соответственно, их обработку, однако никаких условий в catch я не вижу, следовательно будет выполнен один из catch (какой - без идей, у меня без указания дополнительных условий пошик вообще отказался выполняться при двух catch). Судя по описываемой проблеме - выполняется только второй catch, а первый т.о. игнорируется. |
|
Отправлено: 11:56, 07-02-2022 | #3 |
Новый участник Сообщения: 33
|
Профиль | Отправить PM | Цитировать Цитата Elven:
После публикации поста я удалил тот код, но все равно не пишется лог. [array]$var = Get-ADUser -SearchBase "OU=Accounts,DC=TEST,DC=LOC" -Properties * -Filter * $comps = '' $date = (Get-Date).ToString('ddMMyyyy_HH') $file = 'C:\_BAT\PS1\New_projects\Address_book\phrase' # пароль $logfile = 'C:\_BAT\PS1\New_projects\Address_book\log\log_' + $date + '.txt' # файл логов $User = 'ldap_user' $password = ConvertTo-SecureString (Get-Content $file) -AsPlainText -Force $logfile2 = 'C:\_BAT\PS1\New_projects\Address_book\log\unavaliable_' + $date + '.txt' $subnets = @{ 3='Ф.Екатеринбург'; 32='Ф.Калининград'; 25='Ф.Уфа'; 26='Ф.Самара'; } function data_request($val1, $val2, $val3){ # $val1 - адрес сервера; $val2 - OU-контейнера; $val3 - домен пользователя $userName = $user + '@' + $val3 $domain = $val3.Split('.') $cred = New-Object -TypeName System.Management.Automation.PSCredential -ArgumentList $UserName, $Password $usr = Get-ADUser -Server $val1 -Credential $cred -Properties * -Filter * foreach ($u in $usr){ try{ if ($u.EmailAddress -eq $null -or $u.OfficePhone -eq $null -or $u.enabled -eq $false){ continue } else { Write-Host $val1, $val3 $data = ($u.SamAccountName, $u.DisplayName, $u.Surname, $u.GivenName, $u.Office, $u.OfficePhone, $u.EmailAddress, "__________") Add-Content $("C:\_BAT\PS1\New_projects\Address_book\SM\" + $domain[0] + '.txt') $data } } catch { Add-Content $logfile $dom Add-Content $logfile $u.Name Add-Content $logfile $u.SamAccountName Add-Content $logfile '+++' Add-Content $logfile $("ERROR: " + $error[0]) Add-Content $logfile "__________" } } } $comps = @{ 0=@('192.168.32.1','CN=Users,DC=klg,DC=local'); 1=@('192.168.25.1','CN=Users,DC=ufa,DC=local'); 2=@('192.168.26.1','CN=Users,DC=samara,DC=local'); 3=@('192.168.3.1','CN=Users,DC=ekb,DC=local'); } for ($i=0; $i -lt $comps.Count; $i++){ $pc = $comps[$i][0] # IP-address $OU = $comps[$i][1] # OU $dm = $OU -Split',' | ConvertFrom-StringData $dom = $dm.DC -join '.' #domain Write-Host $pc Write-Host $OU data_request -val1 $pc -val2 $OU -val3 $dom } |
|
Последний раз редактировалось lcnet, 07-02-2022 в 13:34. Отправлено: 13:23, 07-02-2022 | #4 |
Старожил Сообщения: 193
|
Профиль | Отправить PM | Цитировать Цитата lcnet:
Как тогда вы ожидаете увидеть их в логе? |
||
Отправлено: 02:25, 08-02-2022 | #5 |
Новый участник Сообщения: 33
|
Профиль | Отправить PM | Цитировать Понял.
Как-то до меня не дошло очевидное... Спасибо! |
Отправлено: 10:54, 08-02-2022 | #6 |
Новый участник Сообщения: 33
|
Профиль | Отправить PM | Цитировать Дурацкий вопрос, но я не могу понять, какой тип ошибки указывать в CATCH...
Вот ошибка: Get-ADUser : Не удается установить связь с сервером. Возможные причины: сервер не существует, выключен или на нем не запущены веб-слу жбы Active Directory. C:\Users\p59_adm1\Desktop\Data request.ps1:23 знак:16 + ... $usr = Get-ADUser -Server $val1 -Credential $cred -Properties * ... + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + CategoryInfo : ResourceUnavailable: ( ![]() + FullyQualifiedErrorId : ActiveDirectoryServer:0,Microsoft.ActiveDirectory.Management.Commands.GetADUser Если указываю ADServerDownException, ПС пишет, "Не удалось найти тип" Если указываю Microsoft.ActiveDirectory.Management.Commands.GetADUser, ПС игнорирует и пишет в общий блок CATCH. |
Отправлено: 11:49, 08-02-2022 | #7 |
Старожил Сообщения: 193
|
Профиль | Отправить PM | Цитировать Цитата lcnet:
|
|
Отправлено: 15:52, 08-02-2022 | #8 |
Новый участник Сообщения: 33
|
Профиль | Отправить PM | Цитировать Fors1k, Спасибо!
|
Отправлено: 16:01, 08-02-2022 | #9 |
![]() |
Участник сейчас на форуме |
![]() |
Участник вне форума |
![]() |
Автор темы |
![]() |
Сообщение прикреплено |
| |||||
Название темы | Автор | Информация о форуме | Ответов | Последнее сообщение | |
CMD/BAT - [решено] Не пишется лог-файл по forfiles. Ищу помощи и совета. | blacks2 | Скриптовые языки администрирования Windows | 3 | 29-10-2020 06:37 | |
Разное - Windows 7 - в какие файлы пишется лог событий? | tumanovalex | Microsoft Windows 7 | 4 | 07-04-2016 03:46 | |
BSOD - Не пишется название ошибки | psyrec | Устранение критических ошибок Windows | 0 | 11-08-2009 13:13 | |
не пишется знак @ на телефоне | BRAT2 | Мобильные ОС, смартфоны и планшеты | 3 | 01-09-2006 10:01 | |
не пишется звук! | Turman | Хочу все знать | 2 | 29-06-2004 13:12 |
|