Anderes Verhalten von PowerShell Skripten wenn diese über Empirum aufgerufen werden

Post Reply
DBe
Posts: 4
Joined: 07. Mar 2023, 13:21
Contact:

Anderes Verhalten von PowerShell Skripten wenn diese über Empirum aufgerufen werden

Post by DBe » 19. Jul 2023, 14:18

Hallo zusammen,
ich habe folgendes PowerShell Skript zur Deinstallation von Dell Command Update erstellt und konnte dieses erfolgreich testen (gestartet über eine privilegierte PowerShell ISE). Hinterlege ich dieses nun in einem Empirum Paket und führe dieses aus (egal ob im SYSTEM Kontext oder als Admin mit manuellem Aufruf des Skriptinterpreters (gleicher User wie beim Aufruf über die ISE)) wird trotz installiertem Dell Command Update kein entsprechender Eintrag in der Registry gefunden. Da in HKLM geguckt wird scheint es für mich erstmal nicht nach einem Kontextproblem (der Skriptinterpreter wurde ja auch mit dem gleichen User als Admin ausgeführt).

Der Aufruf des Skripts im Empirum Paket sieht wie folgt aus:

Code: Select all

Call powershell -executionpolicy bypass -command "& '%SRC%\neoSource\DCU.ps1' ;exit $lastexitcode"
Ich habe es auch schon mit dem unten stehenden Aufruf probiert, jedoch bringt auch dieser das gleiche Verhalten.

Code: Select all

Call powershell -executionpolicy bypass -noprofile -File "%SRC%\neoSource\DCU.ps1"
Das PowerShell Skript sieht wie folgt aus:

Code: Select all

$Name = "Dell Command | Update*"
$ProcName = "DellCommandUpdate"
$Timestamp = Get-Date -Format "yyyy-MM-dd_THHmmss"
$LogFile = "C:\Windows\Temp\Dell-CU-Uninst_$Timestamp.log"
$ProgramList = @( "HKLM:\Software\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall\*", "HKLM:\Software\Microsoft\Windows\CurrentVersion\Uninstall\*" )

$Programs = $null
foreach ($key in $ProgramList) {
    $output = &reg.exe query "$key" 2>&1
    if ($output -match "ERROR") {
        # Ignore errors if the key is not found
        continue
    }
    $Programs += Get-ItemProperty $key -EA 0
}

$App = ($Programs | Where-Object { $_.DisplayName -like $Name -and $_.UninstallString -like "*msiexec*" }).PSChildName

if ($App) {
    Get-Process | Where-Object { $_.ProcessName -eq $ProcName } | Stop-Process -Force
    $Params = @(
        "/qn"
        "/norestart"
        "/X"
        "$App"
        "/L*V ""$LogFile"""
    )
    Start-Process "msiexec.exe" -ArgumentList $Params -Wait -NoNewWindow
}
else {
    Write-Output "$Name not found installed in the registry."
}
Write-Output "Current User: $env:USERNAME"
Pause

Die letzten beiden Zeilen sind aus Testgründen vorhanden und werden für das produktive Paket entfernt.

Wo könnte hier das Problem liegen? Da das PowerShell Skript über die ISE problemlos funktioniert kann ich es mir nicht erklären.

StephanSch
Posts: 60
Joined: 03. Jul 2010, 20:20
Location: Berlin
Contact:

Re: Anderes Verhalten von PowerShell Skripten wenn diese über Empirum aufgerufen werden

Post by StephanSch » 24. Jul 2023, 15:52

Ich rufe administrative Powershell-Skripte meist so auf wenn sie mehr Rechte brauchen, da das der Agent nicht tut:

Code: Select all

# Prüft ob administrativ ausgeführt wird. Wenn nicht ruft es sich selber nochmal so auf und macht unten weiter
$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;
 }
 
 #Skript/Befehl aufrufen
 <eigentliches PS1 oder Befehl>
 
 
Empirum 23.0.1; Service Store/DWP 12.0
Windows Server 2019
Clients: Windows 10 Enterprise x64 21H2

DBe
Posts: 4
Joined: 07. Mar 2023, 13:21
Contact:

Re: Anderes Verhalten von PowerShell Skripten wenn diese über Empirum aufgerufen werden

Post by DBe » 25. Jul 2023, 10:22

ich konnte das Problem nun über einen anderen Weg lösen. Ich habe aus der .ps1 eine .exe erstellt (iexpress Archiv mit gleichem powershell.exe Aufruf wie im Empirum Paket). Nun rufe ich die .exe über das Empirum Paket auf. Das läuft soweit ohne Probleme.

Post Reply

Return to “Paketierung”

Who is online

Users browsing this forum: Bing [Bot] and 0 guests