Jump to content

Recommended Posts

Hi,

 I am currently trying to create a tool that will automate some task we need to preform at work. The task that I am trying to automate are mostly powershell based. I did a search on the forum and I came across sapien.activexposh COM object. A perfect match to create a GUI in autoit and a clean way to push powershell command for execution.

 

But i hit a roadblock and I hope that someone can help me solve it.

-       before you can use this sapien activexposh object you must register it using RegAsm.exe.

-       The command to register the object is: “C:\Windows\Microsoft.NET\Framework\v4.0.30319\regasm /codebase {directory}\ActiveXPoshV3.dll”

-       The command prompt needs to be elavated prompt

 

The problem:

When I run [start -> cmd -> right click -> run as administrator] its seems to open a elevated prompt. But this prompt doesn’t have enough privilege to register a object in regasm.exe (RegAsm : error RA0000)

 

The weird stuff:

When I [create cmd shortcut to desktop -> right click -> run as administrator] it get a elevated prompt with enough permission to register a object with regasm.exe. (using the same account and laptop!)

 

There seems to be a clear difference when opening the cmd prompt in the way I explained above, see screenshot

 

Question:

Is there way to programmatic start the Administrator:cmd window? BTW runas doesn’t seem to work for me…

 

 

ScreenShot_20150731141034.png

Edited by aghering
Link to comment
Share on other sites

If they are 'mostly powershell' then i would skip cmd/comspec altogether.

#requireadmin

run("powershell")

 

,-. .--. ________ .-. .-. ,---. ,-. .-. .-. .-.
|(| / /\ \ |\ /| |__ __||| | | || .-' | |/ / \ \_/ )/
(_) / /__\ \ |(\ / | )| | | `-' | | `-. | | / __ \ (_)
| | | __ | (_)\/ | (_) | | .-. | | .-' | | \ |__| ) (
| | | | |)| | \ / | | | | | |)| | `--. | |) \ | |
`-' |_| (_) | |\/| | `-' /( (_)/( __.' |((_)-' /(_|
'-' '-' (__) (__) (_) (__)

Link to comment
Share on other sites

Thanks you guys for your input, all the commands seems to open CMD as "Administrator" 
I had some problems with pushing the commands to the CMD console but i finaly managed to programmaticly register the component. (Jeej)

@Boththose: i prefer to work with the activexposh.dll. after registering the object you will be able to execute PS commands, read/clear output, multiline powershell commands without using semicolons, stdinwrite, stdoutread, etc...

Edited by aghering
Link to comment
Share on other sites

  • 2 years later...

I wrote a function that comprehends all the working solutions mentioned earlier in this thread:
 

#include <MsgBoxConstants.au3>
#include <AutoItConstants.au3>

; Call Function: f_RunAsAdmin_CMD
f_RunAsAdmin_CMD(0,1,@SW_SHOW)

; Define Function: f_RunAsAdmin_CMD
Func f_RunAsAdmin_CMD($iMethod = 0, $iDebugFlag = 0, $sShowFlag = @SW_SHOW)
; This function returns an administrator CMD window based on the method chosen:
;   $iMethod = 0 : use ShellExecute with RunAs
;   $iMethod = 1 : use #RequireAdmin and Run("cmd")
;   $iMethod = 0 is Default Option
; 
; Include: Add the following two lines at the top of your script
;   #include <MsgBoxConstants.au3>
;   #include <AutoItConstants.au3>


    Local $sMessage = "Window State: "

    If Not($iMethod = 1) Then
        $iMethod = 0 ; Default method
    EndIf

    Switch $sShowFlag
        Case @SW_SHOW
            $sMessage &= "Visible"
        Case @SW_HIDE
            $sMessage &= "Hidden"
        Case @SW_MINIMIZE
            $sMessage &= "Minimized"
        Case @SW_MAXIMIZE
            $sMessage &= "Maximized"
        Case Else ; Default
            $sShowFlag = @SW_SHOW
            $sMessage &= "Visible"
    EndSwitch

    If ($iDebugFlag = 1) Then
        ConsoleWrite("Method Used: " & String($iMethod)  & @LF & $sMessage & @LF)
        MsgBox(0,"Run CMD as Admin","Method Used: " & String($iMethod) & @LF & $sMessage ,1)
    EndIf

    If ($iMethod = 0) Then
        ShellExecute(@ComSpec, "", "", "RunAs",$sShowFlag)
    Else
        #RequireAdmin
        Run("cmd","",$sShowFlag)
    EndIf

EndFunc

 

I hope this will be helpful for future discussions. You could also consider using RunAsWait (replace RunAs) and ShellExecuteWait (replace ShellExecute) to wait until the CMD window is launched and finishes spawning.

 

example_RunAsAdmin_CMD.au3

Edited by techsray
Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
 Share

×
×
  • Create New...