如何在批处理文件中运行powershell命令

时间:2017-09-06 08:19:37

标签: powershell batch-file

@ECHO off

$BIOS= Get-WmiObject -computername "BAHRIATSG2-PC" -Namespace 
root/hp/instrumentedBIOS -Class HP_BIOSSettingInterface

$BIOS.SetBIOSSetting('Setup Password','<utf-16/>TheBIOSPassword','<utf-16/>')

pause

当我保存为.bat文件并运行它不起作用,否则当我手动输入时它在powershell中正常工作..

4 个答案:

答案 0 :(得分:5)

我认为this is是最简单,最清晰的方式,因为它不需要任何多余的开关;只是简单的PowerShell代码:

@ECHO off

PowerShell ^
   $BIOS= Get-WmiObject -computername \"BAHRIATSG2-PC\" -Namespace;  ^ 
   root/hp/instrumentedBIOS -Class HP_BIOSSettingInterface;  ^
   $BIOS.SetBIOSSetting('Setup Password','<utf-16/>TheBIOSPassword','<utf-16/>')

pause

只需在每行末尾添加; ^并使用反斜杠转义每个引号。

答案 1 :(得分:1)

将您的PowerShell代码包含在

powershell -Command "& {}"

请务必将所有语句与;分开,并将"括在一个带引号的字符串中,即使用""

powershell -Command "& {$BIOS= Get-WmiObject -computername ""BAHRIATSG2-PC\"" -Namespace root/hp/instrumentedBIOS -Class HP_BIOSSettingInterface; $BIOS.SetBIOSSetting('Setup Password','<utf-16/>TheBIOSPassword','<utf-16/>')}"

答案 2 :(得分:0)

powershell有自己的脚本文件类型,扩展名为.ps1

将代码保存为.ps1文件,并使用以下命令从批处理文件运行它:

powershell xxx.ps1

答案 3 :(得分:0)

关注此线程:
https://community.idera.com/database-tools/powershell/powertips/b/tips/posts/converting-powershell-to-batch


您可以使用此 PowerShell 功能轻松地将任何 PowerShell 脚本转换为批处理文件:

function Convert-PowerShellToBatch
{
    param
    (
        [Parameter(Mandatory,ValueFromPipeline,ValueFromPipelineByPropertyName)]
        [string]
        [Alias("FullName")]
        $Path
    )
 
    process
    {
        $encoded = [Convert]::ToBase64String([System.Text.Encoding]::Unicode.GetBytes((Get-Content -Path $Path -Raw -Encoding UTF8)))
        $newPath = [Io.Path]::ChangeExtension($Path, ".bat")
        "@echo off`npowershell.exe -NoExit -encodedCommand $encoded" | Set-Content -Path $newPath -Encoding Ascii
    }
}


要转换目录中的所有 PowerShell 脚本,只需运行以下命令:

Get-ChildItem -Path <DIR-PATH> -Filter *.ps1 |
  Convert-PowerShellToBatch

所需文件夹的路径在哪里。例如:

Get-ChildItem -Path "C:\path\to\powershell\scripts" -Filter *.ps1 |
  Convert-PowerShellToBatch


要转换单个 PowerShell 脚本,只需运行以下命令:

Get-ChildItem -Path <FILE-PATH> |
  Convert-PowerShellToBatch

所需文件的路径在哪里。

转换后的文件位于源目录中。即,