验证获取指定userName的application pool下applications列表的命令是否正确
问题
需要获取所有运行在具有特定userName的应用池下的应用(虚拟目录或物理路径均可)列表。已尝试执行以下命令:
appcmd.exe list apppool /processModel.userName:{USERNAME} /xml | appcmd.exe list app /in
思路是先筛选出配置了特定userName的应用池列表,再通过管道基于该列表获取对应应用。请问此操作是否正确?感觉后续命令里把/in放在app后面似乎有误……
解答
你的思路方向是对的,但原命令写法有问题,/in的用法在这里不适用,原因是:
appcmd list apppool /xml输出的是应用池的XML数据,而list app /in无法直接将输入的应用池XML关联到对应的应用,两者数据类型不匹配,所以这条命令得不到你想要的结果。
正确的操作方式:
- 先筛选出目标用户名对应的所有应用池名称
appcmd.exe list apppool /processModel.userName:{USERNAME} /text:name
- 遍历这些应用池名称,获取每个池下的应用
- 若使用Windows命令提示符,可一行命令完成遍历:
for /f "tokens=*" %a in ('appcmd.exe list apppool /processModel.userName:{USERNAME} /text:name') do appcmd.exe list app /apppool.name:"%a"
- 若使用PowerShell,写法更简洁:
$appPools = appcmd.exe list apppool /processModel.userName:{USERNAME} /text:name foreach ($pool in $appPools) { appcmd.exe list app /apppool.name:$pool }
通过以上方式就能准确获取到所有关联目标应用池的应用列表,包含它们的虚拟目录或物理路径信息。
内容的提问来源于stack exchange,提问作者Ozkan
相关产品推荐
相关产品推荐

