Lokale Admingruppe Remote per Powershell auslesen
Hallo zusammen,
ich habe da mal ein Script gebastelt womit ich sehen kann wer auf unseren Rechnern alles lokale Adminrechte hat.
Das Script prüft vorher ob der Rechner erreichbar ist.
Das Funktioniert auch soweit schon, leider bekomme ich manchmal den Fehler, dass der RPC nicht aktiv ist. Diesen möchte ich gern Filtern, aber das will mir nicht gelingen.
Der Fehler taucht in Zeile 09 auf aber ich kann ihn mit Zeile 12 nicht abfangen und Leserlich darstellen
Die Fehlermeldung steht unter dem Code.
Danke für tolle Hinweise.
VG Florian
ich habe da mal ein Script gebastelt womit ich sehen kann wer auf unseren Rechnern alles lokale Adminrechte hat.
Das Script prüft vorher ob der Rechner erreichbar ist.
Das Funktioniert auch soweit schon, leider bekomme ich manchmal den Fehler, dass der RPC nicht aktiv ist. Diesen möchte ich gern Filtern, aber das will mir nicht gelingen.
Der Fehler taucht in Zeile 09 auf aber ich kann ihn mit Zeile 12 nicht abfangen und Leserlich darstellen
Die Fehlermeldung steht unter dem Code.
Danke für tolle Hinweise.
VG Florian
function get-localadmins{
[cmdletbinding()]
Param(
[string]$computerName
)
try{
$group = get-wmiobject win32_group -ComputerName $computerName -Filter "LocalAccount=True AND SID='S-1-5-32-544'"
}
catch{
if ($group -match 'Der RPC-Server ist nicht verfügbar'){write-host "RPC nicht aktiv"}
}
$query = "GroupComponent = `"Win32_Group.Domain='$($group.domain)'`,Name='$($group.name)'`""
$list = Get-WmiObject win32_groupuser -ComputerName $computerName -ErrorAction SilentlyContinue -Filter $query
$list | %{$_.PartComponent} | % {$_.substring($_.lastindexof("Domain=") + 7).replace("`",Name=`"","\")} | select-object @{Name="USERNAME";Expression={$_}},@{Name="PCNAME";Expression={$computerName}}
}
Function Test-ConnectionQuietFast {
[CmdletBinding()]
param(
[String]$ComputerName,
[int]$Count = 1,
[int]$Delay = 250
)
for($I = 1; $I -lt $Count + 1 ; $i++)
{
#Write-Verbose "Ping Computer: $ComputerName, $I try with delay $Delay milliseconds"
# Test the connection quiet to the computer with one ping
If (Test-Connection -ComputerName $ComputerName -Quiet -Count 1)
{
# Computer can be contacted, return $True
#Write-Verbose "Computer: $ComputerName is alive! With $I ping tries and a delay of $Delay milliseconds"
return $True
}
# delay between each pings
Start-Sleep -Milliseconds $Delay
}
# Computer cannot be contacted, return $False
Write-Verbose "Computer: $ComputerName cannot be contacted! With $Count ping tries and a delay of $Delay milliseconds"
$False
}
$server = @(Get-Content C:\User\User.txt)
foreach($servers in $server)
{
$connect = Test-ConnectionQuietFast -ComputerName $servers -Count 2 -Delay 250 –Verbose -ErrorAction Stop
if ($connect -eq $true){
$servers=$servers | % { get-localadmins $_} -ErrorAction Stop
$servers=$servers | Where-Object {$_ -notlike "*svcSCCM*"}
$servers=$servers | Where-Object {$_ -notlike "*rol_*"}
$servers=$servers | Where-Object {$_ -notlike "*Domain*"}
$servers=$servers | Where-Object {$_ -notlike "*Support89*"}
$servers=$servers | Where-Object {$_ -notlike "*Lokale*"}
$servers
}
else{
Write-Host "Rechner nicht erreichbar "
}
}
get-wmiobject : Der RPC-Server ist nicht verfügbar. (Ausnahme von HRESULT: 0x800706BA)
In C:\Users\Fiedlerflo\Documents\Adminrechte-abfragen.ps1:9 Zeichen:12
+ $group = get-wmiobject win32_group -ComputerName $computerName -Fil ...
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : InvalidOperation: (:) [Get-WmiObject], COMException
+ FullyQualifiedErrorId : GetWMICOMException,Microsoft.PowerShell.Commands.GetWmiObjectCommand
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 515702
Url: https://administrator.de/contentid/515702
Ausgedruckt am: 25.11.2024 um 16:11 Uhr
5 Kommentare
Neuester Kommentar
Der Fehler taucht in Zeile 09 auf aber ich kann ihn mit Zeile 12 nicht abfangen und Leserlich darstellen
Weil die Shell einfach weitermacht als wäre nichts gewesen wenn du ihr nicht sagst was sie bei einem Fehler machen soll, dafür gibt's den ErrorAction Parameter, oder auch Global die Variable $ErrorActionPreferenceGet-WmiObject ........... -ErrorAction Stop
Hallo Florian,
versuch es so:
Viele Grüße,
Fritz
versuch es so:
try{
$filter = "LocalAccount=True AND SID='S-1-5-32-544'"
$group = get-wmiobject win32_group -ComputerName $computerName -Filter $filter -ErrorAction Stop
}
catch{
if ($_.Exception.GetType().Name -eq "COMException") {
Write-Host "RPC auf $computerName nicht aktiv"
}
Viele Grüße,
Fritz
War ja das selbe was ich oben geschrieben habe, -EA Stop bringt den Effekt, man hätts ja nur mal lesen brauchen...
@141815
Wurde gelesen. Relevant in meinem Post ist der Exception-Handler, darüber hinaus wollte ich's ihm passend für sein Script zurechtbauen.
Wobei, wo Du es gerade ansprichst... wenn wir -ErrorAction Stop verwenden, dann sollte in den Catch-Block noch ein Continue. Schnipp:
Wurde gelesen. Relevant in meinem Post ist der Exception-Handler, darüber hinaus wollte ich's ihm passend für sein Script zurechtbauen.
Wobei, wo Du es gerade ansprichst... wenn wir -ErrorAction Stop verwenden, dann sollte in den Catch-Block noch ein Continue. Schnipp:
try{
$filter = "LocalAccount=True AND SID='S-1-5-32-544'"
$group = get-wmiobject win32_group -ComputerName $computerName -Filter $filter -ErrorAction Stop
}
catch{
if ($_.Exception.GetType().Name -eq "COMException") {
Write-Host "RPC auf $computerName nicht aktiv"
Continue
}