none
PowerShell - Zugriff verweigert, PermissionDenied RRS feed

  • Frage

  •  Hallo, ich verwende am Anfang des Skripts

    Get-Credential-UserName"Computername\Admin"-Message"Bitte Kennwort eingeben, damit die Änderungen übernommen werden können!"

    Obwohl die Eingabe meiner Credentials erfolgreich war, erhalte ich immer wieder die Fehlermeldung "Zugriff verweigert", wenn ich ein Skript per Rechtsklick > "Mit Powershell ausführen" öffne.

    Öffne ich eine PowerShell Konsole zuvor als Administrator (Als Administrator ausführen) und gebe hier die Credentials ein, funktioniert die Abarbeitung fehlerfrei.

    Hier ein Auszug:

    UserName                                Password
    --------                                --------
    Computername\Admin System.Security.SecureString
    Remove-NetIPAddress : Zugriff verweigert
    In C:\Temp\IP-Konfiguration_LoadBalancer.ps1:28 Zeichen:16
    + ...  $adapter | Remove-NetIPAddress -AddressFamily $IPType -Confirm:$fals ...
    +                 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
        + CategoryInfo          : PermissionDenied: (MSFT_NetIPAddre...ystemName = ""):ROOT/StandardCimv2/MSFT_NetIPAddres
       s) [Remove-NetIPAddress], CimException
        + FullyQualifiedErrorId : Windows System Error 5,Remove-NetIPAddress

    Remove-NetRoute : Zugriff verweigert
    In C:\Temp\IP-Konfiguration_LoadBalancer.ps1:32 Zeichen:16
    +     $adapter | Remove-NetRoute -AddressFamily $IPType -Confirm:$false
    +                ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
        + CategoryInfo          : PermissionDenied: (MSFT_NetRoute (...:55:8:8:8:55;"):ROOT/StandardCimv2/MSFT_NetRoute) [
       Remove-NetRoute], CimException
        + FullyQualifiedErrorId : Windows System Error 5,Remove-NetRoute

    Remove-NetRoute : Zugriff verweigert
    In C:\Temp\IP-Konfiguration_LoadBalancer.ps1:32 Zeichen:16
    +     $adapter | Remove-NetRoute -AddressFamily $IPType -Confirm:$false
    +                ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
        + CategoryInfo          : PermissionDenied: (MSFT_NetRoute (...:55:8:8:8:55;"):ROOT/StandardCimv2/MSFT_NetRoute) [
       Remove-NetRoute], CimException
        + FullyQualifiedErrorId : Windows System Error 5,Remove-NetRoute

    Remove-NetRoute : Zugriff verweigert
    In C:\Temp\IP-Konfiguration_LoadBalancer.ps1:32 Zeichen:16
    +     $adapter | Remove-NetRoute -AddressFamily $IPType -Confirm:$false
    +                ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
        + CategoryInfo          : PermissionDenied: (MSFT_NetRoute (...:55:8:8:8:55;"):ROOT/StandardCimv2/MSFT_NetRoute) [
       Remove-NetRoute], CimException
        + FullyQualifiedErrorId : Windows System Error 5,Remove-NetRoute

    Remove-NetRoute : Zugriff verweigert
    In C:\Temp\IP-Konfiguration_LoadBalancer.ps1:32 Zeichen:16
    +     $adapter | Remove-NetRoute -AddressFamily $IPType -Confirm:$false
    +                ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
        + CategoryInfo          : PermissionDenied: (MSFT_NetRoute (...??8;:?8???55;"):ROOT/StandardCimv2/MSFT_NetRoute) [
       Remove-NetRoute], CimException
        + FullyQualifiedErrorId : Windows System Error 5,Remove-NetRoute

    New-NetIPAddress : Instance MSFT_NetIPAddress already exists
    In C:\Temp\IP-Konfiguration_LoadBalancer.ps1:36 Zeichen:12
    + $adapter | New-NetIPAddress `
    +            ~~~~~~~~~~~~~~~~~~
        + CategoryInfo          : InvalidArgument: (MSFT_NetIPAddress:ROOT/StandardCimv2/MSFT_NetIPAddress) [New-NetIPAddr
       ess], CimException
        + FullyQualifiedErrorId : Windows System Error 87,New-NetIPAddress

    Set-DnsClientServerAddress : Für den Client war kein Zugriff auf eine CIM-Ressource verfügbar.
    In C:\Temp\IP-Konfiguration_LoadBalancer.ps1:43 Zeichen:12
    + $adapter | Set-DnsClientServerAddress -ServerAddresses $DNS
    +            ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
        + CategoryInfo          : PermissionDenied: (MSFT_DNSClientS...stemName = "2"):ROOT/StandardCi...ntServerAddress)
       [Set-DnsClientServerAddress], CimException
        + FullyQualifiedErrorId : MI RESULT 2,Set-DnsClientServerAddress

    Set-DnsClientServerAddress : Für den Client war kein Zugriff auf eine CIM-Ressource verfügbar.
    In C:\Temp\IP-Konfiguration_LoadBalancer.ps1:43 Zeichen:12
    + $adapter | Set-DnsClientServerAddress -ServerAddresses $DNS
    +            ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
        + CategoryInfo          : PermissionDenied: (MSFT_DNSClientS...temName = "23"):ROOT/StandardCi...ntServerAddress)
       [Set-DnsClientServerAddress], CimException
        + FullyQualifiedErrorId : MI RESULT 2,Set-DnsClientServerAddress



    Wie kann ich das lösen?! Danke.
    • Bearbeitet ajubana Mittwoch, 14. September 2016 08:33
    Mittwoch, 14. September 2016 08:31

Antworten

  • > Get-Credential-UserName"Computername\Admin"-Message"Bitte Kennwort
    > eingeben, damit die Änderungen übernommen werden können!"
     
    Und was machst Du dann weiters mit diesem Credential?
     
    > Obwohl die Eingabe meiner Credentials erfolgreich war, erhalte ich immer
    > wieder die Fehlermeldung "Zugriff verweigert", wenn ich ein Skript per
    > Rechtsklick > "Mit Powershell ausführen" öffne.
     
    Lies Dich mal ein wenig in UAC und "restricted Token" ein:
     
     
    Wenn etwas "als Admin" laufen muß, kann es das nicht "aus sich selbst
    heraus" veranlassen.
     
    Mittwoch, 14. September 2016 08:54
  • Hi ajubana,

    wie Martin schon schreibt, fragst Du zwar Credentials ab, aber damit passiert nichts. Du müsstest quasi Dein Skript anweisen, dass es sich selbst nochmal mit Admin-Rechten startet (quasi ein automatisches "Ausführen als Administrator").

    Bau den folgenden Block an den Anfang Deines Skripts; dieser überprüft, ob Dein ausführender Benutzer in der lokalen Admin-Gruppe drin ist und fragt dann nach einer Rechteanhebung. Dann wird das Skript nochmal mit Admin-Rechten ausgeführt:

    # Execute script with elevated rights
    $identity = [System.Security.Principal.WindowsIdentity]::GetCurrent()
    $princ = New-Object System.Security.Principal.WindowsPrincipal($identity)
      
    if(!$princ.IsInRole( `
     [System.Security.Principal.WindowsBuiltInRole]::Administrator))
       {
       $powershell = [System.Diagnostics.Process]::GetCurrentProcess()
        $psi = New-Object System.Diagnostics.ProcessStartInfo $powerShell.Path
        $script = $MyInvocation.MyCommand.Path
        $prm = $script
       foreach($a in $args) {
         $prm += ' ' + $a
       }
       $psi.Arguments = $prm
       $psi.Verb = "runas"
       [System.Diagnostics.Process]::Start($psi) | Out-Null
       return;
       }


    Liebe Grüße

    Ben

    ____________________________

    MCSA Office 365

    MCSA SQL Server 2014

    MCITP Windows 7

    MCSA Windows 8/10

    MCSE Server Infrastructure

    ____________________________

    Wenn Dir meine Antwort hilft, markiere sie bitte entsprechend als Antwort. Danke! :-).

    Mittwoch, 14. September 2016 11:33

Alle Antworten

  • > Get-Credential-UserName"Computername\Admin"-Message"Bitte Kennwort
    > eingeben, damit die Änderungen übernommen werden können!"
     
    Und was machst Du dann weiters mit diesem Credential?
     
    > Obwohl die Eingabe meiner Credentials erfolgreich war, erhalte ich immer
    > wieder die Fehlermeldung "Zugriff verweigert", wenn ich ein Skript per
    > Rechtsklick > "Mit Powershell ausführen" öffne.
     
    Lies Dich mal ein wenig in UAC und "restricted Token" ein:
     
     
    Wenn etwas "als Admin" laufen muß, kann es das nicht "aus sich selbst
    heraus" veranlassen.
     
    Mittwoch, 14. September 2016 08:54
  • Hi ajubana,

    wie Martin schon schreibt, fragst Du zwar Credentials ab, aber damit passiert nichts. Du müsstest quasi Dein Skript anweisen, dass es sich selbst nochmal mit Admin-Rechten startet (quasi ein automatisches "Ausführen als Administrator").

    Bau den folgenden Block an den Anfang Deines Skripts; dieser überprüft, ob Dein ausführender Benutzer in der lokalen Admin-Gruppe drin ist und fragt dann nach einer Rechteanhebung. Dann wird das Skript nochmal mit Admin-Rechten ausgeführt:

    # Execute script with elevated rights
    $identity = [System.Security.Principal.WindowsIdentity]::GetCurrent()
    $princ = New-Object System.Security.Principal.WindowsPrincipal($identity)
      
    if(!$princ.IsInRole( `
     [System.Security.Principal.WindowsBuiltInRole]::Administrator))
       {
       $powershell = [System.Diagnostics.Process]::GetCurrentProcess()
        $psi = New-Object System.Diagnostics.ProcessStartInfo $powerShell.Path
        $script = $MyInvocation.MyCommand.Path
        $prm = $script
       foreach($a in $args) {
         $prm += ' ' + $a
       }
       $psi.Arguments = $prm
       $psi.Verb = "runas"
       [System.Diagnostics.Process]::Start($psi) | Out-Null
       return;
       }


    Liebe Grüße

    Ben

    ____________________________

    MCSA Office 365

    MCSA SQL Server 2014

    MCITP Windows 7

    MCSA Windows 8/10

    MCSE Server Infrastructure

    ____________________________

    Wenn Dir meine Antwort hilft, markiere sie bitte entsprechend als Antwort. Danke! :-).

    Mittwoch, 14. September 2016 11:33
  • Hi ajubana,

    wie Martin schon schreibt, fragst Du zwar Credentials ab, aber damit passiert nichts. Du müsstest quasi Dein Skript anweisen, dass es sich selbst nochmal mit Admin-Rechten startet (quasi ein automatisches "Ausführen als Administrator").

    Bau den folgenden Block an den Anfang Deines Skripts; dieser überprüft, ob Dein ausführender Benutzer in der lokalen Admin-Gruppe drin ist und fragt dann nach einer Rechteanhebung. Dann wird das Skript nochmal mit Admin-Rechten ausgeführt:

    # Execute script with elevated rights
    $identity = [System.Security.Principal.WindowsIdentity]::GetCurrent()
    $princ = New-Object System.Security.Principal.WindowsPrincipal($identity)
      
    if(!$princ.IsInRole( `
     [System.Security.Principal.WindowsBuiltInRole]::Administrator))
       {
       $powershell = [System.Diagnostics.Process]::GetCurrentProcess()
        $psi = New-Object System.Diagnostics.ProcessStartInfo $powerShell.Path
        $script = $MyInvocation.MyCommand.Path
        $prm = $script
       foreach($a in $args) {
         $prm += ' ' + $a
       }
       $psi.Arguments = $prm
       $psi.Verb = "runas"
       [System.Diagnostics.Process]::Start($psi) | Out-Null
       return;
       }


    Liebe Grüße

    Ben

    ____________________________

    MCSA Office 365

    MCSA SQL Server 2014

    MCITP Windows 7

    MCSA Windows 8/10

    MCSE Server Infrastructure

    ____________________________

    Wenn Dir meine Antwort hilft, markiere sie bitte entsprechend als Antwort. Danke! :-).

    fett, Danke!

    Wär nice, wenn Du das Skript etwas beschreiben könntest! :-) Ich verstehe z.B. den folgenden Eintrag nicht.

       foreach($a in $args) {
         $prm += ' ' + $a
       }
    Danke schön!

    VG, ajubana

    Samstag, 17. September 2016 02:40
  • >    foreach($a in $args) {
    >      $prm += ' ' + $a
     
    Damit werden die Parameter des initialen Aufrufs wieder zusammengebaut,
    um die auch an den elevated-Aufruf zu übergeben.
     
    Montag, 19. September 2016 08:02