我试图将批处理文件处理的多个变量传递给Powershell脚本。我面临的问题是,首先批处理文件中的全部结果都出现在命令提示符下,而我打算传递的变量旁边没有传递给Powershell脚本。另外,只需将命令发送回屏幕,变量I就必须输出日志文件的内容。
我尝试了以下链接,这些链接使我了解到了现在为止:
批处理文件端
set LOG_FILE = "GDGAGnklasj;oks;fk;dkf lkl;"
set oName = Name
set oStart = "%YYYY%%MM%%DD% %TIME%"
set oStatus = 0
set oEnd = "%YYYY%%MM%%DD% %TIME%"
set oDateRan = %YYYY%%MM%%DD%
set oLog =for /f "delims=" %%i in (%LOG_FILE%) do set content=%content% %%i
echo Updating Database >> %LOG_FILE% 2>&1
cmd /S powershell.exe -ExecutionPolicy Bypass -File "C:\Reporting\updateTool.ps1" "%oName%" "%DateRan%" "%oStart%" "%oEnd%" "%oStatus "%oLog%
PowerShell脚本
param (
[string]$oName
)
"This is $oName"
我的目的是在批处理文件中设置变量,然后将它们发送到Powershell进行处理。
答案 0 :(得分:1)
哦,Easy-Peasy,我是为我的Power外壳这样做的,我们需要相当多的CMD包装器。
我必须跑到火车上,这会有点麻烦,现在我要固定一点,现在只是粘贴一些示例代码,以便我可以将其作为您的代码>
好吧,嗯,您打算将此特殊代码做什么?我似乎无法弄清楚您打算做什么,这只是一些伪代码吗?
set oLog =for /f "delims=" %%i in (%LOG_FILE%) do set content=%content% %%i
echo Updating Database >> %LOG_FILE% 2>&1
好的,进一步检查,我想您想将日志读入CMD中的几个sttring变量,然后在调用脚本时使用其中一个。....但是,为什么?
这两个字符串将相互追加,并且最多只能有8191个字符,而且由于将名称传递给Powershell,因此PowerShell可以轻松读取日志文件的内容。
这似乎是一个更好的计划,不是吗?
在所有具有YYYY MM DD的代码中,这些都是在使用前需要定义的变量,不确定是否可以理解。
.CMD脚本:
@(
SETLOCAL ENABLEDELAYEDEXPANSION
ECHO OFF
SET "_PSScript=C:\Reporting\UpdateTool.ps1"
REM SET "_DebugPreference=Continue"
SET "_DebugPreference="SilentlyContinue"
SET "_LOG_FILE=GDGAGnklasj;oks;fk;dkf lkl;"
SET "_oName=Name."
SET "_oStart=%YYYY%%MM%%DD% %TIME: =0%"
SET /a "_Status=0"
SET "_oEnd=%YYYY%%MM%%DD% %TIME: =0%"
SET "_oDateRan=%YYYY%%MM%%DD%"
)
SET "_PSCMD=Powershell "%_PSScript%" -DebugPreference "%_DebugPreference%" -LOG_FILE "%_LOG_FILE%" -oName "%_oName%" -oStart "%_oStart%" -Status %_Status% -oEnd "%_oEnd%" -oDateRan "%_oDateRan%" "
%_PSCMD% 2>&1 >> "_LOG_FILE"
PS1:
## Script: UpdateTool.ps1
#
param(
[String]$LOG_FILE = 'c:\admin\default.log',
[String]$oName = 'default name'
[String]$oStart = $(Get-date -F "yyyyMMdd HH:mm:ss.ms"),
[Int]$oStatus = 0,
[String]$oEnd = $(Get-date -F "yyyyMMdd HH:mm:ss.ms"),
[String]$oDateRan = $(Get-date -F "yyyyMMdd"),
$DebugPreference = "SilentlyContinue"
)
答案 1 :(得分:1)
请注意空格。
set oName=taco
PowerShell.exe -NoProfile -ExecutionPolicy Bypass -Command "& '.\ScriptName.ps1' -oName '%oName%' "