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

使用PowerShell远程创建文件夹时遇ComputerName参数验证错误

解决PowerShell远程创建文件夹时ComputerName参数为空的错误

问题场景

尝试通过以下代码在远程计算机C盘创建文件夹:

$stageSvrs | %{
     Invoke-Command -ComputerName $_ -ScriptBlock { 
         $setupFolder = "c:\Support\test1"
         Write-Host "Creating Support Folder"
         New-Item -Path $setupFolder -type directory -Force 
         Write-Host "Folder creation complete"
     }
}

执行后出现错误:

Invoke-Command : Cannot validate argument on parameter 'ComputerName'. The argument is null or empty.
Provide an argument that is not null or empty, and then try the command again.
At \company.local\share\share\userdata\username\Documents\WindowsPowerShell\CreateFolder.ps1:2 char:39

  • Invoke-Command -ComputerName $_ -ScriptBlock {
    
  • ~~
    
    • CategoryInfo : InvalidData: (:) [Invoke-Command], ParameterBindingValidationException
    • FullyQualifiedErrorId : ParameterArgumentValidationError,Microsoft.PowerShell.Commands.InvokeCommandCommand

错误原因

错误核心是$stageSvrs变量未正确初始化:

  • 变量本身为空(未赋值)
  • 变量包含空字符串、Null或纯空白的元素,导致管道传递给ForEach-Object的$_无有效计算机名

解决方案

1. 初始化有效的计算机名列表

先给$stageSvrs赋值包含真实远程计算机名的数组:

# 替换为你的实际远程计算机名
$stageSvrs = @("RemotePC01", "RemotePC02", "FileServer01")

2. 过滤无效元素再执行

在管道中添加过滤逻辑,排除空值和空白字符串:

$stageSvrs | Where-Object { $_ -and $_ -notmatch '^\s*$' } | ForEach-Object {
    Invoke-Command -ComputerName $_ -ScriptBlock { 
        $setupFolder = "c:\Support\test1"
        Write-Host "Creating Support Folder on $env:COMPUTERNAME"
        New-Item -Path $setupFolder -Type Directory -Force 
        Write-Host "Folder creation complete on $env:COMPUTERNAME"
    }
}

3. 增加前置检查(可选)

添加变量有效性检查,提前发现问题:

# 检查变量是否为空
if (-not $stageSvrs) {
    Write-Error "变量`$stageSvrs未初始化,请先添加远程计算机名"
    exit 1
}

# 过滤出有效的计算机名
$validServers = $stageSvrs | Where-Object { $_ -and $_ -notmatch '^\s*$' }

if (-not $validServers) {
    Write-Error "`$stageSvrs中无有效计算机名,请检查变量内容"
    exit 1
}

# 执行远程创建操作
$validServers | ForEach-Object {
    Invoke-Command -ComputerName $_ -ScriptBlock { 
        $setupFolder = "c:\Support\test1"
        Write-Host "Creating Support Folder on $env:COMPUTERNAME"
        New-Item -Path $setupFolder -Type Directory -Force 
        Write-Host "Folder creation complete on $env:COMPUTERNAME"
    }
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 09:36:25