powershell@宝塔面板批量建站脚本@批量设置@批量部署伪静态设置

abstract

对于需要大量建站,并且站点类型都很接近的宝塔用户,可以考虑使用如下powershell脚本进行批量建站语句生成

请根据宝塔的要求的批量建站语句格式创建脚本

脚本详情

在线获取(打开powershell执行以下命令即可安装(临时地)获得相关命令)

irm https://gitee.com/xuchaoxin1375/scripts/raw/main/PS/Tools/Tools.psm1|iex

解析多个域名输入

function Get-LineDataFromMultilineString
{
    <# 
    .SYNOPSIS
    将多行字符串按行分割,并返回数组
    对于数组输入也可以处理
    .EXAMPLE
    Get-LineDataFromMultilineString -Data @"
    line1
    line2
    "@

    #>
    [cmdletbinding(DefaultParameterSetName = "Trim")]
    param (
        $Data,
        [parameter(ParameterSetName = "Trim")]
        $TrimPattern = "",
        [parameter(ParameterSetName = "NoTrim")]
        [switch]$KeepLine
    )
    # 统一成字符串处理
    $Data = @($Data) -join "`n"

    $lines = $Data -split "`r?`n|," 
    if(!$KeepLine)
    {
        $lines = $lines | ForEach-Object { $_.trim($TrimPattern) }
    }
    return $lines
    
}


获取在宝塔中批量建站的语句

function Get-BatchSiteBuilderLines
{
    <# 
    .SYNOPSIS
    获取批量站点生成器的生成命令行(宝塔面板专用)
    .DESCRIPTION
    格式说明
    批量格式:域名|根目录|FTP|数据库|PHP版本
    
    案例: bt.cn,test.cn:8081|/www/wwwroot/bt.cn|1|1|56


    最简单的站点:
    域名|1|0|0|0

    1.   域名参数:多个域名用 , 分割
    2.   根目录参数:填写 1 为自动创建,或输入具体目录
    3.   FTP参数:填写 1 为自动创建,填写 0 为不创建
    4.   数据库参数:填写 1 为自动创建,填写 0 为不创建
    5.   PHP版本参数:填写 0 为静态,或输入PHP具体版本号列如:56、71、74

    如需添加多个站点,请换行填写

    .NOTES
    domain1.com
    domain2.com
    domain3.com

    .EXAMPLE
    #测试命令行

Get-BatchSiteBuilderLines  -user zw -domains @"
            domain1.com
            domain2.com
            domain3.com
"@
#回车执行
#>
    <# 
    .EXAMPLE
    
    #⚡️[Administrator@CXXUDESK][~\Desktop][20:48:14][UP:9.14Days]
    PS> Get-BatchSiteBuilderLines -user zw "a.com,b.com"
    a.com,*.a.com   |/www/wwwroot/zw/a.com  |0|0|84
    b.com,*.b.com   |/www/wwwroot/zw/b.com  |0|0|84

    #⚡️[Administrator@CXXUDESK][~\Desktop][20:48:15][UP:9.14Days]
    PS> Get-BatchSiteBuilderLines -user zw @"
    >> a.com
    >> b.com
    >> "@
    a.com,*.a.com   |/www/wwwroot/zw/a.com  |0|0|84
    b.com,*.b.com   |/www/wwwroot/zw/b.com  |0|0|84
    .EXAMPLE
    #⚡️[Administrator@CXXUDESK][~\Desktop][20:48:58][UP:9.14Days]
    PS> Get-BatchSiteBuilderLines -user zw @(
    >> 'a.com'
    >> 'b.com')
    a.com,*.a.com   |/www/wwwroot/zw/a.com  |0|0|84
    b.com,*.b.com   |/www/wwwroot/zw/b.com  |0|0|84

    #⚡️[Administrator@CXXUDESK][~\Desktop][20:49:13][UP:9.14Days]
    PS> Get-BatchSiteBuilderLines -user zw @(
    >> 'a.com'
    >> 'b.com'
    >> )
    a.com,*.a.com   |/www/wwwroot/zw/a.com  |0|0|84
    b.com,*.b.com   |/www/wwwroot/zw/b.com  |0|0|84
    #> 
    [CmdletBinding()]
    param (
        # 使用多行字符串,相比于直接使用字符串,在脚本中可以省略去引号的书写
        $domains = @"
domain1.com
www.domain2.com
"@,
        $LD3 = "*"    ,
        $user,
    
        $php = 74
    )
    $domains = @($domains) -join "`n"

    # 统一成字符串处理
    $domains = $domains.trim() -split "`r?`n|," | Where-Object { $_.Length }
    $lines = [System.Collections.ArrayList]@()

    # $domains = $domains -replace "`r?`n", ";"
    # $domains = $domains -replace "`n", ";"

    # Write-Verbose $domains
    Write-Verbose "$($domains.Length)" 

    foreach ($domain in $domains)
    {
        Write-Verbose "[$domain]"
        $domain = $domain.Trim() -replace "www.", ""
        $line = "$domain,$LD3.$domain`t|/www/wwwroot/$user/$domain`t|0|0|$php" -replace "//", "/" 
       
        $line = $line.Trim() 
        Write-Host $line
        $lines.Add($line) > $null
    }

    $lines | Set-Clipboard
    Write-Host "`nlines copied to clipboard!" -ForegroundColor Cyan
}

获取批量创建数据库的语句

function Get-BatchSiteDBCreateLines
{
    <# 
    .SYNOPSIS
    获取批量站点数据库创建命令行
    .DESCRIPTION
    默认生成两种命令行,一种是可以直接在shell中执行,另一种是保存到sql文件中,最后调用mysql命令行来执行
    第一种使用起来简单,但是开销大,而且构造语句的过程中相对比较麻烦,需要考虑powershell对特殊字符的解释
    第二种命令简短,而且符号包裹更少,运行开销较小,理论上比第一种快;但是powershell对于mysql命令行执行
    sql文件也相对麻烦,需要用一些技巧

    #>
    [CmdletBinding()]
    param (
        $domains = @"
domain1.com
domain2.com
"@,
        # 指明网站的创建或归属者,涉及到网站数据库名字和网站根目录的区分
        $SiteOwner,

        #可以配置系统环境变量 df_server,可以是ip或域名
        $server = $env:DF_SERVER1, 
        # 对于wordpress,一般使用utf8mb4_general_ci
        $collate = 'utf8mb4_general_ci',
        $MySqlUser = "root",

        # 置空表示不输出sql文件
        $SqlFielSavePath = "$home\Desktop\BatchSiteDBCreate-$SiteOwner.sql",

        [Parameter(ParameterSetName = "UseKey")]
        $MySqlkey = $env:DF_MysqlKey,
        [parameter(ParameterSetName = "UseKey")]
        [switch]$UseKey
    )
    $domains = @($domains) -join "`n"
    $domains = $domains.trim() -split "`r?`n|," | Where-Object { $_.Length }
    # $lines = [System.Collections.ArrayList]@()
    # $sqlLines = [System.Collections.ArrayList]@()
    $lines = New-Object System.Collections.Generic.List[string]
    $sqlLines = New-Object System.Collections.Generic.List[string]

    $password = ""
    if($PSCmdlet.ParameterSetName -eq "UseKey")
    {

        if($UseKey -and $MySqlkey)
        {
            $password = " -p$MySqlkey"
        }

    }

    Write-Verbose "读取的域名规范化(移除多余的空白和`www.`,使数据库名字结构统一)" -Verbose
    foreach ($domain in $domains)
    {
        $domain = $domain.Trim() -replace "www.", "" 
        $line = "mysql -u$mysqlUser -h $server $password -e 'CREATE DATABASE ``${SiteOwner}_$domain`` CHARACTER SET utf8mb4 COLLATE $collate;' "
        $sqlLine = 'CREATE DATABASE ' + " ``${SiteOwner}_$domain`` CHARACTER SET utf8mb4 COLLATE $collate;"

        Write-Verbose $line
        Write-Verbose $sqlLine

        $lines.Add($line) > $null
        $sqlLines.Add($sqlLine) > $null

        # 两组前后分开,合并返回
        # $lines = $lines + $sqlLine
        $lines.AddRange($sqlLines) 
        # $line | Invoke-Expression
    }
    if($SqlFielSavePath)
    {
        $sqlLines | Out-File $SqlFielSavePath -Encoding utf8   
    }
    return $lines
    
}

组织调用批量建站的命令

生成的sql文件位于桌面(可以自动执行)

function Start-BatchSiteBuilderLines-DF
{
    param(
        $user,
        $domains,
        $server = $env:DF_SERVER1,
        $MySqlUser = "root",
        $MySqlkey = "",
        $SqlFielSavePath = "$home\Desktop\BatchSiteDBCreate-$user.sql"
    )
    $siteExpressions = Get-BatchSiteBuilderLines -user $user -domains $domains
    # $siteExpressions | Set-Clipboard
    Write-Host $siteExpressions

    # Pause
    $dbExpressions = Get-BatchSiteDBCreateLines -domains $domains -SiteOwner $user


    Write-Warning "Please Check the sql lines,especially the siteOwner is exactly what you want!"
    Write-Output $dbExpressions
    # Pause

    # foreach ($line in $dbExpressions)
    # {
    #     $line | Invoke-Expression
    # }
    Write-Warning "Running the sql file (by cmd /c ... ),wait a moment please..."
    if($MySqlkey)
    {
        $password = " -p$MySqlkey"
    }
    else
    {
        $password = ""
    }
    if(Test-Path $sqlFielSavePath)
    {
        
        Write-Verbose "File exist!" -Verbose
        $expression = "cmd /c `" mysql -u $MySqlUser -h $server $password < ```"$sqlFielSavePath```" `""
        Write-Host $expression
        Invoke-Expression $expression
        # cmd /c $expression
        
    }

    
}

比如我手上有3个域名要建站,这个站分配给用户zw

domain1.com
domain2.com
domain3.com

那么执行上述函数

Get-BatchSiteBuilderLines  -user zw -domains @"
domain1.com
domain2.com
domain3.com
"@

执行结果

#⚡️[Administrator@CXXUDESK][~\Desktop][9:24:43][UP:4.66Days]
PS>     #测试命令行
>>
>>     Get-BatchSiteBuilderLines  -user zw -domains @"
>>             domain1.com
>>             domain2.com
>>             domain3.com
>> "@
>> #回车执行
domain1.com,*.domain1.com       |/www/wwwroot/zw/domain1.com    |0|0|84
domain2.com,*.domain2.com       |/www/wwwroot/zw/domain2.com    |0|0|84
domain3.com,*.domain3.com       |/www/wwwroot/zw/domain3.com    |0|0|84

批量设置

以批量伪静态设置为例

进入宝塔->网站->网站列表中勾选需要处理的网站->列表下方下拉框中选择部署伪静态->点击批量操作(已选中)

比如要我选中的4个站点设置wordpress伪静态

请添加图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

cxxu1375

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值