powershell - New-NetIPAddress 参数“-IPAddress”导致“语句块或类型定义中缺少关闭 '}'”错误
问题描述
我正在尝试从config.json
如下所示的文件配置本地系统的虚拟交换机:
{
"system_name":"demo_system",
"version":"0.0",
"network_setting":{
"virtual_switch":{
"internal":{
"NATSwitch":{
"ip_address":"123.456.789.2",
"interface_alias":"vEthernet (NATSwitch)",
"internal_ip_interface_address_prefix":"123.456.789.0/24"
},
"Robot Switch":{
"ip_address":"987.654.321.2",
"interface_alias":"vEthernet (Robot Switch)",
"internal_ip_interface_address_prefix":"987.654.321.0/24"
}
}
}
}
}
testing.ps1
读取此文件并设置虚拟交换机的 ps1 文件是这样的:
Param
(
[string]$system_config = "C:\workspace\config.json"
)
function assert-virtual-switch
{
# $args[0] is the $networking_ht
Write-Output "Checking the virtual switches"
$ht = $args[0]
$internal_switch_psobject = $ht["virtual_switch"].internal
$internal_switch_ht = @{}
$internal_switch_psobject.psobject.properties | Foreach-Object { $internal_switch_ht[$_.Name] = $_.Value }
foreach ($internal_switch_key in $internal_switch_ht.Keys) {
if (Get-VMSwitch | Where-Object {$_.Name -eq $internal_switch_key}) {
# The switch already exist
Write-Output "Internal Switch $internal_switch_key exists"
}else{
# Create the virtual switch
Write-Output "Internal Switch $internal_switch_key doesn't exist, creating it now"
$internal_switch_ip = $internal_switch_ht[$internal_switch_key].ip_address
$interface_alias = $internal_switch_ht[$internal_switch_key].interface_alias
$internal_ip_interface_address_prefix = $internal_switch_ht[$internal_switch_key].internal_ip_interface_address_prefix
[byte]$prefix_length = 24
New-VMSwitch –SwitchName $internal_switch_key –SwitchType Internal
New-NetIPAddress -PrefixLength $prefix_length –IPAddress "$internal_switch_ip" -InterfaceAlias "$interface_alias"
New-NetNat –Name $internal_switch_key –InternalIPInterfaceAddressPrefix $internal_ip_interface_address_prefix
}
}
}
$sys_ps_object = Get-Content $system_config | Out-String | ConvertFrom-Json
$sys_ht = @{}
$sys_ps_object.psobject.properties | Foreach-Object { $sys_ht[$_.Name] = $_.Value }
# At this point, the system config is converted to a hash table, we can read from it like such:
foreach($sys_config_key in $sys_ht.Keys){
if ($sys_config_key -eq "network_setting"){
# $networking_ht is a hashtabe of the networking setting
$networking_ps_object = $sys_ht[$sys_config_key]
$networking_ht = @{}
$networking_ps_object.psobject.properties | Foreach-Object { $networking_ht[$_.Name] = $_.Value }
}
}
assert-virtual-switch $networking_ht
如您所见,我创建了一个函数assert-virtual-switch
来确保虚拟交换机在本地存在,如果不存在则创建一个。该函数的输入是从 config.json 中提取的内部交换机信息的哈希表。
但是,我一直遇到这个错误:
错误
At C:\workspace\test\test_new_ipaddress\testing.ps1:39 char:69
+ ... "External switch $external_switch_key doesn't exist, creating it now"
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~
The string is missing the terminator: '.
At C:\workspace\test\test_new_ipaddress\testing.ps1:20 char:14
+ }else{
+ ~
Missing closing '}' in statement block or type definition.
At C:\workspace\test\test_new_ipaddress\testing.ps1:16 char:64
+ foreach ($internal_switch_key in $internal_switch_ht.Keys) {
+ ~
Missing closing '}' in statement block or type definition.
At C:\workspace\test\test_new_ipaddress\testing.ps1:6 char:1
+ {
+ ~
Missing closing '}' in statement block or type definition.
+ CategoryInfo : ParserError: (:) [], ParseException
+ FullyQualifiedErrorId : TerminatorExpectedAtEndOfString
我已经将问题定位到创建和配置 IP 地址的这一行。
New-NetIPAddress -PrefixLength $prefix_length –IPAddress "$internal_switch_ip" -InterfaceAlias "$interface_alias"
如果我不包括这样的-IPAddress
论点:
New-NetIPAddress -PrefixLength $prefix_length -InterfaceAlias "$interface_alias"
错误不再出现:
PS C:\workspace> .\testing.ps1
Checking the virtual switches
Internal Switch Robot Switch exists
Internal Switch NATSwitch exists
所以它必须来自 cmdlet 如何解释 IP 地址,因为我尝试过使用和不使用引号$internal_switch_ip
。
另一方面,如果我直接在 Powershell 控制台中逐行运行代码,它就可以工作。
有没有人知道为什么会发生这种情况?
编辑
根据@Lee_Daily 提供的解决方案,问题是由破折号和 em-dash 的混合引起的。在我将所有“-”更改为“-”之后,代码就可以工作了。
解决方案
推荐阅读
- javascript - 将外部库(例如 Tabulator)加载到 Google Apps 脚本中
- wordpress - 如何在购物车页面上显示 Woocommerce 图像
- c# - 为什么通过 AJAX 调用时 Umbraco 对待 IPublishedContent 的方式不同
- reactjs - 如何将上下文数据公开给特定路由
- javascript - 如何在 Selenium webDriver 中使用 Javascript 获取 textBox 的值?
- python - AttributeError:模块“django.db.models”没有属性“get_models”
- python - 如何解决这个错误我正在做crud操作没有错误但在vies文件中
- sql - 如何在 WHERE 条件中组合 MIN 和 MAX
- javascript - 使用 `axios.interceptors` 获取新令牌
- java - Spring 4 应用程序关闭应用程序上下文