Home > Mobile >  How do I have to change PowerShell variables code so that I can run it via CMD?
How do I have to change PowerShell variables code so that I can run it via CMD?

Time:07-17

How do I have to change PowerShell code so that I can run it via CMD?

I came up with the following code:

$text_auslesen = Get-Content $env:APPDATA\BIOS-Benchmark\PowerShell-Protokoll-Auswertung.txt
$text_auslesen.Replace("Count    :","") > $env:APPDATA\BIOS-Benchmark\Count_only.txt
$text_auslesen = Get-Content $env:APPDATA\BIOS-Benchmark\PowerShell-Protokoll-Auswertung.txt
$text_auslesen.Replace("Average  :","") > $env:APPDATA\BIOS-Benchmark\Durchschnitt_only.txt

If I copy and paste it completely into a powershell, it can run. But now I have to put the code next to other code in a batch file. How do I have to adjust the code so that the cmd.exe executes the whole thing?

I suspect setting the variables via Powershell code is problematic here.

Unfortunately, a PS1 file is out of the question for my project.

CodePudding user response:

Powershell -c executes PowerShell commands. You can do this from cmd, however, it looks like it needs to be run as administrator.

PowerShell -c "$text_auslesen = Get-Content $env:APPDATA\BIOS-Benchmark\PowerShell-Protokoll-Auswertung.txt;
$text_auslesen.Replace('Count    :','') > $env:APPDATA\BIOS-Benchmark\Count_only.txt;
$text_auslesen = Get-Content $env:APPDATA\BIOS-Benchmark\PowerShell-Protokoll-Auswertung.txt;
$text_auslesen.Replace('Average  :','') > $env:APPDATA\BIOS-Benchmark\Durchschnitt_only.txt"

CodePudding user response:

  • To execute PowerShell commands from a batch file / cmd.exe, you need to create a PowerShell child process, using the PowerShell CLI (powershell.exe for Windows PowerShell, pwsh for PowerShell (Core) 7 ) and pass the command(s) to the -Command (-c) parameter.

  • However, batch-file syntax does not support multi-line strings, so you have two options (the examples use two simple sample commands):

    • Pass all commands as a double-quoted, single-line string:

      powershell.exe -Command "Get-Date; Write-Output hello > test.txt"
      
    • Do not use quoting, which allows you to use cmd.exe's line continuations, by placing ^ at the end of each line.

      powershell.exe -Command Get-Date;^
                              Write-Output hello ^> test.txt
      

Note:

  • In both cases multiple statements must be separated with ;, because ^ at the end of a batch-file line continues the string on the next line without a newline.

  • Especially with the unquoted solution, you need to carefully ^-escape individual characters that cmd.exe would otherwise interpret itself, such as & and >

  • Related