批处理多行powershell命令

批处理多行powershell命令,powershell,batch-file,multiline,Powershell,Batch File,Multiline,我正在尝试解析appsettings.json文件,以使用批处理脚本提取连接字符串 我将命令分散到多行,因为它很长,很难维护: set ps_GetConnectionString=(Get-Content 'appsettings.json' -Raw)^ | ForEach-Object { $_ -replace '(?ms)/\*.*?\*/' -replace '[\s\t]+//.*' }^ | ConvertFrom-Json^ | Select -expand Conne

我正在尝试解析appsettings.json文件,以使用批处理脚本提取连接字符串

我将命令分散到多行,因为它很长,很难维护:

set ps_GetConnectionString=(Get-Content 'appsettings.json' -Raw)^
 | ForEach-Object { $_ -replace '(?ms)/\*.*?\*/' -replace '[\s\t]+//.*' }^
 | ConvertFrom-Json^ 
 | Select -expand ConnectionStrings | Select default^ 
 | ConvertTo-Csv -Delimiter ~
运行此命令时,出现错误:
“ForEach-Object”未被识别为内部或外部命令


我们如何正确地将该命令分成多行,存储在一个变量中,以使
powershell-command
调用更短?

@LotPings向解决方案暗示,该解决方案是逃避批处理可能遇到的所有问题

因此,我得出以下结论:

set ps_GetConnectionString=(Get-Content 'appsettings.json' -Raw)^
 ^| ForEach-Object { $_ -replace '(?ms)/\*.*?\*/' -replace '[\s\t]+//.*' }^
 ^| ConvertFrom-Json^ 
 ^| Select -expand ConnectionStrings ^| Select default^ 
 ^| ConvertTo-Csv -Delimiter ~
在某些情况下,我还必须转义括号(特别是在块内部)


我假设上面的脚本/代码在
.bat
文件中?您能否将PowerShell部分转储到
ps1
/脚本文件中并以这种方式执行?单独调用PowerShell脚本命令的
.bat
背后的原因是什么?@gravity我有一个.bat文件,其中包含对
PowerShell-command
的多次调用,以便执行某些仅用批处理不太容易完成的任务。由于安全限制,我试图避免在powershell中编写所有内容。您希望在bat变量中构建ps脚本的方式无法工作。要使批处理行延续符号工作,它必须在双引号字符串之外,您需要转义PowerShell管道符号和未发送给batch=>的内容,这正是批处理错误消息的意思。为什么人们仍试图在批处理文件中包装PowerShell?住手。
set ps_GetConnectionString=^(Get-Content 'appsettings.json' -Raw^)^
 ^| ForEach-Object { $_ -replace '(?ms)/\*.*?\*/' -replace '[\s\t]+//.*' }^
 ^| ConvertFrom-Json^ 
 ^| Select -expand ConnectionStrings ^| Select default^ 
 ^| ConvertTo-Csv -Delimiter ~