繁体   English   中英

通过命令行回收IIS中的所有应用程序池

[英]Recycle all apps pools in IIS by command line

我有一个 PowerShell 脚本:

& $psexec $serveraddr -u $remoteuser -p $remotepass -accepteula C:\\Windows\\System32\\inetsrv\\appcmd.exe list apppool /xml | C:\\Windows\\System32\\inetsrv\\appcmd.exe recycle apppool /in

我用来回收所有 IIS 池。 问题是只有从 IIS 池给出的默认值被回收。 不回收私人泳池。 第二个 appcmd 找不到它们。 首先 appcmd 查找所有池,由 IIS 提供和私有。

错误是:

错误(消息:Nie można odnaleźć obiektu APPPOOL o identyfikatorze "Core1"。)

从波兰语来说,它是:

错误(消息:找不到 ID 为“Core1”的对象 APPPOOL。)

我不能回收私人游泳池。 有没有办法绕过这个?

所以命令的第二部分在本地执行。 我已更改脚本以通过单个命令回收每个池:

& $psexec $server -u $remoteuser -p $remotepass -accepteula C:\\Windows\\System32\\inetsrv\\appcmd.exe recycle apppool /apppool.name:Core1

这是一个用于回收所有应用程序池的单线:

& $env:windir\system32\inetsrv\appcmd list apppools /state:Started /xml | & $env:windir\system32\inetsrv\appcmd recycle apppools /in

这对您的问题来说太过分了,但您可能对在多台服务器上并行执行某些操作的通用替代方法感兴趣:

$servers=@('server1', 'server2', 'server3')

$recycleAppPools = {
    echo $(Get-Wmiobject -Class Win32_ComputerSystem).Name
    appcmd list apppools /state:Started /xml | appcmd recycle apppools /in
    echo "`n"
}

workflow Perform-Deployment {
    Param ($servers, $actionBlock)

    # Run on all servers in parallel
    foreach -parallel ($server in $servers) {
        "Doing on $server..."
        # Execute script on the server
        InlineScript {
            $scriptBlock = [scriptblock]::Create($Using:actionBlock)
            Invoke-Command -computername $Using:server -ScriptBlock $scriptBlock
        }
    }
}

cls
# Execute workflow
Perform-Deployment $servers $recycleAppPools

此外,您可以将参数传递给脚本块,例如:

$DeployPythonPackage = {
    param($venv, $pythonPackagePath)
    & "$venv\scripts\pip" install --upgrade $pythonPackagePath
}

workflow Perform-Deployment {
    Param ($servers, $actionBlock, $venv, $pythonPackagePath)

    # Run on all servers in parallel
    foreach -parallel ($server in $servers) {
        "Deploying Python package '$pythonPackagePath' on $server..."
        # Execute script on the server
        InlineScript {
            $scriptBlock = [scriptblock]::Create($Using:actionBlock)
            Invoke-Command -computername $Using:server -ScriptBlock $scriptBlock `
                -ArgumentList $Using:venv, $Using:pythonPackagePath
        }
    }
}

cls
# Execute workflow
Perform-Deployment $servers $DeployPythonPackage $venv $pythonPackagePath

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM