You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PowerShell脚本内预设参数与命令行输入参数合并使用方案

可行解决方案

你当前遇到的参数不生效的核心原因是未给脚本本身声明参数块,命令行传入的-ComputerName无法被脚本内部捕获,具体实现方案如下:

  • 首先在脚本最顶部添加脚本级参数声明,强制要求传入-ComputerName参数
  • 把所有站点的固定配置用结构化的哈希表数组存储,后续新增站点只需要更新配置项即可,无需重复写变量
  • 根据传入的ComputerName前缀自动匹配对应站点的固定参数,再调用自定义函数即可

完整可运行代码示例

# 脚本最顶部声明接收命令行传入的参数,必须放在所有逻辑之前
param(
    [Parameter(Mandatory=$true)]
    [string]$ComputerName
)

function GetInfo {
    param ($SiteName, $Subnet, $Cred, $ComputerName)
    # 修正原代码笔误:原示例中写的$Site改为定义的$SiteName变量
    Write-Host "Checking $SiteName and $ComputerName"
    <# 保留你原有检查前缀、子网等逻辑 #>
}

# 预设所有站点的固定配置,可按需扩展新增站点
$siteConfigs = @(
    @{
        SiteName = "London1"
        Subnet = "192.168.10.1/24"
        # 这里替换为你实际的凭据获取方式,也可以提前存储为加密凭据避免每次输入
        Cred = Get-Credential -Message "输入London1站点访问凭据"
        # 配置ComputerName的匹配前缀
        MatchPrefix = "Lon1"
    },
    @{
        SiteName = "London2"
        Subnet = "192.168.11.1/24"
        Cred = Get-Credential -Message "输入London2站点访问凭据"
        MatchPrefix = "Lon2"
    }
)

# 自动匹配ComputerName对应站点配置
$targetSite = $siteConfigs | Where-Object { $ComputerName -like "$($_.MatchPrefix)*" } | Select-Object -First 1

if (-not $targetSite) {
    Write-Error "未找到匹配$ComputerName的站点配置,请检查输入"
    exit 1
}

# 调用函数,自动传入站点固定参数+命令行接收的ComputerName
GetInfo -SiteName $targetSite.SiteName -Subnet $targetSite.Subnet -Cred $targetSite.Cred -ComputerName $ComputerName

调用说明

直接使用你预期的方式调用即可,不需要传入其余三个固定参数:
.\GetPCInf.ps1 -ComputerName "Lon1-PC1"
.\GetPCInf.ps1 -ComputerName "Lon2-PC1"

内容的提问来源于stack exchange,提问作者Alex

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.27 18:36:04