Powershell - if Bedingung funktioniert nicht
Hallo Admins,
Zur Einstellung von WSUS Eigenschaften bei nicht Domänenclients habe ich eine Funktion geschrieben. Damit möchte ich ohne zusätzliche Dateien und regfiles die WSUS Einstellungen in verschiedene Skripte einbinden können.
Leider funktioniert eine if Bedingung nicht und ich weiß nicht warum.
Plattform Windows 10 Pro, Powershell 5
Der letzte Abschnitt unter "Process" (in **) funktioniert nicht.
Hier sollen Attribute die nicht vorhanden sind erstellt werden. Ich habs mehfach duchgespielt. Die Variablen beinhalten die benötigten Argumente, Pfade sind korrekt.
Ich weiß nicht wo ich noch suchen soll. Die gleiche Routine verwende ich bereits in anderen Funktionen erfolgreich, nur hier funktioniert sie nicht.
Hat jemand eine Idee?
Vielen Dank im Voraus
denkis
Zur Einstellung von WSUS Eigenschaften bei nicht Domänenclients habe ich eine Funktion geschrieben. Damit möchte ich ohne zusätzliche Dateien und regfiles die WSUS Einstellungen in verschiedene Skripte einbinden können.
Leider funktioniert eine if Bedingung nicht und ich weiß nicht warum.
Plattform Windows 10 Pro, Powershell 5
function Set-WSUSSettings
{
[CmdletBinding(DefaultParameterSetName='WindowsUpdate',
SupportsShouldProcess=$true,
PositionalBinding=$true,
HelpUri = 'bla.com',
ConfirmImpact='Medium')]
[Alias()]
[OutputType([String])]
Param
(
[string]$WUServer,
[string]$WUStatusServer,
$ElevateNonAdmins = 1, #dword
$NoAutoUpdate = 0, #dword
$AUOptions, #dword
... usw.
}
Begin
{
# Clear-Host
$RegPath = "HKLM:\SOFTWARE\Policies\Microsoft\Windows\"
$RegKey = "WindowsUpdate"
$RegKeyAU = "AU"
$RegAtt = @("WUServer","WUStatusServer","ElevateNonAdmins")
$RegAttAU = @("NoAutoUpdate","AUOptions","DetectionFrequencyEnabled","usw...usw..")
}
Process
{
# Die Registryschlüssel werden gesetzt - das funktioniert
$RegPathTest = Test-Path -Path "$RegPath$RegKey"
if ($RegPathTest -eq $false)
{
New-Item -Path $RegPath -Name $RegKey -ErrorAction SilentlyContinue
}
else
{
Write-Host "Pfad existiert bereits"
}
** # Attribute werden auf Vorhandensein geprüft und bei Bedarf definiert. - funktioniert hier nicht - WARUM?
$Reg = Get-Item -Path "$RegPath$RegKey" -Include *
foreach($RegAtt in $RegAtts)
{
if($Reg.Property -notcontains $RegAtt)
{
New-ItemProperty -PropertyType DWord -Path "$RegPath$RegKey\" -Name "$RegAtt"
}
else {write "Das Attribut existiert bereits."}
}**
End
{
#Argumente werden gesetzt
Set-ItemProperty -Path $RegPath$RegKey -Name WUServer -Value $WUServer
Set-ItemProperty -Path $RegPath$RegKey -Name WUStatusServer -Value $WUStatusServer
usw...usw...
}
Der letzte Abschnitt unter "Process" (in **) funktioniert nicht.
Hier sollen Attribute die nicht vorhanden sind erstellt werden. Ich habs mehfach duchgespielt. Die Variablen beinhalten die benötigten Argumente, Pfade sind korrekt.
Ich weiß nicht wo ich noch suchen soll. Die gleiche Routine verwende ich bereits in anderen Funktionen erfolgreich, nur hier funktioniert sie nicht.
Hat jemand eine Idee?
Vielen Dank im Voraus
denkis
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 489339
Url: https://administrator.de/forum/powershell-if-bedingung-funktioniert-nicht-489339.html
Ausgedruckt am: 22.12.2024 um 15:12 Uhr
4 Kommentare
Neuester Kommentar
Moin,
ganz einfach:
[...]
$RegAtts ist leer bzw. nicht vorhanden und deshalb gibt das auch kein foreach. Umbenennen und es sollte gehen.
hth
Erik
<edit>P. S.: Solche Fehler findet man leicht, wenn man an den Anfang des Skripts setzt.</edit>
ganz einfach:
[...]
foreach($RegAtt in $RegAtts)
$RegAtts ist leer bzw. nicht vorhanden und deshalb gibt das auch kein foreach. Umbenennen und es sollte gehen.
hth
Erik
<edit>P. S.: Solche Fehler findet man leicht, wenn man
set-psdebug -strict
Gerne.
Wenn man den ganzen Tag drüber hockt wird man wirklich Blind. Klar das, das Array die Sammlung ist .
Das kenne ich. Da starrt man den ganzen Tag drauf und dann kommt der Kollege und sagt: "Da fehlt ein Zeichen ..."