массив powershell system.object в строку - PullRequest
0 голосов
/ 02 июля 2018

Я использую приведенный ниже код для получения IP-адреса пользователя (указан в начале кода), который попытался войти в систему. Код работает, но когда я использую GetType () переменную $ ipp, он возвращается как Name - Object [] Базовый тип - System.Array. Мне нужно, чтобы эта переменная была строкой (я ищу IP в текстовый файл и удаление его, если он найден).

$ipp = Get-WinEvent -FilterHashtable @{LogName='Security';Id=4625;StartTime=$hours} | 
    Where-Object {$_.Properties[5].Value -like "*$userName*"} | 
    Select-Object -First 1 {$_.Properties[19].value}

Я использую PowerShell 5

Спасибо Kevin

1 Ответ

0 голосов
/ 03 июля 2018

Предварительное предупреждение: Вероятно, это будет вашим лучшим выбором для полного массива каждого бита информации из события неудачной попытки / блокировки. Вы можете легко присвоить каждому объекту переменную, посмотрите в последней строке некоторые имена свойств, которые я использую при проверке заблокированных учетных записей.

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

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

Немного изменил его, чтобы вы могли вставить его после того, как вы определили свое $ userName и оставили комментарии Microsoft. Просто проверьте строку 87/88, поскольку вам может потребоваться завершить ее, если вы столкнетесь с ошибками в своем DC.

# Set up the lockout report
$report = @()

# Pick the DCs to crawl
$DCs = Get-ADDomainController -Filter * |
    Select-Object HostName, IPv4Address, Site, OperatingSystem, OperationMasterRoles |
    Out-Gridview -Title "Select the DCs to query" -PassThru |
    Select-Object -ExpandProperty HostName

# Find the lockout stats for that user on all selected DCs
ForEach ($DC in $DCs) {
    $report += Get-ADUser $userName -Server $DC -ErrorAction Continue `
        -Properties cn, LockedOut, pwdLastSet, badPwdCount, badPasswordTime, lastLogon, lastLogoff, lastLogonTimeStamp, whenCreated, whenChanged | `
        Select-Object *, @{name='DC';expression={$DC}} 
}

$DCs = $report |
    Select-Object `
        DC, `
        cn, `
        LockedOut, `
        pwdLastSet, `
        @{name='pwdLastSetConverted';expression={[datetime]::fromFileTime($_.pwdlastset)}}, `
        badPwdCount,
        badPasswordTime, `
        @{name='badPasswordTimeConverted';expression={[datetime]::fromFileTime($_.badPasswordTime)}}, `
        lastLogon, `
        @{name='lastLogonConverted';expression={[datetime]::fromFileTime($_.lastLogon)}}, `
        lastLogoff, `
        @{name='lastLogoffConverted';expression={[datetime]::fromFileTime($_.lastLogoff)}}, `
        lastLogonTimeStamp, `
        @{name='lastLogonTimestampConverted';expression={[datetime]::fromFileTime($_.lastLogonTimestamp)}}, `
        whenCreated, `
        whenChanged |
    Out-GridView -Title "Select the DC to query event logs for lockouts" -PassThru

# Filter generated using Event Viewer GUI Custom View
# Logon/Lockout events in the last 24 hours
[xml]$xmlFilter = @"
<QueryList>
  <Query Id="0" Path="Security">
    <Select Path="Security">*[System[(EventID=529 or EventID=644 or EventID=675 or EventID=676 or EventID=681 or EventID=4740 or EventID=4771) and TimeCreated[timediff(@SystemTime) &lt;= 86400000]]]</Select>
  </Query>
</QueryList>
"@


$Events = @()
ForEach ($DC in $DCs) {

    "Getting events from $($DC.DC)"

    # Must enable the firewall rule for remote EventLog management - CHECK WITH YOUR IT TEAM, THIS MAY BREACH YOUR COMPANY SECURITY POLICY
    # Invoke-Command -ComputerName $DC.DC -ScriptBlock {Get-NetFirewallRule -Name *eventlog* | Where-Object {$_.Enabled -eq 'False'} | Enable-NetFirewallRule -Verbose}

    ### Filter for the userID in the event message properties
    $Events += Get-WinEvent -ComputerName $DC.DC -FilterXML $xmlFilter
}

ForEach ($Event in $Events) {
    # Convert the event to XML
    $eventXML = [xml]$Event.ToXml()
    # Iterate through each one of the XML message properties
    For ($i=0; $i -lt $eventXML.Event.EventData.Data.Count; $i++) {
        # Append these as object properties
        Add-Member -InputObject $Event -MemberType NoteProperty -Force `
            -Name  $eventXML.Event.EventData.Data[$i].name `
            -Value $eventXML.Event.EventData.Data[$i].'#text'
    }
}

# View the lockout details
$Events | Where-Object {$_.TargetUserName -eq $userName} | Select-Object TargetUserName, IPAddress, MachineName, TimeCreated | Out-GridView
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...