2016-10-05 4 views
-1

Я пишу функцию в 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, и это строка, которая также хороша.

Я понятия не имею, почему это держит неудачу, так что я надеюсь, что кто-то может сказать мне, что это (или посоветуйте мне написать свою функцию другого.

+0

Просьба попытаться вызвать вашу функцию следующим образом: 'Get-IP -IPAM_Space" Клиент "-IPAM_customer $ CustomerName' –

+0

Может быть, что' $ CustomerName' содержит пробелы? Как вы получаете «$ CustomerName» в первую очередь? –

+0

@MartinBrandl Это тоже не сработало $ Клиент не содержит пробелов. Это одно слово. Я получаю свое $ CustomerName с помощью Excel. –

ответ

0

Я наконец нашел ответ. Пробельные символы! ....

последний звонок, где моя функция не удалось, $ CustomerName было выделить из белых пространств, которые я не видел и не знал ..

я узнал, делая;!

write-host "|$IPAM_customer|" 

в моем скрипте. Я видел | CustomerName |

Я удалил пробелы вручную, и функция работает отлично !.

Смежные вопросы