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.
Bitte versuchen Sie, Ihre Funktion wie folgt aufzurufen: 'Get-IP -IPAM_Space" Kunde "-IPAM_customer $ CustomerName' –
Könnte es sein, dass '$ CustomerName' Whitespace enthält? Wie erhalten Sie "$ CustomerName" an erster Stelle? –
@MartinBrandl Das hat auch nicht funktioniert $ Kunde enthält keine Leerzeichen. Es ist ein einziges Wort. Ich erhalte meinen $ CustomerName mit Excel. –