次を表示するアプリケーションまたはスクリプトが必要です:ワーカープロセス、アプリプール名、メモリ使用量、およびオプションでCPU使用率。私は使用に精通しています
%windir%\ system32\inetsrv\appcmd.exe list wp
しかし、これは私にworkerprocesidとアプリプール名を取得するだけです。次に、それを取得して、タスクマネージャーを相互参照します。これは機能しますが、もっと速くしたいのですが、ほとんどダッシュボードのように情報を表示します。 Process Explorerのようにクリックすることなく、情報を表示する何らかのソリューションが必要だと思います。誰かが特に彼らが使用する何かを持っていますか?これはPowerShellで可能でしょうか?
IIS 7とプロバイダーがない場合は、WMIを使用できます。添付のスクリプトはCPU使用率を除くほとんどの要件で機能します。以下のスクリプトをget-webserverapppoolstats.ps1として保存します。 (または必要なものは何でも)。
次に、次のコマンドでスクリプトを実行できます。
./Get-WebServerAppPoolStats.ps1'Server1'、'Server2'、'Server3 '-IntegratedAuthentication OR Get-Contentservers.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
}
}
はい、powershellは新しい IIS用のpowershellプロバイダー でこれを行うことができます。それは簡単です。 ランタイムデータウォークスルー の例をいくつか示します。
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
ワーカープロセスとリクエストget-processコマンドレットは、特定のワーカープロセスが提供しているアプリケーションプールを特定するのに役立ちません。ただし、これは簡単に実行できます。
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
メモリ使用量を教えてくれます
このスクリプトのサーバーの「名前」の部分が機能しなかった理由はわかりませんが、回避策を考え出しました。
この行を置き換えます:
$ Server = @ {Name = 'Server'; Expression = {$ server}}
これらの2行で:
$ machine = New-Object system.string $ server
$ Server = @ {Name = 'Server'; Expression = {$ machine}}
私がこれをしたら、それは完全に機能しました。