quarta-feira, 6 de novembro de 2019

Powershell - Toolbox



My ToolBox

Function Show-Menu{
    param(
        [Parameter(Mandatory)]
        [String] $Title,

        #[Parameter(Mandatory)]
        [String[]] $MenuItemsList=@("Menu 01","Menu 02","Menu 03")
    )

    #Variables decalration

    $MenuItemsNumber = 1

    Write-Host "================ $Title ================"
    Write-Host " 0 - To quit"
    foreach ($MenuItems in $MenuItemsList){
        Write-Host " $MenuItemsNumber - $MenuItems "
        $MenuItemsNumber += 1
    }   
    Write-Host "================ $Title ================"
    $MainMenuChoice = Read-Host -Prompt "Choice"
    return $MainMenuChoice
}

#Variables
$MenuItemsList = @("Change Selected Server",
                   "Test ping","Replication report",
                   "Stopped Services",
                   "LDAP test and query",
                   "Get memory and CPU utilization",
                   "Get Windows Features","DNS Test and query",
                   "Share test",
                   "DCDiag test")
$MainMenuLoop = $true


$ServerName = Read-Host -Prompt "Type Server Name"

While ($MainMenuLoop){   
    Clear-Host
    Write-host -Object "Selected Server: $ServerName"
    $MenuOption = Show-Menu -Title "ToolBox" -MenuItemsList $MenuItemsList
               
    switch ($MenuOption)
    {
        #Quit
        '0' {
            $MainMenuLoop = $False
        }
        #Change Selected Server
        '1' {
             $ServerName = Read-Host -Prompt "Type Server Name"
        }
        #Test ping
        '2' {
            Clear-Host
            Write-host -Object "Selected Server: $ServerName"
            Test-Connection -ComputerName $ServerName
            Read-Host -Prompt "Press any button to continue. . ."
        }
        #Replication report
        '3' {
            Clear-Host
            Write-host -Object "Selected Server: $ServerName"
            Get-ADReplicationPartnerMetadata -Target $ServerName | Select ConsecutiveReplicationFailures,LastReplicationAttempt,LastReplicationSuccess,Partition,Partner,Server
            Read-Host -Prompt "Press any button to continue. . ."           
        }
        #Stopped Services
        '4' {
            Clear-Host
            Write-host -Object "Selected Server: $ServerName"
            $ServiceList = Get-Service -ComputerName $ServerName
            $ServiceAutomaticStopped = $ServiceList | Where-Object {($_.StartType -like "Automatic") -and ($_.Status -like "Stopped")}
            $ServiceAutomaticStopped |Select Name,DisplayName,Status|FL
            Read-Host -Prompt "Press any button to continue. . ."
        }
        #LDAP test and query
        '5' {
            Clear-Host
            Write-host -Object "Selected Server: $ServerName"

            try {
                $Connection389 = [adsi]"LDAP://$($ServerName):389"
                Write-Host  -Object " 389 Port: True" -ForegroundColor Green
                if (Get-ADUser "AM570707" -Server $ServerName){
                    Write-Host  -Object "  LDAP Quey is working" -ForegroundColor Green
                }
                Else{
                    Write-Host  -Object "  LDAP Quey NOT is working!!!" -ForegroundColor Green
                }
            }
            Catch{
                    Write-Host  -Object " 389 Port: False" -ForegroundColor Red
            }

            try {
                $Connection636 = [adsi]"LDAP://$($ServerName):636"
                Write-Host  -Object " 636 Port: True" -ForegroundColor Green
            }
            Catch{
                    Write-Host  -Object " 636 Port: False" -ForegroundColor Red
            }
            Read-Host -Prompt "Press any button to continue. . ."
        }
        #Get memory and CPU utilization
        '6' {
            Clear-Host
            Write-host -Object "Selected Server: $ServerName"
       
            # Processor utilization
            $Processor = (Get-WmiObject -ComputerName $ServerName -Class win32_processor -ErrorAction Stop | Measure-Object -Property LoadPercentage -Average | Select-Object Average).Average
            Write-Host -Object " Average CPU use (%): $Processor"
       
            # Memory utilization
            $ComputerMemory = Get-WmiObject -ComputerName $ServerName -Class win32_operatingsystem -ErrorAction Stop
            $Memory = ((($ComputerMemory.TotalVisibleMemorySize - $ComputerMemory.FreePhysicalMemory)*100)/ $ComputerMemory.TotalVisibleMemorySize)
            $RoundMemory = [math]::Round($Memory, 2)
            Write-Host " Memory in use (%): $Memory"
            Read-Host -Prompt "Press any button to continue. . ."
        }
        #Get Windows Features
        '7' {
            Clear-Host
            Write-host -Object "Selected Server: $ServerName"
            Get-WindowsFeature -ComputerName $ServerName
            Read-Host -Prompt "Press any button to continue. . ."
        }
        #DNS Test and query
        '8' {
            Clear-Host
            Write-host -Object "Selected Server: $ServerName"
            try{
                $DNSResult = Get-DnsServerResourceRecord -ZoneName "corpnet1.com" -ComputerName $ServerName
                Write-Host -Object "DNS is working. Number of objects found: $($DNSResult.count)" -ForegroundColor Green
            }
            catch{
                $ErrorMessage =  $($Error[0]) #$_.Exception.Message
                Write-Host -Object "DNS is not working. Error message: $ErrorMessage" -ForegroundColor Red
           
            }
            Read-Host -Prompt "Press any button to continue. . ."
        }
        #Share test
        '9' {
            Clear-Host
            Write-host -Object "Selected Server: $ServerName"
            $ShareFolders = get-WmiObject -class Win32_Share -Computer $ServerName |Select Name,Path
            $SharesList = "NETLOGON", "SYSVOL"
            ForEach ($Share in $SharesList){
                If ($ShareFolders | Where-Object {($_.Name -like "$Share")}){
                    Write-Host -Object "   Share $Share is ok" -ForegroundColor Green
                }
                ElseIf ($ShareFolders | Where-Object {($_.Name -like "$Share")}){
                    Write-Host -Object "   Share $Share IS NOT ok" -ForegroundColor Red
                }
            }
            Read-Host -Prompt "Press any button to continue. . ."
        }
        #DCDiag test
        '10' {
            Clear-Host
            Write-host -Object "Selected Server: $ServerName"
            $Dcdiag = (Dcdiag.exe /s:$ServerName /fix)
            $Dcdiag
            Read-Host -Prompt "Press any button to continue. . ."
        }
    }
}

Nenhum comentário:

Postar um comentário