Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » PowerShell - Не пишется лог в PowerShell

Ответить
Настройки темы
PowerShell - Не пишется лог в PowerShell

Новый участник


Сообщения: 33
Благодарности: 0

Профиль | Отправить PM | Цитировать


Привет!
Подскажите пожалуйста, почему не пишется лог?
Где я не прав?


Код: Выделить весь код
[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
Благодарности: 0

Профиль | Отправить 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: ( [Get-ADUser], ADServerDownException
+ 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 : Ошибка безопасности: ( [Get-ADUser], AuthenticationException
+ 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



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.


Аватара для Elven

Ветеран


Сообщения: 992
Благодарности: 268

Профиль | Сайт | Отправить PM | Цитировать


Цитата lcnet:
Если надо, добавлю пояснения. »
Добавьте. Если с add-content все понятно, пусть и без ключей, но в файл вроде как должно писать (пошик умненький, сам разберется где имя файла, а где - то что в него нужно записать).
А вот с write-host во втором catch - нефига непонятно. Если это попытка писать в файл, то понятно почему не удачаная.
Ну и насчет же использования двух catch: насколько мне известно это используется, обычно, чтобы нормально разделить ошибки и, соответственно, их обработку, однако никаких условий в catch я не вижу, следовательно будет выполнен один из catch (какой - без идей, у меня без указания дополнительных условий пошик вообще отказался выполняться при двух catch). Судя по описываемой проблеме - выполняется только второй catch, а первый т.о. игнорируется.

Отправлено: 11:56, 07-02-2022 | #3


Новый участник


Сообщения: 33
Благодарности: 0

Профиль | Отправить PM | Цитировать


Цитата Elven:
Ну и насчет же использования двух catch »

После публикации поста я удалил тот код, но все равно не пишется лог.

Код: Выделить весь код
[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


Аватара для Fors1k

Старожил


Сообщения: 193
Благодарности: 112

Профиль | Отправить PM | Цитировать


Цитата lcnet:
Ошибки: »
Эти ошибки генерируются вне блока try.
Как тогда вы ожидаете увидеть их в логе?
Это сообщение посчитали полезным следующие участники:

Отправлено: 02:25, 08-02-2022 | #5


Новый участник


Сообщения: 33
Благодарности: 0

Профиль | Отправить PM | Цитировать


Понял.
Как-то до меня не дошло очевидное...
Спасибо!

Отправлено: 10:54, 08-02-2022 | #6


Новый участник


Сообщения: 33
Благодарности: 0

Профиль | Отправить 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: ( [Get-ADUser], ADServerDownException
+ FullyQualifiedErrorId : ActiveDirectoryServer:0,Microsoft.ActiveDirectory.Management.Commands.GetADUser

Если указываю ADServerDownException, ПС пишет, "Не удалось найти тип"
Если указываю Microsoft.ActiveDirectory.Management.Commands.GetADUser, ПС игнорирует и пишет в общий блок CATCH.

Отправлено: 11:49, 08-02-2022 | #7


Аватара для Fors1k

Старожил


Сообщения: 193
Благодарности: 112

Профиль | Отправить PM | Цитировать


Цитата lcnet:
какой тип ошибки указывать в CATCH »
Код: Выделить весь код
catch [Microsoft.ActiveDirectory.Management.ADServerDownException] {}
Это сообщение посчитали полезным следующие участники:

Отправлено: 15:52, 08-02-2022 | #8


Новый участник


Сообщения: 33
Благодарности: 0

Профиль | Отправить PM | Цитировать


Fors1k, Спасибо!

Отправлено: 16:01, 08-02-2022 | #9



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » PowerShell - Не пишется лог в PowerShell

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
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




 
Переход