【发布时间】:2015-01-10 01:46:39
【问题描述】:
我正在编写一个通常会被另一个应用程序(VMware vCenter Server)调用的脚本。从该应用程序中,我触发了一个批处理文件 (redirect.bat) 并传递了一个变量,该变量是 powershell 脚本名称 (TestMe.ps1)。
脚本放置在 Windows Server 上,当我进入 Windows Server 的命令提示符并调用重定向脚本时,我看到我的 PowerShell 脚本按预期运行。但是,当我从应用程序触发它时,Powershell 脚本不会运行或不会产生输出。我确认 redirect.bat 已运行,因为 redirect.bat 在日志文件中写入了一行。
vCenter Server 应用程序正在本地系统帐户下运行。会不会是权限错误? LocalSystem 是否允许运行 Powershell 脚本?
我现在不知道 Powershell 脚本是否启动,因为它(当然)在运行时在我的控制台中不可见。批处理文件总是返回 errorlevel = 0。
关于如何在脚本中插入调试信息并始终提供输出的任何提示?有关如何解决此问题的提示?
redirect.bat:
set POWERSHELL=C:\WINDOWS\system32\windowspowershell\v1.0\powershell.exe -nologo -noprofile -noninteractive
SET ERRORLEVEL =
echo %1 > G:\DataStoreAlarms\Log\Redirect-batch.txt
start %POWERSHELL% -command "&"%1""
echo Error level: %ERRORLEVEL% >> G:\DataStoreAlarms\Log\Redirect-batch.txt
我从命令行和应用程序调用 redirect.bat,如下所示:
redirect.bat G:\DataStoreAlarms\Scripts\TestGabrie.ps1
TestGabrie.ps1:
$String = "This is a test"
$String | Out-File -FilePath "G:\DataStoreAlarms\Log\Powershell.txt" -Append
问候 加布里
【问题讨论】:
-
VCenter 服务器运行的是什么操作系统?
-
Windows Server 2012 (NT 6.2)。但如前所述,当我从服务器上的命令行运行它时,一切正常。
-
在该操作系统上,本地系统帐户无权访问网络资源。尝试使用网络服务帐户。
-
您必须在 .bat 文件中以明文形式包含凭据才能使其正常工作(不好的魔力)。您可以设置在网络服务帐户下运行的计划任务吗?本地系统帐户应该能够按需运行任务。
-
您可能需要将
-ExecutionPolicy Bypass添加到批处理命令中,以确保powershell 默认忽略执行策略(remoteSigned)并运行您向其抛出的任何脚本。另外,为什么要使用 START 命令?您可以直接从 redirect.bat 文件运行 powershell.exe 并将 stdout 重定向到日志文件,记住使用 &2>1 运算符重定向 stderr 和 stdin。
标签: debugging powershell