如何从批处理文件执行Powershell命令?多行注释
在批处理文件中执行PowerShell命令,可以使用powershell
命令行工具。以下是一个简单的批处理文件示例,它执行了一个PowerShell命令来显示当前目录下的文件和文件夹列表:
如果你有一个更复杂的PowerShell命令或脚本,你可以直接将它写在powershell -Command
后面。例如,以下批处理脚本执行了一个简单的PowerShell脚本,该脚本打印出“Hello, World!”:
如果你的PowerShell命令或脚本存储在一个文件中(比如script.ps1
),你可以使用-File
参数来执行它:
请确保你的批处理文件和PowerShell脚本文件的路径正确,并且批处理文件有适当的权限来执行PowerShell命令。
提示:AI自动生成,仅供参考
=======================================================================================
单个bat中调用powershell 代码----多行注释法
1. 来源
How to execute powershell commands from a batch file?
kapitanrum 的回答:https://stackoverflow.com/a/41986771
PowerShell项目介绍
PowerShell/PowerShell: PowerShell 是由微软开发的命令行外壳程序和脚本环境,支持任务自动化和配置管理。它包含了丰富的.NET框架功能,适用于Windows和多个非Windows平台,提供了一种强大而灵活的方式来控制和自动执行系统管理任务。 项目地址:https://gitcode.com/gh_mirrors/po/PowerShell2. 思路
bat中注释使用rem
或::
,而powershell单行注释用#
,多行注释用<##>
,这一差异可以轻松将ps1脚本转为bat后缀的脚本,而不需要做大量的改动。
提示:在bat中:是个空命令,返回状态为0。
要想在bat脚本中运行powershell命令,需要使用powershell.exe的-Command
参数。幸运的是,ps1中你可以使用Invoke-Command
(别名icm
)来运行scriptblock,所以我们只需要将脚本文本通过[scriptblock]::Create()
做一个简单的转换就好了。
3. 代码
如果脚本编码不同,设置Get-Content
读取时的编码,或者用[IO.File]
类指定编码格式读取脚本.
<# :
@powershell "icm ([scriptblock]::Create((gc '%~f0' -Raw -Encoding UTF8)))"
exit
#>
Write-Host "Hello World" -fore Red
pause
# powershell script
2024-11-06 15:41:09【出处】:https://blog.csdn.net/qq_41755979/article/details/107370596
=======================================================================================
将powershell脚本嵌入至bat文件中
背景
将Powershell脚本嵌入至bat文件中可以有很多意想不到的收获,比如可以通过这个方式绕过授权,或者简化脚本的运行,或者可以便于复杂参数的配置
具体操作
@ECHO off
@setlocal EnableDelayedExpansion
@goto label1
@echo this lines should not be printed
@echo and this whole block (lines 4-8) can actually be removed
@echo I added these just for DoubleWen
@:label1
@set LF=^
@SET command=#
@chcp 65001 > nul
@FOR /F "tokens=*" %%i in ('findstr -bv @ "%~f0"') DO SET command=!command!!LF!%%i
@powershell -noprofile -command !command! & goto:eof
# *** POWERSHELL CODE STARTS HERE *** #
Write-Host '中文测试完美' -Fore red;
Write-Host 'This is PowerShell code being run from inside a batch file!' -Fore red;
$PSVersionTable;
Get-Process -Id $PID | Format-Table;
2024-11-06 15:40:11【出处】:https://blog.csdn.net/tcliuwenwen/article/details/117935243
=======================================================================================
使用批处理直接运行PowerShell脚本
背景:
作为一名苦逼的运维岗,需要经常写PowerShell脚本,自己写自己用,完美闭环,这本来没什么问题,但是由于项目、公司等等一系列的变更需求,这些脚本需要分发给普通用户使用,由于PowerShell脚本的运行有局限性,用户使用会有各种各样的问题,因此研究通过批处理直接运行PowerShell脚本。
思路:
1、考虑到易用性,给用户的必须是单个文件,因此通过批处理直接打开PowerShell脚本文件的方法行不通;
2、由于批处理涉及写入、删除等动作,因此批处理运行时需要自动提权;
3、PowerShell的运行依赖电脑的安全策略,默认不能运行,因此需要变更执行策略,使得电脑可以运行PowerShell脚本;
方法:
1、批处理中提权:
%1 start "" mshta vbscript:createobject("shell.application").shellexecute("""%~0""","::",,"runas",1)(window.close)&exit
2、变更电脑的执行策略,使得能够执行Powershell脚本:
PowerShell -Command "Set-ExecutionPolicy RemoteSigned -Scope CurrentUser"
3、批处理中通过“more”命令生成PowerShell脚本,生成完成之后再执行Powershell脚本,示例:
more +2 %0 > ps.ps1
Powershell -File "ps.ps1"
4、及时删除生成的PowerShell文件:
Remove-Item $MyInvocation.MyCommand.Path -Force
示例:
@echo off
%1 start "" mshta vbscript:createobject("shell.application").shellexecute("""%~0""","::",,"runas",1)(window.close)&exit
cd /d %~dp0
PowerShell -Command "Set-ExecutionPolicy RemoteSigned -Scope CurrentUser"
more +7 %0 > PSScripts.ps1
Powershell -File "PSScripts.ps1"
Remove-Item $MyInvocation.MyCommand.Path -Force
Write-Host "Hello,$env:USERNAME,看到这句话说明执行成功了,按回车键退出。。。" -ForegroundColor white -NoNewline
Read-Host
2024-11-06 15:53:41【出处】:https://blog.csdn.net/u011226383/article/details/128318755
=======================================================================================
标签:脚本,bat,嵌入,批处理,PowerShell,rsv,powershell From: https://www.cnblogs.com/mq0036/p/18530347