首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何查找URL注册(不是预订)?

如何查找URL注册(不是预订)?
EN

Stack Overflow用户
提问于 2019-03-01 19:35:52
回答 1查看 3.4K关注 0票数 4

是否有windows命令可以列出持有特定URL注册的应用程序的进程Is和名称?

我正在寻找在以下URL名称空间下进行注册的应用程序。

代码语言:javascript
运行
复制
http://localhost:55987/

我知道可以使用以下命令列出URL预留

netsh http show urlacl

保留声明:

代码语言:javascript
运行
复制
 Reserved URL            : http://localhost:55987/
     User: \Everyone
         Listen: Yes
         Delegate: No
         SDDL: D:(A;;GX;;;WD)

但是,如何查找在保留的URL名称空间下进行的注册呢?

EN

Stack Overflow用户

回答已采纳

发布于 2020-05-23 08:07:06

您可以使用以下命令查找已注册urls的processId:

代码语言:javascript
运行
复制
netsh http show servicestate view=requestq verbose=no

它将返回一个如下所示的表:

代码语言:javascript
运行
复制
    Request queue name: Request queue is unnamed.
        Version: 2.0
        State: Active
        Request queue 503 verbosity level: Basic
        Max requests: 1000
        Number of active processes attached: 1
        Process IDs:
            3604
        URL groups:
        URL group ID: F100000040000003
            State: Active
            Request queue name: Request queue is unnamed.
                Number of registered URLs: 1
                Registered URLs:
                    HTTP://+:8022/
            Server session ID: F200000020000007
                Version: 2.0
                State: Active
    Request queue name: Request queue is unnamed.
        Version: 2.0
        State: Active
        Request queue 503 verbosity level: Basic
        Max requests: 1000
        Number of active processes attached: 1
        Process IDs:
            3604
        URL groups:
        URL group ID: D400000040001E9C
            State: Active
            Request queue name: Request queue is unnamed.
                Number of registered URLs: 1
                Registered URLs:
                    HTTP://+:3799/API
            Server session ID: D6000000200013C1
                Version: 2.0
                State: Active

我还创建了一个powershell函数,它解析此输出以返回对象列表。

结果示例:

代码语言:javascript
运行
复制
ProcessId                               ControllerProcessId                     RegisteredUrl
---------                               -------------------                     -------------
1860                                                                            HTTP://+:8022/
1020                                                                            HTTPS://+:5986/WSMAN/
代码语言:javascript
运行
复制
function Parse-HttpSysReqQueue() {
    [string[]]$rawHttpSysQueue = netsh http show servicestate view=requestq verbose=no

    $urls = @()
    $output = @()
    $recordIsOpen = $false
    $index = 0
    $rawHttpSysQueue | ForEach-Object {
        $line = $_

        # Whether is the begining of a new request queue record.
        $newRecordToken = "Request queue name"
        if ($line.StartsWith($newRecordToken)) {
            $recordIsOpen  = $true
            $index++; return
        }

        # We are iterating through a request-queue record.
        if ($recordIsOpen) {

            # Obtain Process ID
            if ($line.Contains("Process IDs:")) {
                $rawPid = $rawHttpSysQueue[$index+1]
                if($rawPid.Trim() -match '^\d+$'){
                    $processId = $rawPid.Trim()
                } else {
                    $processId = $null
                }
                $index++; return
            }

            # Obtain Controller Process ID (generally IIS)
            if ($line.Contains("Controller process ID:")) {
                $controllerProcessId = $line.Split(":")[1].Trim()
                $index++; return
            }

            # Read all registered urls from current record.
            if ($line.Contains("Registered URLs:")) {
                $urlLineIndex = $index+1
                while ($rawHttpSysQueue[$urlLineIndex].Trim().StartsWith("HTTP://") -or $rawHttpSysQueue[$urlLineIndex].Trim().StartsWith("HTTPS://")) {
                    $urls += $rawHttpSysQueue[$urlLineIndex].Trim()
                    $urlLineIndex++
                }

                # Add record to output list.
                $urls | ForEach-Object {
                    $output += New-Object PSObject -Property @{
                        ProcessId = $processId
                        RegisteredUrl = $_
                        ControllerProcessId = $controllerProcessId
                    }
                }

                # Already read all the urls from this request-queue, consider the record closed.
                $processId = $null
                $controllerProcessId = $null
                $urls = @()
                $recordIsOpen = $false
            }
        }
        $index++
    }

    return $output
}
票数 3
EN
查看全部 1 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54943838

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档