Puncte:1

Setarea scriptului Powershell Permisiuni WMI CIMV2

drapel nl

În prezent, încerc să schimb un script, astfel încât să îl pot pune într-un GPO. Scriptul în sine funcționează, dar vreau să fac un „dacă altfel” în jurul lui.

Scriptul se găsește aici: https://gist.github.com/exchange12rocks/950aa29f66e6369d2c02fa8583bb3a75

Scopul a fost de a verifica dacă există o cheie de registry și dacă nu, creați-o și setați-o la 1. Astfel, Scriptul rulează o singură dată.

Eu am făcut altceva așa:

$isRegKeySet = Get-ItemProperty -Calea 'HKLM:\SYSTEM\PRTGScript' -Nume hasScriptRun -ErrorAction SilentlyContinue | Select-Object -ExpandProperty hasScriptRun

    Dacă (1 -eq $isRegKeySet) {

        Ieșire
    
    } Else { Scriptul din GitHub }

Partea care creează Cheia este aceasta:

Setare locație HKLM:

New-Item -Path .\System -Name PRTGScript

Pop-Locație

Set-ItemProperty -Cale „HKLM:\System\PRTGScript” -Nume „hasScriptRun” -Valoarea 1
}

Nu sunt sigur unde să pun aceste două părți, astfel încât scenariul să funcționeze. Nu sunt un profesionist Powershell, din păcate.

Scriptul meu este acesta:

# Drepturi de autor (c) Microsoft Corporation. Toate drepturile rezervate. 
# Numai pentru uz personal. Furnizat CA ESTE și CU TOATE DEFECTELE.
 
# Set-WmiNamespaceSecurity.ps1
# Exemplu: Set-WmiNamespaceSecurity root/cimv2 add steve Enable, RemoteAccess

Param ( [parametru(Obligatoriu=$true,Poziție=0)][șir] $namespace,
[parametru(Obligatoriu=$adevărat,Poziție=1)][șir] $operație,
[parametru(Obligatoriu=$adevărat,Poziție=2)][șir] $cont,
[parametru(Poziție=3)][șir[]] $permisiuni = $null,
[bool] $allowInherit = $false,
[bool] $deny = $false,
[șir] $computerName = ".",
[System.Management.Automation.PSCredential] $credential = $null)

Proces {
    $ErrorActionPreference = „Oprire”
 
    Funcția Get-AccessMaskFromPermission($permissions) {
        $WBEM_ENABLE = 1
                $WBEM_METHOD_EXECUTE = 2
                $WBEM_FULL_WRITE_REP = 4
                $WBEM_PARTIAL_WRITE_REP = 8
                $WBEM_WRITE_PROVIDER = 0x10
                $WBEM_REMOTE_ACCESS = 0x20
                $WBEM_RIGHT_SUBSCRIBE = 0x40
                $WBEM_RIGHT_PUBLISH = 0x80
        $READ_CONTROL = 0x20000
        $WRITE_DAC = 0x40000
       
        $WBEM_RIGHTS_FLAGS = $WBEM_ENABLE,$WBEM_METHOD_EXECUTE,$WBEM_FULL_WRITE_REP,`
            $WBEM_PARTIAL_WRITE_REP, $WBEM_WRITE_PROVIDER, $WBEM_REMOTE_ACCESS,`
            $READ_CONTROL,$WRITE_DAC
        $WBEM_RIGHTS_STRINGS = "Activare","MethodExecute","FullWrite","PartialWrite",`
            "ProviderWrite","RemoteAccess","ReadSecurity","WriteSecurity"
 
        $permissionTable = @{}
 
        pentru ($i = 0; $i -lt $WBEM_RIGHTS_FLAGS.Lungime; $i++) {
            $permissionTable.Add($WBEM_RIGHTS_STRINGS[$i].ToLower(), $WBEM_RIGHTS_FLAGS[$i])
        }
       
        $accessMask = 0
 
        foreach ($permission în $permissions) {
            dacă (-nu $permissionTable.ContainsKey($permission.ToLower())) {
                throw „Permisiune necunoscută: $permission`nPermisiuni valide: $($permissionTable.Keys)”
            }
            $accessMask += $permissionTable[$permission.ToLower()]
        }
       
        $accessMask
    }
 
    $isRegKeySet = Get-ItemProperty -Calea 'HKLM:\SYSTEM\PRTGScript' -Nume hasScriptRun -ErrorAction SilentlyContinue | Select-Object -ExpandProperty hasScriptRun

    Dacă (1 -eq $isRegKeySet) {

        Ieșire
    
    } Altfel {   
        
    dacă ($PSBoundParameters.ContainsKey(„Credential”)) {
        $remoteparams = @{ComputerName=$computer;Credential=$credential}
    } altfel {
        $remoteparams = @{ComputerName=$computerName}
    }
       
    $invokeparams = @{Namspace=$namespace;Path="__systemsecurity=@"} + $remoteParams
 
    $output = Invoke-WmiMethod @invokeparams -Name GetSecurityDescriptor
    dacă ($output.ReturnValue -ne 0) {
        throw „GetSecurityDescriptor a eșuat: $($output.ReturnValue)”
    }
 
    $acl = $ieșire.Descriptor
    $OBJECT_INHERIT_ACE_FLAG = 0x1
    $CONTAINER_INHERIT_ACE_FLAG = 0x2
 
    $computerName = (Get-WmiObject @remoteparams Win32_ComputerSystem).Nume
   
    dacă ($cont.Conține('\')) {
        $domainaccount = $cont.Split('\')
        $domain = $domainaccount[0]
        dacă (($domain -eq ".") -sau ($domain -eq "BUILTIN")) {
            $domain = $computerName
        }
        $numecont = $domainaccount[1]
    } elseif ($account.Contains('@')) {
        $domainaccount = $cont.Split('@')
        $domain = $domainaccount[1].Split('.')[0]
        $numecont = $domainaccount[0]
    } altfel {
        $domain = $computerName
        $numecont = $cont
    }
 
    $getparams = @{Class="Win32_Account";Filter="Domain='$domain' and Name='$accountname'"}
 
    $win32account = Get-WmiObject @getparams
 
    dacă ($win32account -eq $null) {
        throw „Contul nu a fost găsit: $account”
    }
 
    comutator ($operare) {
        "adăuga" {
            dacă ($permisiuni -eq $null) {
                throw "-Permisiunile trebuie specificate pentru o operațiune de adăugare"
            }
            $accessMask = Get-AccessMaskFromPermission($permisiuni)
   
            $ace = (New-Object System.Management.ManagementClass("win32_Ace")).CreateInstance()
            $ace.AccessMask = $accessMask
            dacă ($allowInherit) {
                $ace.AceFlags = $OBJECT_INHERIT_ACE_FLAG + $CONTAINER_INHERIT_ACE_FLAG
            } altfel {
                $as.AceFlags = 0
            }
                       
            $trustee = (New-Object System.Management.ManagementClass("win32_Trustee")).CreateInstance()
            $trustee.SidString = $win32account.Sid
            $ace.Trustee = $trustee
           
            $ACCESS_ALLOWED_ACE_TYPE = 0x0
            $ACCESS_DENIED_ACE_TYPE = 0x1
 
            dacă ($nega) {
                $ace.AceType = $ACCESS_DENIED_ACE_TYPE
            } altfel {
                $ace.AceType = $ACCESS_ALLOWED_ACE_TYPE
            }
 
            $acl.DACL += $ace.psobject.immediateBaseObject
        }
       
        "șterge" {
            dacă ($permisiuni -ne $null) {
                throw „Permisiunile nu pot fi specificate pentru o operațiune de ștergere”
            }
       
            [System.Management.ManagementBaseObject[]]$newDACL = @()
            foreach ($as în $acl.DACL) {
                dacă ($ace.Trustee.SidString -ne $win32account.Sid) {
                    $newDACL += $ace.psobject.immediateBaseObject
                }
            }
 
            $acl.DACL = $newDACL.psobject.immediateBaseObject
        }
       
        Mod implicit {
            throw "Operație necunoscută: $operation`nOperațiuni permise: adăugați ștergere"
        }
    }
 
    $setparams = @{Name="SetSecurityDescriptor";ArgumentList=$acl.psobject.immediateBaseObject} + $invokeParams
 
    $output = Invoke-WmiMethod @setparams
    dacă ($output.ReturnValue -ne 0) {
        throw „SetSecurityDescriptor a eșuat: $($output.ReturnValue)”
    }
}
Setare locație HKLM:

New-Item -Path .\System -Name PRTGScript

Pop-Locație

Set-ItemProperty -Cale „HKLM:\System\PRTGScript” -Nume „hasScriptRun” -Valoarea 1
}

Multumesc pentru ajutor.

Postează un răspuns

Majoritatea oamenilor nu înțeleg că a pune multe întrebări deblochează învățarea și îmbunătățește legătura interpersonală. În studiile lui Alison, de exemplu, deși oamenii își puteau aminti cu exactitate câte întrebări au fost puse în conversațiile lor, ei nu au intuit legătura dintre întrebări și apreciere. În patru studii, în care participanții au fost implicați în conversații ei înșiși sau au citit transcrieri ale conversațiilor altora, oamenii au avut tendința să nu realizeze că întrebarea ar influența – sau ar fi influențat – nivelul de prietenie dintre conversatori.