Я пишу функцию в PowerShell, чтобы получить IP-адрес от PHP-IPAM, используя его API.Передача переменной функции не работает
Моя функция выглядит;
function Get-IP($IPAM_Space, $IPAM_customer) {
Write-Host $IPAM_Space
Write-Host $IPAM_customer
$Headers = New-Object "System.Collections.Generic.Dictionary[[String],[String]]"
$Headers.Add("Authorization", 'Basic ZGF2ZS5ncmVlYmU6RGF2MWRzb24=')
$GetToken = Invoke-RestMethod $IPAM_URL/api/VMDeploy/user/ -Method Post -Headers $Headers
$token = $GetToken.data.token
$Headers.Add("token", $token)
$All_sections = Invoke-RestMethod $IPAM_URL/api/VMDeploy/sections/ -Method Get -Headers $Headers
$Space_Section_details = $All_sections.data | where Name -eq "$IPAM_Space"
$Space_id = $Space_Section_details.id
$Space_Subnets = Invoke-RestMethod $IPAM_URL/api/VMDeploy/sections/$Space_id/subnets/ -Method Get -Headers $Headers
$Customer_Subnet_details = $Space_Subnets.data | where "description" -eq "$IPAM_customer"
IF (!($Customer_Subnet_details)) {
$ErrorMessage = "$IPAM_customer in unknown in PHP-IPAM, fix that first"
SendErrorMail($ScriptName, $ErrorMessage)
throw
}
$Customer_Subnet_id = $Customer_Subnet_details.id
$Customer_IP_details = Invoke-RestMethod $IPAM_URL/api/VMDeploy/subnets/$Customer_Subnet_id/addresses/ -Method Get -Headers $Headers
$FreeAddress = Invoke-RestMethod $IPAM_URL/api/VMDeploy/subnets/$Customer_Subnet_id/first_free/ -Method Get -Headers $Headers
$netmask = $Customer_Subnet_details.mask
$gateway = ($Customer_IP_details.data) | where is_gateway -like '1' | Select -ExpandProperty IP
if (!($gateway)) {
$ErrorMessage = "$IPAM_customer in $IPAM_Space has no gateway setup in PHP-IPAM, fix that first"
SendErrorMail($ScriptName, $ErrorMessage)
throw
}
if ($IPAM_customer -ne "IS" -and $IPAM_customer -ne "Cogent") {
$InUse = Get-VMGuest -Vm "*$IPAM_customer*" | where IPAddress -like ($FreeAddress.data)
}
if (!($Inuse)) {
return ($FreeAddress.data), $netmask, $gateway
} else {
$Hostname = $InUse.HostName
$ErrorMessage = "$Address in use by $HostName"
SendErrorMail($ScriptName, $ErrorMessage)
throw
}
}
Это делает нагрузку, когда я называю это так:
Get-IP "Customers" "CustomerName"
Функция возвращает правильную информацию.
Проблема заключается, когда я использую переменную в моем вызове функции:
Get-IP "Customers" "$CustomerName"
Он висит, то в разделе:
$Customer_Subnet_details = $Space_Subnets.data | where "description" -eq "$IPAM_customer"
if (!($Customer_Subnet_details)) {
$ErrorMessage = "$IPAM_customer in unknown in PHP-IPAM, fix that first"
SendErrorMail($ScriptName, $ErrorMessage)
throw
}
Он говорит мне, что $IPAM_Customer
не найден. Странно то, что он выводит значение этой переменной. Это также видно в write-host $IPAM_customer
.
Функция работает только тогда, когда я жестко программирую имя моего Клиента вместо использования содержимого переменной.
Я также проверяю, какой тип имеет значение $IPAM_Customer
, и это строка, которая также хороша.
Я понятия не имею, почему это держит неудачу, так что я надеюсь, что кто-то может сказать мне, что это (или посоветуйте мне написать свою функцию другого.
Просьба попытаться вызвать вашу функцию следующим образом: 'Get-IP -IPAM_Space" Клиент "-IPAM_customer $ CustomerName' –
Может быть, что' $ CustomerName' содержит пробелы? Как вы получаете «$ CustomerName» в первую очередь? –
@MartinBrandl Это тоже не сработало $ Клиент не содержит пробелов. Это одно слово. Я получаю свое $ CustomerName с помощью Excel. –