设为首页 收藏本站
查看: 2049|回复: 0

【翻译】使用PowerShell获取网站运行时数据

[复制链接]

尚未签到

发表于 2015-8-17 13:41:38 | 显示全部楼层 |阅读模式
  原文链接:PowerShell Provider: Run-time Data
  

介绍
       站点的启动,停止, 应用程序池的回后或过期(time out), 接受的请求和发送的响应, AppDomains(应用程序域) 的大量
  生成和关闭. IIS7 实现了一个所谓的 RSCA 接口(run-time state and control API) ,该接口允许您监视当前系统正在做的
  工作.
       IIS 7.0 PowerShell Provider 使用该接口并以IIS Provider 名空间来暴露其中一些数据信息. 通过Get-WebItemState,
  Start-WebItem, Stop-WebItem 和 Restart-WebItem 等cmdlets来配置站点和应用程序池的状态. 通过IIS 名空间来暴露
  出来的运行时状态比如:当前运行的工作者进程,当前执行的请求和被加载的应用程序域(loaded AppDomains )等.
       本文使用的站点, applications 和虚拟目录在前一篇文章中已进行了创建.
站点和应用程序池状态
        开始查询web站点的状态.
站点状态

PS IIS:\> cd Sites
PS IIS:\Sites> Get-WebItemState IIS:\Sites\DemoSite
Started  
       使用 Stop-WebItem cmdlet 来停止站点:

PS IIS:\Sites> Stop-WebItem DemoSite
PS IIS:\Sites> Get-WebItemState IIS:\Sites\DemoSite
Stopped  
       当然,启动站点的工作也差不多:

PS IIS:\Sites> Start-WebItem DemoSite
PS IIS:\Sites> Get-WebItemState IIS:\sites\DemoSite
Started应用程序池状态
        我们对应用程序池也施加相同操作:

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

        除此之外,您也可从 AppPools 结点中获取这些状态属性. 下面我们做一个有趣的例子. 打开喇叭(电脑的声音)并执行
  下面命令行(注:此时系统会用语音方式提示应用程序池被启动):

dir 'iis:\AppPools' | foreach {[void](new-object -com Sapi.SPVoice).Speak("Application Pool State:");}{$poolState = "Application Pool " + $_.Name +" is " + $_.State;$poolState;[void](new-object -com Sapi.SPVoice).Speak($poolState);}

  
       现在再次程序 DemoAppPool :

PS IIS:\AppPools> Start-WebItem DemoAppPool回收应用程序池
      应用程序池的不同之处(与站点等相比)在于它们可以被回收(recycled). 执行这个任务的 cmdlet 是:
  Restart-WebItem (不是Recycle-WebItem). PowerShell 有着非常严格的命名规则,因此我们须使用
  Restart-WebItem. 我们使用下面内容来扩展一下我们的例子:

  • 创建一个对 'Default Web Site' 站页默认页面的请求
  • 查询处理当前请求的工作者进程(worker process )的 PID  
  • 回收该应用程序池
  • 再次请求这个PID 以确保该进程被重启
1. 请求默认页面
       我们使用Net.WebClient 类去请求 http://localhost/. 这里不再显示输出信息,取而代之的仅是查看一
  下当前响应内容的长度.

PS IIS:\AppPools> $response = (new-object Net.WebClient).DownloadString("http://localhost/")
PS IIS:\AppPools> $response.Length
689

  
2. 查询工作者进程(Worker Process) PID
    假设当前机器上没有其他正在运行的站点和应用,下面的命令行仅会返回一个:

PS IIS:\AppPools> get-process w3wp | select processname,id

ProcessName                             Id
-----------                             --
w3wp                                   3684
     There is a better way to get to worker processes, handled a little later in this walkthrough.
3. 回收应用程序池
    我们使用 Restart-WebItem cmdlet 来回疏通应用程序池:

PS IIS:\AppPools> Restart-WebItem DefaultAppPool
4. 查询工作者进程的 PID
    如果成功地回收了应用程序,那么您的进程ID就会发生变化.

PS IIS:\AppPools> get-process w3wp | select processname,id

ProcessName          Id
-----------          --
w3wp                 5860
工作者处理和请求(Worker Processes and Requests)
    get-process cmdlet 不会找出当前工作者进程运行着那个应用程序池. 然而下面的方式可做到这一点:

PS IIS:\AppPools> dir DefaultAppPool\WorkerProcesses

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

当前正在执行的请求(Currently Executing Requests)
      注:下面的内容我实在是看不明白,所以直接将E文帖在这里,希望理解的朋友将内容发上来以便我及时更正。

If your machine is not a production machine you will have a hard time looking at currently exeucting requests. The request is long gone until you make a request via Internet Explorer and get back into the PowerShell console. Here is a little helper; a request that takes a long time.




Set-Content "$env:systemdrive\inetpub\wwwroot\long.aspx" "<%@ Page language=`"C#`"%><%System.Threading.Thread.Sleep(30000);Response.Write(`"slept for 30 seconds`");%>"
      如果想要显示当前正在执行的请求,您可以使用如下命令行 (注:get-item 命令所使用的进行ID会与您本机
上的有所不同):

PS IIS:\AppPools\DefaultAppPool\WorkerProcesses> dir

Process  State      Handles  Start Time
Id
-------- -----      -------  ----------
6612     Running    737      3/31/2008 8:18:15 AM


PS IIS:\AppPools\DefaultAppPool\WorkerProcesses> (get-item 6612).GetRequests(0)


requestId    : d8000001800000f5
connectionId : d8000001600000f3
verb         : GET
url          : /long.aspx
siteId       : 1


      如果您想查看从执行请求开始到现在已过了多长时间的话:

PS IIS:\AppPools\DefaultAppPool\WorkerProcesses> (get-item 6612).GetRequests(0) | select url,timeElapsed

url                                        timeElapsed
---                                        -----------
/long.aspx                                   2637


总结
      在本文中,您了解了如何查看 IIS 应用程序池和站点的状态. 如何启动和关闭它们. 您也了解了如何查看工作者
进程(worker processes)以及当前执行的请求.

     好了,今天的内容就到这里。
  
  原文链接:http://www.iyunv.com/daizhj/archive/2008/12/11/1352718.html
       作者: daizhj, 代震军
       Tags: powershell,iis
       网址: http://daizhj.iyunv.com/

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-100328-1-1.html 上篇帖子: [转]如何才能在 IIS 7.5 使用 Windows PowerShell Snap-In 功能 下篇帖子: shell脚本中自动输入密码
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表