Ich blicke in den PowerShell Abgrund..

Reinhard77

Lieutenant
Registriert
Feb. 2019
Beiträge
848
Ich habe einen PowerShell Schritt programmiert, womit zwei IP Adressen, zwei Gateways und drei DNS Server vergeben werden.
Nun habe ich festgestellt, dass dieser Schritt auf Servern nicht funktioniert, aber das ist ein anderes Thema. Dazu habe ich mir den Schritt genauer angeschaut und festgestellt es sind fehler von Groß- und Kleinschreibung drin bei der Angabe von Parametern.

Damit man versteht was ich meine, poste ich den Code hier:

PowerShell:
$activeLan = Get-NetAdapter | Where-Object -FilterScript { $_.Status -eq "Up" }                 
$currentIp = Get-NetIPAddress -Interfaceindex $activeLan.InterfaceIndex -AddressFamily IPv4           
          
$netIpSplit = $dnsServer.Split('.')           
          
$netIpSplit[3] = "0"           
          
$netIpSplit0 = $netIpSplit[0]           
$netIpSplit1 = $netIpSplit[1]           
$netIpSplit2 = $netIpSplit[2]           
$netIpSplit3 = $netIpSplit[3]           
          
$netIp = "$netIpSplit0.$netIpSplit1.$netIpSplit2.$netIpSplit3"           
                
#Die aktuelle IP Adresse muss erst einmal entfernt werden, bevor alles gesetzt werden kann               
Remove-NetIPAddress -InterfaceIndex $activeLan.InterfaceIndex -IPAddress $currentIp.IPv4Address -AddressFamily IPv4 -Confirm:$false                 
New-NetIPAddress -Interfaceindex $activeLan.InterfaceIndex -IPAddress $currentIp.IPv4Address -Prefixlength 24 -DefaultGateway 192.168.124.254               
                
New-NetIPAddress -Interfaceindex $activeLan.InterfaceIndex -IPAddress $ipAddress -Prefixlength 24 -DefaultGateway $gateway                 
Set-DNSClientServerAddress -Interfaceindex $activeLan.InterfaceIndex –ServerAddresses (“192.168.126.20”,”192.168.126.30”,"$dnsServer")             
              
#Set-NetIPInterface -InterfaceIndex $activeLan.InterfaceIndex -InterfaceMetric 1             
              
route add 192.168.124.0 mask 255.255.255.255 192.168.124.254 metric 10 if $activeLan.InterfaceIndex -p           
              
route add $netIp mask 255.255.255.255 $gateway metric 20 if $activeLan.InterfaceIndex -p

Der Fehler ist z.B. bei der zweiten Zeile mit "New-NetIPAddress" zu finden. Da wird der Parameter -InterfaceIndex mit einem kleinen i angegeben. Darüber wird der Parameter mit einem großen I angegeben. Das kuriose ist, wenn ich den Fehler korrigiere, dann funktioniert der Schritt nicht mehr. Nur so funktioniert dieser Schritt. Laut der ISE gibt es für den Befehl New-NetIPAddress keinen Parameter -InterfaceIndex. Laut der Microsoft Website zu dem Befehl schon! Keine Ahnung, ob ich diesen Fehler von Anfang an drin hatte und der mir nur nicht aufgefallen ist, aber sehr merkwürdig finde ich das ganze schon. Damit der Schritt funktioniert, müssen natürlich oben im Schritt die drei Variablen IpAddress, gateway und dnsServer deklariert werden..

Wer kann mir sagen, was da los ist?
 
Zuletzt bearbeitet:
Welche PS Version hast du und auf welche wird in dem Artikel von MS verwiesen?
 
  • Gefällt mir
Reaktionen: tollertyp
Am besten einmal prüfen welche PS Version auf dem Server installiert ist und welche im Artikel genutzt wird. Die Version kann inzwischen zusätzlich aktualisiert werden.
 
Reinhard77 schrieb:
Laut der ISE gibt es für den Befehl New-NetIPAddress keinen Parameter -InterfaceIndex.
Hier schon:
1707305104042.png


Ich vermute auch einen Versionskonflikt.

E: InterfaceIndex gab es selbst bei PS von Server 2012 schon: https://learn.microsoft.com/en-us/powershell/module/nettcpip/new-netipaddress?view=winserver2012-ps
 
  • Gefällt mir
Reaktionen: tollertyp
Hi,

Ausführliche Fehlermeldungen nutzen:
Verwende $ErrorActionPreference = "Stop" am Anfang deines Skripts, um detaillierte Fehlermeldungen zu erhalten, falls etwas schiefgeht.
 
Auf welchem Server OS bist du denn?
Server 2022 zB hat immer PS Version 7 soweit ich weiß. Die Artikel bei dir sind auch Powershell 7
 
tollertyp schrieb:
Und welche wird konkret verwendet?

Ic3HanDs schrieb:
Auf welchem Server OS bist du denn?
Server 2022 zB hat immer PS Version 7 soweit ich weiß. Die Artikel bei dir sind auch Powershell 7

Auf dem Rechner wo der Schritt so funktioniert ist Version 5.1.22621.2506 (Windows 11). Auf dem Server, wo der Schritt nicht funktioniert ist Version 5.1.20348.2227 (Server 2022)
 
Zurück
Oben