6

I want to be able to run a following PowerShell command through AutoHotKey script:

new-item -path c:\ -name logfiles -itemtype directory

I am unable to find a way to achieve this task. Please help.

René Höhle
  • 26,716
  • 22
  • 73
  • 82
samisda1
  • 87
  • 1
  • 2
  • 6

4 Answers4

11

If you want to run a PowerShell script from ahk and it contains several lines and you don't want to use an external file, this is an example how do it:

AutoHotkey code:

psScript =
(
    param($param1, $param2)

    new-item -path $param1 -name logfiles -itemtype directory
    new-item -path $param2 -name logfiles -itemtype directory
    remove-item -path 'c:\temp'
    # etc, write any code, use this quotes for strings: '
    # if you need ", then write: \":
    $import = '[DllImport(\"ntdll.dll\")] public static extern int RtlAdjustPrivilege(ulong a, bool b, bool c, ref bool d);'
)

param1 = C:\temp
param2 = D:\temp

RunWait PowerShell.exe -Command &{%psScript%} '%param1%' '%param2%',, hide

; use this call if you want to see powershell output
Run PowerShell.exe -NoExit -Command &{%psScript%} '%param1%' '%param2%'   
René Vogt
  • 43,056
  • 14
  • 77
  • 99
Argimko
  • 516
  • 5
  • 12
  • Use `get-help about_PowerShell_exe | more` from PowerShell prompt to get an explanation for why `&{...}` call operator is used. – bgoodr May 16 '21 at 16:08
2

Try:

Run, PowerShell "new-item -path c:\ -name logfiles -itemtype"

Seemed to work for me.

Edit based on newly provided information:

Command found @ http://exchangeserverpro.com/install-exchange-2013-pre-requisites-windows-server-2012/

Try:

Run, PowerShell "Install-WindowsFeature AS-HTTP-Activation
                , Desktop-Experience
                , NET-Framework-45-Features
                , RPC-over-HTTP-proxy
                , RSAT-Clustering
                , Web-Mgmt-Console
                , WAS-Process-Model
                , Web-Asp-Net45
                , Web-Basic-Auth
                , Web-Client-Auth
                , Web-Digest-Auth
                , Web-Dir-Browsing
                , Web-Dyn-Compression
                , Web-Http-Errors
                , Web-Http-Logging
                , Web-Http-Redirect
                , Web-Http-Tracing
                , Web-ISAPI-Ext
                , Web-ISAPI-Filter
                , Web-Lgcy-Mgmt-Console
                , Web-Metabase
                , Web-Mgmt-Console
                , Web-Mgmt-Service
                , Web-Net-Ext45
                , Web-Request-Monitor
                , Web-Server
                , Web-Stat-Compression
                , Web-Static-Content
                , Web-Windows-Auth
                , Web-WMI
                , Windows-Identity-Foundation"
errorseven
  • 2,672
  • 2
  • 14
  • 20
  • The one you provided works for me too. But when I use 'Add-Windowsfeature' command instead of that in the example, I get an error saying VARIABLE NAME TOO LONG. Any suggestions please. – samisda1 Sep 07 '15 at 11:49
  • I edited the code to include Add-Windowsfeature code into it, but you haven't reported back if it is working or not? – errorseven Sep 09 '15 at 21:57
  • I am getting the same error after running this. Any other way you could think of? Thank you so much. – samisda1 Oct 20 '15 at 11:41
0

PowerShell isn't necessary to solve this particular problem.

AutoHotKey has built-in functionality for creating directories: FileCreateDir

For example:

FileCreateDir, C:\logfiles
Chad Nouis
  • 6,861
  • 1
  • 27
  • 28
Forivin
  • 14,780
  • 27
  • 106
  • 199
  • @Chad .. The command I provided was just an example. Actually I wanted to run the 'Add-Windowsfeature' command from the following article: http://exchangeserverpro.com/install-exchange-2013-pre-requisites-windows-server-2012/ and I am unable to run it because of an error that says VARIABLE NAME TOO LONG. Please suggest. – samisda1 Sep 07 '15 at 11:45
0

For PowerShell 7

Run pwsh.exe -NoExit -Command &{new-item -path c:\ -name logfiles -itemtype directory}

For Windows PowerShell

Run PowerShell.exe -NoExit -Command &{new-item -path c:\ -name logfiles -itemtype directory}

-NoExit to keep the terminal open other you may omit that part.

I personally used this method to ssh into a linux machine since none of the above worked for me (maybe I'm stupid) but here's my script.

#+t::
Run pwsh.exe -NoExit -Command &{ssh -p <Enter Port Number> <Username>@<IP Address>}
return

Win + Shift + T to launch

Otosan
  • 1