Бесплатное приложение или сценарий для контроля использования памяти Пула приложений

OpenLDAP может сделать часть аутентификации активного каталога. Я не полагаю, что существует замена для групповой политики однако в Windows.

Могло бы помочь, объяснили ли Вы, что точно Вам не нравится приблизительно Active Directory и почему Вы пытаетесь избежать его, я предполагаю стоимость?

4
задан 18 June 2009 в 18:47
3 ответа

Если у Вас нет IIS 7 и поставщика, можно использовать WMI. Приложенный сценарий работает на большинство Ваших требований, кроме использования ЦП. Сохраните ниже сценария, как добираются-webserverapppoolstats.ps1 (или независимо от того, что Вы хотите).

Можно запустить скрипт затем с:

./Get-WebServerAppPoolStats.ps1 'Server1', 'Server2', 'Server3'-IntegratedAuthentication ИЛИ Получать-содержание servers.txt |./Get-WebServerAppPoolStats.ps1-IntegratedAuthentication

param (
    $webserver = $null,
    $username,
    $password,
    [switch]$IntegratedAuthentication)

BEGIN
{
    $path = $MyInvocation.MyCommand.Path

    if ($webserver -ne $null)
    {
        if ($IntegratedAuthentication)
        {
            $webserver | &$path -IntegratedAuthentication
        }
        else
        {
            $webserver | &$path -username $username -password $password
        }
    }
    $OFS = ', '
    $Fields = 'CommandLine', 'Name', 'CreationDate', 'ProcessID', 'WorkingSetSize', 'ThreadCount', 'PageFileUsage', 'PageFaults' 

    $query = @"
    Select $fields
    From Win32_Process
    Where name = 'w3wp.exe'
"@

    $AppPool =  @{Name='Application Pool';Expression={($_.commandline).split(' ')[-1]}}
    $Process = @{Name='Process';Expression={$_.name}}
    $RunningSince = @{Name='Running since';Expression={[System.Management.ManagementDateTimeconverter]::ToDateTime($_.creationdate)}}
    $Memory = @{Name='Memory Used';Expression={'{0:#,#}' -f $_.WorkingSetSize}}
    $Threads = @{Name='Thread Count';Expression={$_.threadcount}}
    $PageFile = @{Name='Page File Size';Expression={'{0:#,#}' -f $_.pagefileusage}}
    $PageFaults = @{Name='Page Faults';Expression={'{0:#,#}' -f $_.pagefaults}} 
}

PROCESS
{
    $server = $_ 

    if ($server -ne $null)
    {
        if ($IntegratedAuthentication)
        {   
            $result = Get-WmiObject -Query $query -ComputerName $server
        }
        else
        {
            $securepassword = ConvertTo-SecureString $password -AsPlainText -Force
            $cred = New-Object System.Management.Automation.PSCredential -ArgumentList $username, $securepassword

            $result = Get-WmiObject -Query $query -ComputerName $server -Credential $cred 

        }
        $Server = @{Name='Server';Expression={$server}}
        $result | Select-Object $Server, $AppPool, $Process, $RunningSince, $Memory, $Threads, $PageFile, $pageFaults
    }
}
3
ответ дан 3 December 2019 в 03:03

Да powershell может сделать это с новым powershell поставщиком для IIS, это легко. Вот некоторые примеры от обеспеченного walkthru's данных времени выполнения:

Состояние AppPool

PS IIS:\> cd AppPools
PS IIS:\AppPools> Get-WebItemState DemoAppPool
Started
PS IIS:\AppPools> Stop-WebItem DemoAppPool
PS IIS:\AppPools> Get-WebItemState DemoAppPool
Stopped

Рабочие процессы и Запросы, получать-процесс cmdlet не помогает Вам выясняющий, какой Пул приложений конкретный рабочий процесс служит. Это может быть легко сделано однако:

PS IIS:\AppPools> dir DefaultAppPool\WorkerProcesses

               processId                  Handles                    state StartTime
               ---------                  -------                    
                   6612                      326                        1 3/28/2008 12:20:27 PM

обратите внимание на это, после того как у Вас есть регулярный PID

   get-process -id pid

скажет Вам использование памяти

3
ответ дан 3 December 2019 в 03:03

Я не знаю, почему часть 'названия' Сервера этого сценария не работала на меня, но я придумал обходное решение:

замените эту строку:

$Server = {Имя ='Server'; Выражение = {$server}}

с этими двумя строками:

$machine = Новый Объект system.string $server

$Server = {Имя ='Server'; Выражение = {$machine}}

после того как я сделал это, это работало отлично.

1
ответ дан 3 December 2019 в 03:03

Теги

Похожие вопросы