denkis
Goto Top

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

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

Content-ID: 489339

Url: https://administrator.de/forum/powershell-if-bedingung-funktioniert-nicht-489339.html

Ausgedruckt am: 22.12.2024 um 15:12 Uhr

erikro
Lösung erikro 28.08.2019 aktualisiert um 11:45:25 Uhr
Goto Top
Moin,

ganz einfach:

Zitat von @denkis:
       $RegAtt = @("WUServer","WUStatusServer","ElevateNonAdmins")   

[...]

         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
an den Anfang des Skripts setzt.</edit>
denkis
denkis 28.08.2019 um 12:02:33 Uhr
Goto Top
Hallo erikro,

vielen Dank für den Hinweis. Probiere ich aus.

Ich war immer auf...
foreach($Variable in $Sammlung){...}
aus.

Ich melde mich,
Danke soweit

denkis
denkis
denkis 28.08.2019 um 12:08:12 Uhr
Goto Top
Hi erikro,

danke, funktioniert.
Wenn man den ganzen Tag drüber hockt wird man wirklich Blind. Klar das, das Array die Sammlung ist face-wink.


Beste Grüße
denkis
erikro
erikro 28.08.2019 um 12:22:42 Uhr
Goto Top
Zitat von @denkis:
danke, funktioniert.

Gerne.

Wenn man den ganzen Tag drüber hockt wird man wirklich Blind. Klar das, das Array die Sammlung ist face-wink.

Das kenne ich. Da starrt man den ganzen Tag drauf und dann kommt der Kollege und sagt: "Da fehlt ein Zeichen ..." face-wink