Powershell 找不到接受参数的位置参数

Powershell 找不到接受参数的位置参数,powershell,Powershell,我对脚本有问题。我检查固件类型,然后根据固件类型格式化硬盘。问题是,当它运行命令时,我得到了一个错误 New-Partition -DiskNumber 0 -GptType '{ebd0a0a2-b9e5-4433-87c0-68b6b72699c7}' $partsize_param -DriveLetter C 上面说 a positional parameter cannot be found that accept argument '-UseMaxiumSize' + cate

我对脚本有问题。我检查固件类型,然后根据固件类型格式化硬盘。问题是,当它运行命令时,我得到了一个错误

New-Partition -DiskNumber 0 -GptType '{ebd0a0a2-b9e5-4433-87c0-68b6b72699c7}' $partsize_param -DriveLetter C
上面说

a positional parameter cannot be found that accept argument '-UseMaxiumSize' + categoryinfo : invalidargument: (:) [New-Partition], ParameterBindingException + fullyqualifiederror: PositionalParameterNotFound, New-Partition 不能(轻松地)使用变量作为参数名。这是一个很好的使用情况。这使您可以轻松地在哈希表中构建一组动态参数

function clean_install_hdd () {
    Switch (Get-BiosType) {
        1       {$firmwaremode='Legacy BIOS'}
        2       {$firmwaremode='UEFI Mode'}
        Default {$firmwaremode='Unknown'}
    }
    Get-Disk

    $PartitionSize = Read-Host "Partition size - How many GB or max to use all available space"

    $Params = @{
        DiskNumber = 0
        DriveLetter = "C"
    };

    if ($PartitionSize -eq "max") {
        $Params.Add("UseMaximumSize",$true);
    } else {
        $Params.Add("Size", $PartitionSize);
    }

    if ("$firmwaremode" -eq "Legacy BIOS") {
        Clear-Disk 0 -RemoveData -RemoveOEM  -Confirm:$false; Initialize-Disk 0 -PartitionStyle MBR -Confirm:$false;
        $Params.Add("IsActive",$true);
        New-Partition @Params | Format-Volume -FileSystem NTFS -NewFileSystemLabel Windows -ShortFileNameSupport $False  -Confirm:$false
    }
    if ("$firmwaremode" -eq "UEFI Mode") {
        Clear-Disk 0 -RemoveData -RemoveOEM  -Confirm:$false; Initialize-Disk 0 -PartitionStyle GPT  -Confirm:$false
        $systemPart = New-Partition -DiskNumber 0 -GptType '{c12a7328-f81f-11d2-ba4b-00a0c93ec93b}' -Size 100MB -DriveLetter S
        & format.com "$($systemPart.DriveLetter):" /FS:FAT32 /Q /Y | Out-Null
        New-Partition -DiskNumber 0 -GptType '{e3c9e316-0b5c-4db8-817d-f92df00215ae}' -Size 128MB
        Write-Host $partsize_param
        $Params.Add("GptType","{ebd0a0a2-b9e5-4433-87c0-68b6b72699c7}");
        New-Partition @Params | Format-Volume -FileSystem NTFS -NewFileSystemLabel Windows -ShortFileNameSupport $False -Confirm:$false
    }
}
不能(轻松地)使用变量作为参数名。这是一个很好的使用情况。这使您可以轻松地在哈希表中构建一组动态参数

function clean_install_hdd () {
    Switch (Get-BiosType) {
        1       {$firmwaremode='Legacy BIOS'}
        2       {$firmwaremode='UEFI Mode'}
        Default {$firmwaremode='Unknown'}
    }
    Get-Disk

    $PartitionSize = Read-Host "Partition size - How many GB or max to use all available space"

    $Params = @{
        DiskNumber = 0
        DriveLetter = "C"
    };

    if ($PartitionSize -eq "max") {
        $Params.Add("UseMaximumSize",$true);
    } else {
        $Params.Add("Size", $PartitionSize);
    }

    if ("$firmwaremode" -eq "Legacy BIOS") {
        Clear-Disk 0 -RemoveData -RemoveOEM  -Confirm:$false; Initialize-Disk 0 -PartitionStyle MBR -Confirm:$false;
        $Params.Add("IsActive",$true);
        New-Partition @Params | Format-Volume -FileSystem NTFS -NewFileSystemLabel Windows -ShortFileNameSupport $False  -Confirm:$false
    }
    if ("$firmwaremode" -eq "UEFI Mode") {
        Clear-Disk 0 -RemoveData -RemoveOEM  -Confirm:$false; Initialize-Disk 0 -PartitionStyle GPT  -Confirm:$false
        $systemPart = New-Partition -DiskNumber 0 -GptType '{c12a7328-f81f-11d2-ba4b-00a0c93ec93b}' -Size 100MB -DriveLetter S
        & format.com "$($systemPart.DriveLetter):" /FS:FAT32 /Q /Y | Out-Null
        New-Partition -DiskNumber 0 -GptType '{e3c9e316-0b5c-4db8-817d-f92df00215ae}' -Size 128MB
        Write-Host $partsize_param
        $Params.Add("GptType","{ebd0a0a2-b9e5-4433-87c0-68b6b72699c7}");
        New-Partition @Params | Format-Volume -FileSystem NTFS -NewFileSystemLabel Windows -ShortFileNameSupport $False -Confirm:$false
    }
}

不能用字符串文字替换参数名,如下所示:

$p = "-ParamName"
Get-Stuff $p
解析器将把字符串“-ParamName”解释为位置参数的参数。由于找不到位置参数,因此引发错误

处理动态参数参数(如本例中所示)的正确方法是使用Splating:

$params = @{}

if ("$PartitionSize" -eq "max") {
    $params['UseMaximumSize'] = $true
} else {
    $params['Size'] = $PartitionSize
}

New-Partition @params
您可以将所有命名参数参数放入哈希表,也可以仅显示部分参数集:

if($firmwaremode -eq "Legacy BIOS") {
    New-Partition -IsActive @params
} else {
    New-Partition @params
}

不能用字符串文字替换参数名,如下所示:

$p = "-ParamName"
Get-Stuff $p
解析器将把字符串“-ParamName”解释为位置参数的参数。由于找不到位置参数,因此引发错误

处理动态参数参数(如本例中所示)的正确方法是使用Splating:

$params = @{}

if ("$PartitionSize" -eq "max") {
    $params['UseMaximumSize'] = $true
} else {
    $params['Size'] = $PartitionSize
}

New-Partition @params
您可以将所有命名参数参数放入哈希表,也可以仅显示部分参数集:

if($firmwaremode -eq "Legacy BIOS") {
    New-Partition -IsActive @params
} else {
    New-Partition @params
}

非常感谢。我理解。我尝试使用与我在批处理文件中制作相同内容时使用的类似方法,但在powershell中工作方式不同。谢谢。我理解。我尝试使用与我在批处理文件中制作相同内容时使用的类似方法,但在powershell中的工作方式不同。