2016-10-05 1 views
-1

Ich schreibe eine Funktion in PowerShell, um eine IP von PHP-IPAM zu erhalten, indem ich seine API verwende.Das Übergeben einer Variablen an eine Funktion schlägt fehl

Meine Funktion sieht aus wie;

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 
    } 
} 

Es tut Last, wenn ich es so nennen:

Get-IP "Customers" "CustomerName" 

Die Funktion liefert die richtigen Informationen zurückgibt.

Das Problem liegt, wenn ich eine Variable in meinem Aufruf der Funktion:

Get-IP "Customers" "$CustomerName" 

Es hängt dann auf Abschnitt:

$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 
} 

Es sagt mir, dass $IPAM_Customer nicht gefunden wird. Das Merkwürdige ist, dass er den Wert dieser Variablen ausgibt. Das ist auch in der write-host $IPAM_customer zu sehen.

Die Funktion funktioniert nur, wenn ich meinen Kundennamen fest codiere, anstatt den Inhalt einer Variablen zu verwenden.

Ich habe auch überprüft, welcher Typ der Wert ist $IPAM_Customer und das ist eine Zeichenfolge, so dass auch gut ist.

Ich habe keine Ahnung, warum dies nicht möglich hält, so hoffe ich, jemand kann mir sagen, diese (oder teilen Sie mir meine Funktion unterschiedlich zu schreiben.

+0

Bitte versuchen Sie, Ihre Funktion wie folgt aufzurufen: 'Get-IP -IPAM_Space" Kunde "-IPAM_customer $ CustomerName' –

+0

Könnte es sein, dass '$ CustomerName' Whitespace enthält? Wie erhalten Sie "$ CustomerName" an erster Stelle? –

+0

@MartinBrandl Das hat auch nicht funktioniert $ Kunde enthält keine Leerzeichen. Es ist ein einziges Wort. Ich erhalte meinen $ CustomerName mit Excel. –

Antwort

0

ich endlich die Antwort gefunden. Leerzeichen! ....

der letzte Aufruf, wo meine Funktion versagt hatte die $ Kundenname von weißen Flächen zuzuteilen, die ich nicht sehen und wusste nicht, ..

ich herausgefunden, indem Sie;!

write-host "|$IPAM_customer|" 

in meinem Skript. Ich sah | CustomerName |

Ich habe die Whitespaces manuell entfernt und die Funktion funktioniert super !.

Verwandte Themen